From 6fa1712e953d8c31e3ff065b13a0965dc59f7b24 Mon Sep 17 00:00:00 2001 From: Marc Parisi Date: Sat, 10 May 2025 07:12:58 -0400 Subject: [PATCH 1/5] update --- .../io/sentrius/agent/analysis/AiAgent.java | 3 + .../analysis/agents/agents/ChatAgent.java | 155 ++ .../analysis/agents/agents/PromptBuilder.java | 2 +- .../agents/agents/RegisteredAgent.java | 10 +- .../analysis/agents/verbs/AgentVerbs.java | 130 +- .../analysis/agents/verbs/TerminalVerbs.java | 9 + .../agents/verbs/UserConnectionVerbs.java | 77 + .../agent/analysis/api/AgentController.java | 26 + .../agent/analysis/api/AgentKeyService.java | 42 + .../api/UserCommunicationService.java | 43 + .../agent/analysis/api/UserCommunicator.java | 50 - .../analysis/api/websocket/ChatWSHandler.java | 146 ++ .../api/websocket/WebSocketConfig.java | 28 + .../analysis/model/TerminalResponse.java | 26 + .../agent/analysis/model/WebSocky.java | 27 + .../agent/analysis/model/ZtatAsessment.java | 1 + .../agent/config/AgentConfigOptions.java | 18 + .../agent/config/EphemeralKeyGen.java | 31 + .../sentrius/agent/config/SecurityConfig.java | 1 + ai-agent/src/main/resources/assess-ztat.json | 1 + .../src/main/resources/challenger-config.yaml | 3 + ai-agent/src/main/resources/chat-helper.json | 6 + .../src/main/resources/chat-helper.properties | 81 + .../src/main/resources/terminal-helper.json | 6 + .../main/resources/terminal-helper.properties | 77 + .../src/main/resources/terminal-helper.yaml | 5 + .../sso/config/GlobalExceptionHandler.java | 1 + .../sentrius/sso/config/SecurityConfig.java | 8 +- .../sso/controllers/CustomErrorHandler.java | 1 + .../controllers/api/AgentApiController.java | 35 +- .../api/AgentBootstrapController.java | 95 ++ .../api/ZeroTrustATApiController.java | 2 + .../sso/controllers/view/AgentController.java | 2 + .../templates/sso/agents/agent_comms.html | 19 +- .../resources/configs/application.properties | 10 +- api/src/test/resources/default-policy.yaml | 64 + .../sentrius/sso/config/KeycloakConfig.java | 3 +- .../sentrius/sso/config/KeycloakManager.java | 15 + .../sso/core/dto/AgentRegistrationDTO.java | 20 + .../services/agents/AgentClientService.java | 15 + .../agents/ZeroTrustClientService.java | 60 + .../services/security/KeycloakService.java | 54 +- .../sso/core/controllers/BaseController.java | 2 +- .../model/security/AccessControlAspect.java | 1 + .../AgentCommunicationRepository.java | 8 + .../core/services/agents/AgentService.java | 20 +- .../core/services/security/CryptoService.java | 22 + .../security/ZeroTrustAccessTokenService.java | 7 + ops-scripts/local/run-chat-agent.sh | 79 + sentrius-llm-core/target/jacoco.exec | Bin 20649 -> 0 bytes .../target/site/jacoco/index.html | 1 - ...eRequest$BaseGenerativeRequestBuilder.html | 1 - .../BaseGenerativeRequest.html | 1 - .../BaseGenerativeRequest.java.html | 42 - .../io.sentrius.sso.genai.api/index.html | 1 - .../index.source.html | 1 - ...Request$ChatApiEndpointRequestBuilder.html | 1 - ...est$ChatApiEndpointRequestBuilderImpl.html | 1 - .../ChatApiEndpointRequest.html | 1 - .../ChatApiEndpointRequest.java.html | 82 - ...ionRequest$ConversationRequestBuilder.html | 1 - ...equest$ConversationRequestBuilderImpl.html | 1 - .../ConversationRequest.html | 1 - .../ConversationRequest.java.html | 91 - ...Request$RawConversationRequestBuilder.html | 1 - ...est$RawConversationRequestBuilderImpl.html | 1 - .../RawConversationRequest.html | 1 - .../RawConversationRequest.java.html | 78 - .../index.html | 1 - .../index.source.html | 1 - ...ointRequest$ApiEndPointRequestBuilder.html | 1 - .../ApiEndPointRequest.html | 1 - .../ApiEndPointRequest.java.html | 44 - .../ComplianceRule$ComplianceRuleBuilder.html | 1 - .../ComplianceRule.html | 1 - .../ComplianceRule.java.html | 29 - .../Conversation$ConversationBuilder.html | 1 - .../Conversation.html | 1 - .../Conversation.java.html | 25 - .../LLMRequest$LLMRequestBuilder.html | 1 - .../LLMRequest$LLMRequestBuilderImpl.html | 1 - .../LLMRequest.html | 1 - .../LLMRequest.java.html | 153 -- .../LLMResponse$LLMResponseBuilder.html | 1 - .../LLMResponse.html | 1 - .../LLMResponse.java.html | 23 - ...woPartyRequest$TwoPartyRequestBuilder.html | 1 - .../TwoPartyRequest.html | 1 - .../TwoPartyRequest.java.html | 22 - .../io.sentrius.sso.genai.model/index.html | 1 - .../index.source.html | 1 - .../Message$MessageBuilder.html | 1 - .../jacoco/io.sentrius.sso.genai/Message.html | 1 - .../io.sentrius.sso.genai/Message.java.html | 48 - .../Response$Choice.html | 1 - .../Response$ResponseBuilder.html | 1 - .../io.sentrius.sso.genai/Response$Usage.html | 1 - .../io.sentrius.sso.genai/Response.html | 1 - .../io.sentrius.sso.genai/Response.java.html | 96 -- .../jacoco/io.sentrius.sso.genai/index.html | 1 - .../io.sentrius.sso.genai/index.source.html | 1 - .../site/jacoco/jacoco-resources/branchfc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchnc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchpc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/bundle.gif | Bin 709 -> 0 bytes .../site/jacoco/jacoco-resources/class.gif | Bin 586 -> 0 bytes .../site/jacoco/jacoco-resources/down.gif | Bin 67 -> 0 bytes .../site/jacoco/jacoco-resources/greenbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/group.gif | Bin 351 -> 0 bytes .../site/jacoco/jacoco-resources/method.gif | Bin 193 -> 0 bytes .../site/jacoco/jacoco-resources/package.gif | Bin 227 -> 0 bytes .../site/jacoco/jacoco-resources/prettify.css | 13 - .../site/jacoco/jacoco-resources/prettify.js | 1510 ----------------- .../site/jacoco/jacoco-resources/redbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/report.css | 243 --- .../site/jacoco/jacoco-resources/report.gif | Bin 363 -> 0 bytes .../site/jacoco/jacoco-resources/session.gif | Bin 213 -> 0 bytes .../site/jacoco/jacoco-resources/sort.gif | Bin 58 -> 0 bytes .../site/jacoco/jacoco-resources/sort.js | 148 -- .../site/jacoco/jacoco-resources/source.gif | Bin 354 -> 0 bytes .../site/jacoco/jacoco-resources/up.gif | Bin 67 -> 0 bytes .../target/site/jacoco/jacoco-sessions.html | 1 - .../target/site/jacoco/jacoco.csv | 31 - .../target/site/jacoco/jacoco.xml | 1 - sentrius-llm-dataplane/target/jacoco.exec | Bin 20649 -> 0 bytes .../target/site/jacoco/index.html | 1 - .../OpenAISessionRule.html | 1 - .../OpenAISessionRule.java.html | 132 -- .../TwoPartyAIMonitor.html | 1 - .../TwoPartyAIMonitor.java.html | 230 --- .../index.html | 1 - .../index.source.html | 1 - .../CommandCategorizer.html | 1 - .../CommandCategorizer.java.html | 122 -- .../CommandTrie.html | 1 - .../CommandTrie.java.html | 71 - .../TrieNode.html | 1 - .../TrieNode.java.html | 13 - .../index.html | 1 - .../index.source.html | 1 - .../OpenAITerminalService.html | 1 - .../OpenAITerminalService.java.html | 82 - .../OpenAITwoPartyMonitorService.html | 1 - .../OpenAITwoPartyMonitorService.java.html | 84 - .../index.html | 1 - .../index.source.html | 1 - .../AgentCommunicationMemoryStore.html | 1 - .../AgentCommunicationMemoryStore.java.html | 67 - .../index.html | 1 - .../index.source.html | 1 - .../TerminalSuggestors.html | 1 - .../TerminalSuggestors.java.html | 89 - .../index.html | 1 - .../index.source.html | 1 - .../ChatConversation.html | 1 - .../ChatConversation.java.html | 58 - ...ration$ComplianceConfigurationBuilder.html | 1 - ...on$ComplianceConfigurationBuilderImpl.html | 1 - .../ComplianceConfiguration.html | 1 - .../ComplianceConfiguration.java.html | 38 - .../ComplianceScorer.html | 1 - .../ComplianceScorer.java.html | 53 - .../io.sentrius.sso.genai/DataGenerator.html | 1 - .../DataGenerator.java.html | 25 - .../io.sentrius.sso.genai/GenerativeAPI.html | 1 - .../GenerativeAPI.java.html | 108 -- ...uration$GeneratorConfigurationBuilder.html | 1 - .../GeneratorConfiguration.html | 1 - .../GeneratorConfiguration.java.html | 22 - .../LLMCommandCategorizer.html | 1 - .../LLMCommandCategorizer.java.html | 87 - .../OpenAITwoPartyMonitor.html | 1 - .../OpenAITwoPartyMonitor.java.html | 84 - .../Response$Choice.html | 1 - .../Response$ResponseBuilder.html | 1 - .../io.sentrius.sso.genai/Response$Usage.html | 1 - .../io.sentrius.sso.genai/Response.html | 1 - .../io.sentrius.sso.genai/Response.java.html | 96 -- .../TerminalComplianceScorer.html | 1 - .../TerminalComplianceScorer.java.html | 38 - ...ation$TerminalLogConfigurationBuilder.html | 1 - ...n$TerminalLogConfigurationBuilderImpl.html | 1 - .../TerminalLogConfiguration.html | 1 - .../TerminalLogConfiguration.java.html | 32 - .../jacoco/io.sentrius.sso.genai/index.html | 1 - .../io.sentrius.sso.genai/index.source.html | 1 - .../site/jacoco/jacoco-resources/branchfc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchnc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/branchpc.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/bundle.gif | Bin 709 -> 0 bytes .../site/jacoco/jacoco-resources/class.gif | Bin 586 -> 0 bytes .../site/jacoco/jacoco-resources/down.gif | Bin 67 -> 0 bytes .../site/jacoco/jacoco-resources/greenbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/group.gif | Bin 351 -> 0 bytes .../site/jacoco/jacoco-resources/method.gif | Bin 193 -> 0 bytes .../site/jacoco/jacoco-resources/package.gif | Bin 227 -> 0 bytes .../site/jacoco/jacoco-resources/prettify.css | 13 - .../site/jacoco/jacoco-resources/prettify.js | 1510 ----------------- .../site/jacoco/jacoco-resources/redbar.gif | Bin 91 -> 0 bytes .../site/jacoco/jacoco-resources/report.css | 243 --- .../site/jacoco/jacoco-resources/report.gif | Bin 363 -> 0 bytes .../site/jacoco/jacoco-resources/session.gif | Bin 213 -> 0 bytes .../site/jacoco/jacoco-resources/sort.gif | Bin 58 -> 0 bytes .../site/jacoco/jacoco-resources/sort.js | 148 -- .../site/jacoco/jacoco-resources/source.gif | Bin 354 -> 0 bytes .../site/jacoco/jacoco-resources/up.gif | Bin 67 -> 0 bytes .../target/site/jacoco/jacoco-sessions.html | 1 - .../target/site/jacoco/jacoco.csv | 29 - .../target/site/jacoco/jacoco.xml | 1 - 209 files changed, 1456 insertions(+), 6327 deletions(-) create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/UserConnectionVerbs.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentKeyService.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java delete mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicator.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/model/TerminalResponse.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java create mode 100644 ai-agent/src/main/java/io/sentrius/agent/config/EphemeralKeyGen.java create mode 100644 ai-agent/src/main/resources/chat-helper.json create mode 100644 ai-agent/src/main/resources/chat-helper.properties create mode 100644 ai-agent/src/main/resources/terminal-helper.json create mode 100644 ai-agent/src/main/resources/terminal-helper.properties create mode 100644 ai-agent/src/main/resources/terminal-helper.yaml create mode 100644 api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java create mode 100644 api/src/test/resources/default-policy.yaml create mode 100644 core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java create mode 100755 ops-scripts/local/run-chat-agent.sh delete mode 100644 sentrius-llm-core/target/jacoco.exec delete mode 100644 sentrius-llm-core/target/site/jacoco/index.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-sessions.html delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.csv delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.xml delete mode 100644 sentrius-llm-dataplane/target/jacoco.exec delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilder.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration$GeneratorConfigurationBuilder.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.java.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.source.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchfc.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchnc.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchpc.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/bundle.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/class.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/down.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/greenbar.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/group.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/method.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/package.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.css delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.js delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/redbar.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.css delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/session.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.js delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/source.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/up.gif delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco-sessions.html delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco.csv delete mode 100644 sentrius-llm-dataplane/target/site/jacoco/jacoco.xml diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/AiAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/AiAgent.java index 01bb40de..49cd6d8f 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/AiAgent.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/AiAgent.java @@ -1,7 +1,9 @@ package io.sentrius.agent.analysis; +import io.sentrius.agent.config.AgentConfigOptions; import org.springframework.boot.SpringApplication; import org.springframework.boot.autoconfigure.SpringBootApplication; +import org.springframework.boot.context.properties.EnableConfigurationProperties; import org.springframework.scheduling.annotation.EnableScheduling; @@ -11,6 +13,7 @@ org.springframework.boot.autoconfigure.orm.jpa.HibernateJpaAutoConfiguration.class, org.springframework.boot.autoconfigure.data.jpa.JpaRepositoriesAutoConfiguration.class }) +@EnableConfigurationProperties(AgentConfigOptions.class) @EnableScheduling public class AiAgent { public static void main(String[] args) { diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java new file mode 100644 index 00000000..78600182 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java @@ -0,0 +1,155 @@ +package io.sentrius.agent.analysis.agents.agents; + +import java.util.concurrent.TimeUnit; +import com.fasterxml.jackson.core.JsonProcessingException; +import com.fasterxml.jackson.databind.node.ArrayNode; +import io.sentrius.agent.analysis.agents.verbs.AgentVerbs; +import io.sentrius.agent.analysis.api.AgentKeyService; +import io.sentrius.agent.analysis.api.UserCommunicationService; +import io.sentrius.agent.config.AgentConfigOptions; +import io.sentrius.sso.core.dto.UserDTO; +import io.sentrius.sso.core.dto.ztat.AgentExecution; +import io.sentrius.sso.core.dto.ztat.ZtatRequestDTO; +import io.sentrius.sso.core.exceptions.ZtatException; +import io.sentrius.sso.core.model.security.Ztat; +import io.sentrius.sso.core.services.agents.AgentClientService; +import io.sentrius.sso.core.services.agents.AgentExecutionService; +import io.sentrius.sso.core.services.agents.ZeroTrustClientService; +import io.sentrius.sso.core.services.security.KeycloakService; +import io.sentrius.sso.core.utils.JsonUtil; +import jakarta.annotation.PreDestroy; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.autoconfigure.condition.ConditionalOnProperty; +import org.springframework.boot.context.event.ApplicationReadyEvent; +import org.springframework.context.ApplicationListener; +import org.springframework.stereotype.Component; + +@Slf4j +@Component +@RequiredArgsConstructor +@ConditionalOnProperty(name = "agents.ai.chat.agent.enabled", havingValue = "true", matchIfMissing = false) +public class ChatAgent implements ApplicationListener { + + + final ZeroTrustClientService zeroTrustClientService; + final AgentClientService agentClientService; + final VerbRegistry verbRegistry; + final AgentVerbs agentVerbs; + final AgentExecutionService agentExecutionService; + final UserCommunicationService userCommunicationService; + final AgentConfigOptions agentConfigOptions; + final AgentKeyService agentKeyService; + private final KeycloakService keycloakService; + + private volatile boolean running = true; + private Thread workerThread; + + public ArrayNode promptAgent(AgentExecution execution) throws ZtatException { + while(true){ + try { + log.info("Prompting agent..."); + return agentVerbs.promptAgent(execution,null); + } catch (ZtatException e) { + log.info("Mechanisms {}" , e.getMechanisms()); + var endpoint = zeroTrustClientService.createEndPointRequest("prompt_agent", e.getEndpoint()); + ZtatRequestDTO ztatRequestDTO = ZtatRequestDTO.builder() + .user(execution.getUser()) + .command(endpoint.toString()) + .justification("Registered Agent requires ability to prompt LLM endpoints to begin operations") + .summary("Registered Agent requires ability to prompt LLM endpoints to begin operations") + .build(); + var request = zeroTrustClientService.requestZtatToken(execution, execution.getUser(),ztatRequestDTO); + + var token = zeroTrustClientService.awaitZtatToken(execution, execution.getUser(), request, 60, + TimeUnit.MINUTES); + execution.setZtatToken(token); + } catch (Exception e) { + log.error(e.getMessage()); + throw new RuntimeException(e); + } + } + } + + @Override + public void onApplicationEvent(final ApplicationReadyEvent event) { + + verbRegistry.scanClasspath(); + + var keyPair = agentKeyService.getKeyPair(); + + try { + var base64PublicKey = agentKeyService.getBase64PublicKey(keyPair.getPublic()); + var agentRegistrationDTO = agentClientService.bootstrap(agentConfigOptions.getName(), base64PublicKey + , keyPair.getPublic().getAlgorithm()); + + var encryptedSecret = agentRegistrationDTO.getClientSecret(); + var decryptedSecret = agentKeyService. + decryptWithPrivateKey(encryptedSecret, keyPair.getPrivate()); + keycloakService.createKeycloakClient(agentRegistrationDTO.getAgentName(), + decryptedSecret); + + + } catch (ZtatException e) { + throw new RuntimeException(e); + } catch (JsonProcessingException e) { + throw new RuntimeException(e); + } + + + final UserDTO user = UserDTO.builder() + .username(zeroTrustClientService.getUsername()) + .build(); + var execution = agentExecutionService.getAgentExecution(user); + try { + agentClientService.heartbeat(execution, execution.getUser().getUsername()); + } catch (ZtatException e) { + throw new RuntimeException(e); + } + + while(running) { + + try { + var register = zeroTrustClientService.registerAgent(execution); + log.info("Registered agent response: {}", register); + + var ztat = JsonUtil.MAPPER.readValue(register, Ztat.class); + execution.setZtatToken(ztat.getZtatToken()); + execution.setCommunicationId(ztat.getCommunicationId()); + break; + }catch (Exception | ZtatException e) { + + log.error(e.getMessage()); + log.info("Registering v1.0.2 agent failed. Retrying in 10 seconds..."); + try { + Thread.sleep(10_000); + } catch (InterruptedException ex) { + throw new RuntimeException(ex); + } + } + } + + while(running) { + + log.info("Registering v1.0.2 agent failed. Retrying in 10 seconds..."); + try { + + Thread.sleep(5_000); + } catch (InterruptedException ex) { + throw new RuntimeException(ex); + } + + } + + } + + @PreDestroy + public void shutdown() { + log.info("Shutting down ChatAgent..."); + running = false; + if (workerThread != null) { + workerThread.interrupt(); + } + } + +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/PromptBuilder.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/PromptBuilder.java index e46d9218..924cb95e 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/PromptBuilder.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/PromptBuilder.java @@ -63,7 +63,7 @@ public String buildPrompt() { verbRegistry.getVerbs().forEach((name, verb) -> { prompt.append("- ").append(name); prompt.append(" (").append(buildMethodSignature(verb.getMethod())).append(") - "); - prompt.append(verb.getDescription()).append(")\n"); + prompt.append(verb.getDescription()).append("\n"); }); return prompt.toString(); diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/RegisteredAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/RegisteredAgent.java index 90a38d0e..d901e0e7 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/RegisteredAgent.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/RegisteredAgent.java @@ -109,10 +109,10 @@ public void onApplicationEvent(final ApplicationReadyEvent event) { + var agentExecution = agentExecutionService.getAgentExecution(user); + var response = promptAgent(agentExecution); while (running) { try { - var agentExecution = agentExecutionService.getAgentExecution(user); - var response = promptAgent(agentExecution); log.info("Got response: {}", response); VerbResponse priorResponse = null; @@ -129,16 +129,14 @@ public void onApplicationEvent(final ApplicationReadyEvent event) { } catch (Exception e) { log.error("Exception in agent loop", e); - } catch (ZtatException e) { - throw new RuntimeException(e); } // Sleep between prompts log.info("Sleeping for 5 seconds"); - Thread.sleep(1_000); + Thread.sleep(5_000); } - } catch (Exception e) { + } catch (Exception | ZtatException e) { log.error("Fatal error in RegisteredAgent", e); } }); diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java index 49dc3732..50c4de28 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java @@ -27,6 +27,8 @@ import io.sentrius.agent.analysis.agents.interpreters.ZtatOutputInterpreter; import io.sentrius.agent.analysis.model.AssessedTerminal; import io.sentrius.agent.analysis.model.Assessment; +import io.sentrius.agent.analysis.model.TerminalResponse; +import io.sentrius.agent.analysis.model.WebSocky; import io.sentrius.agent.analysis.model.ZtatAsessment; import io.sentrius.agent.analysis.model.ZtatResponse; import io.sentrius.sso.core.dto.AgentCommunicationDTO; @@ -43,6 +45,7 @@ import io.sentrius.sso.genai.Message; import io.sentrius.sso.genai.Response; import io.sentrius.sso.genai.model.LLMRequest; +import lombok.NonNull; import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -138,6 +141,111 @@ public ArrayNode promptAgent(AgentExecution execution, Map args) return JsonUtil.MAPPER.createArrayNode(); } + /** + * Prompts the agent for workload based on the provided arguments. + * + * @return An `ArrayNode` containing the plan generated by the agent. + * @throws ZtatException If there is an error during the operation. + * @throws IOException If there is an error reading the configuration file. + */ + @Verb(name = "interpret_user_request", returnType = ArrayNode.class, description = "Queries the LLM using the " + + "user input.", + isAiCallable = false, requiresTokenManagement = true) + public TerminalResponse interpretUserData(AgentExecution execution, @NonNull WebSocky socketConnection) throws ZtatException, + IOException { + + var lastMessage = socketConnection.getMessages().stream().reduce((prev, next) -> next).orElse(null); + if (socketConnection.getMessages().isEmpty()) { + + InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream("terminal-helper.json"); + if (terminalHelperStream == null) { + throw new RuntimeException("assessor-config.yaml not found on classpath"); + + } + String terminalResponse = new String(terminalHelperStream.readAllBytes()); + InputStream is = getClass().getClassLoader().getResourceAsStream(agentConfigFile); + if (is == null) { + throw new RuntimeException(agentConfigFile + " not found on classpath"); + } + AgentConfig config = new ObjectMapper(new YAMLFactory()).readValue(is, AgentConfig.class); + + log.info("Agent config loaded: {}", config); + PromptBuilder promptBuilder = new PromptBuilder(verbRegistry, config); + var prompt = promptBuilder.buildPrompt(); + List messages = new ArrayList<>(); + + messages.add(Message.builder().role("system").content(prompt).build()); + messages.add(Message.builder().role("system").content("Please ensure your respones abide by the " + + "following json format. Please summarize prior terminal sessions, using terminal output if needed " + + "for clarity of the next LLM request and for the user: " + terminalResponse).build()); + + LLMRequest chatRequest = LLMRequest.builder().model("gpt-4o").messages(messages).build(); + var resp = llmService.askQuestion(execution, chatRequest); + execution.addMessages( messages ); + Response response = JsonUtil.MAPPER.readValue(resp, Response.class); + log.info("Response is {}", resp); + for (Response.Choice choice : response.getChoices()) { + var content = choice.getMessage().getContent(); + if (content.startsWith("```json")) { + content = content.substring(7, content.length() - 3); + } else if (content.startsWith("```")) { + content = content.substring(3, content.length() - 3); + } + log.info("content is {}", content); + if (null != content && !content.isEmpty()) { + var newResponse = JsonUtil.MAPPER.enable(JsonParser.Feature.ALLOW_COMMENTS).readValue(content, + TerminalResponse.class); + return newResponse; + } + } + } else { + InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream("terminal-helper.json"); + if (terminalHelperStream == null) { + throw new RuntimeException("assessor-config.yaml not found on classpath"); + + } + String terminalResponse = new String(terminalHelperStream.readAllBytes()); + InputStream is = getClass().getClassLoader().getResourceAsStream(agentConfigFile); + if (is == null) { + throw new RuntimeException(agentConfigFile + " not found on classpath"); + } + AgentConfig config = new ObjectMapper(new YAMLFactory()).readValue(is, AgentConfig.class); + + log.info("Agent config loaded: {}", config); + PromptBuilder promptBuilder = new PromptBuilder(verbRegistry, config); + var prompt = promptBuilder.buildPrompt(); + List messages = new ArrayList<>(); + + messages.add(Message.builder().role("system").content(prompt).build()); + messages.add(Message.builder().role("system").content("Please ensure your respones abide by the " + + "following json format. Please summarize prior terminal sessions, using terminal output if needed " + + "for clarity of the next LLM request and for the user: " + terminalResponse).build()); + messages.add(Message.builder().role("assistant").content("prior response: " + lastMessage.getTerminalSummaryForLLM()).build()); + + LLMRequest chatRequest = LLMRequest.builder().model("gpt-4o").messages(messages).build(); + var resp = llmService.askQuestion(execution, chatRequest); + execution.addMessages( messages ); + Response response = JsonUtil.MAPPER.readValue(resp, Response.class); + log.info("Response is {}", resp); + for (Response.Choice choice : response.getChoices()) { + var content = choice.getMessage().getContent(); + if (content.startsWith("```json")) { + content = content.substring(7, content.length() - 3); + } else if (content.startsWith("```")) { + content = content.substring(3, content.length() - 3); + } + log.info("content is {}", content); + if (null != content && !content.isEmpty()) { + var newResponse = JsonUtil.MAPPER.enable(JsonParser.Feature.ALLOW_COMMENTS).readValue(content, + TerminalResponse.class); + return newResponse; + } + } + } + + return null; + } + /** * Chats with an agent to justify operations based on the provided arguments. * @@ -267,7 +375,8 @@ public String justifyAgent(AgentExecution execution, ZtatRequestDTO ztatRequest, */ @Verb(name = "assess_data", returnType = ArrayNode.class, description = "Accepts api server data based on the " + "context and seeks" + - " to perform the assessment by prompting the LLM. Can be used to assess data or request information from users and/or agents.", + " to perform the assessment by prompting the LLM. Can be used to assess data or request information from " + + "users and/or agents, but not for assessing ztat requests.", outputInterpreter = AsessmentListInterpreter.class, inputInterpreter = ObjectListInterpreter.class, requiresTokenManagement = true) @@ -310,8 +419,11 @@ public List assessData(AgentExecution execution, List objec return responses; } - @Verb(name = "list_ztat_requests", returnType = ArrayNode.class, description = "Lists zero trust access tokens to" + - " review from API. Does not review access token requests.", outputInterpreter = ZtatOutputInterpreter.class, + @Verb(name = "list_ztat_requests", returnType = ArrayNode.class, description = "Lists zero trust access token " + + "requests (ztats)" + + " " + + "to" + + " review from API. Does not review ztats.", outputInterpreter = ZtatOutputInterpreter.class, requiresTokenManagement = true ) public List getWork(AgentExecution token, Map args) throws ZtatException, IOException { List requests = new ArrayList<>(); @@ -363,8 +475,8 @@ public List getWork(AgentExecution token, Map args) return requests; } - @Verb(name = "assess_ztat_requests", returnType = ArrayNode.class, description = "Analyzes ztats according to the" + - " context.", + @Verb(name = "assess_ztat_requests", returnType = ArrayNode.class, description = "Analyzes ztats " + + "requests according to the by prompting the LLM. ", inputInterpreter = ZtatOutputInterpreter.class, requiresTokenManagement = true ) public List analyzeAtatRequests(AgentExecution execution, List requests) throws ZtatException, @@ -397,7 +509,8 @@ public List analyzeAtatRequests(AgentExecution execution, List analyzeAtatRequests(AgentExecution execution, List analyzeAtatRequests(AgentExecution execution, List killTerminalSessionWithTerminalAssessment(AgentExecution } } + @Verb(name = "open_ssh_session", description = "Opens an SSH websocket connection.", + requiresTokenManagement = true, + outputInterpreter = TerminalOutputInterpreter.class, inputInterpreter = AsessmentListInterpreter.class) + public List openSSHSession(AgentExecution execution) + throws ZtatException, IOException { + log.info("Opening SSH session"); + return null; + } + } \ No newline at end of file diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/UserConnectionVerbs.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/UserConnectionVerbs.java new file mode 100644 index 00000000..c65a3fb0 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/UserConnectionVerbs.java @@ -0,0 +1,77 @@ +package io.sentrius.agent.analysis.agents.verbs; + +import java.util.ArrayList; +import java.util.List; +import java.util.Map; +import com.fasterxml.jackson.databind.JsonNode; +import io.sentrius.agent.analysis.agents.interpreters.TerminalListInterpreter; +import io.sentrius.agent.analysis.api.UserCommunicationService; +import io.sentrius.sso.core.dto.HostSystemDTO; +import io.sentrius.sso.core.dto.ztat.TokenDTO; +import io.sentrius.sso.core.exceptions.ZtatException; +import io.sentrius.sso.core.model.verbs.Verb; +import io.sentrius.sso.core.services.agents.LLMService; +import io.sentrius.sso.core.services.agents.ZeroTrustClientService; +import io.sentrius.sso.core.utils.JsonUtil; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +/** + * The `TerminalVerbs` class provides methods to interact with terminal-related operations. + * It includes functionality to list open terminals and fetch terminal logs. + */ +@Slf4j +@Service +public class UserConnectionVerbs { + + final ZeroTrustClientService zeroTrustClientService; + final LLMService llmService; + final AgentVerbs agentVerbs; + final UserCommunicationService userCommunicationService; + + /** + * Constructs a `TerminalVerbs` instance with the required services. + * + * @param zeroTrustClientService The service for interacting with Zero Trust APIs. + * @param llmService The service for interacting with the LLM (Large Language Model). + */ + public UserConnectionVerbs(ZeroTrustClientService zeroTrustClientService, LLMService llmService, AgentVerbs agentVerbs, + UserCommunicationService userCommunicationService + ) { + this.zeroTrustClientService = zeroTrustClientService; + this.llmService = llmService; + this.agentVerbs = agentVerbs; + this.userCommunicationService = userCommunicationService; + } + + /** + * Retrieves a list of currently open terminals. + * + * @param args A map of arguments for the operation (currently unused). + * @return An `ArrayNode` containing the list of open terminals. + * @throws io.sentrius.sso.core.exceptions.ZtatException If there is an error during the operation. + */ + @Verb(name = "list_hosts", description = "Retrieves a list of available hosts.", + outputInterpreter = TerminalListInterpreter.class, requiresTokenManagement = true) + public List listHosts(TokenDTO token, Map args) throws ZtatException { + try { + var response = zeroTrustClientService.callGetOnApi(token, "/sso/v1/enclaves/hosts/list"); + if (response == null) { + throw new RuntimeException("Failed to retrieve terminal list"); + } + var messages = JsonUtil.MAPPER.readTree(response); + List hostSystemDTOS = new ArrayList<>(); + for(JsonNode message : messages) { + HostSystemDTO dto = JsonUtil.MAPPER.readValue(message.toString(), HostSystemDTO.class); + hostSystemDTOS.add(dto); + } + log.info("Terminal list response: {}", response); + return hostSystemDTOS; + } catch (Exception e) { + throw new RuntimeException("Failed to retrieve terminal list", e); + } + } + + + +} \ No newline at end of file diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java index 8b992029..a07f2df9 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java @@ -3,11 +3,14 @@ import java.lang.management.ManagementFactory; import java.net.InetAddress; import java.net.UnknownHostException; +import io.sentrius.agent.config.AgentConfigOptions; +import io.sentrius.sso.core.dto.AgentRegistrationDTO; import io.sentrius.sso.core.model.AgentStatus; import io.sentrius.sso.core.services.security.KeycloakService; import lombok.extern.slf4j.Slf4j; import org.springframework.http.ResponseEntity; import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; import org.springframework.web.bind.annotation.RequestMapping; import org.springframework.web.bind.annotation.RestController; @@ -17,6 +20,8 @@ public class AgentController { KeycloakService keycloakService; + AgentKeyService agentKeyService; + AgentConfigOptions agentConfig; @GetMapping("/ping") public ResponseEntity getStatus() { @@ -47,4 +52,25 @@ public ResponseEntity getStatus() { return ResponseEntity.ok(status); } + @GetMapping("/describe") + public ResponseEntity describeAgent() { + AgentRegistrationDTO dto = AgentRegistrationDTO.builder() + .agentName(agentConfig.getName()) + .agentPublicKey(agentKeyService.getKeyPair().getPublic().toString()) + .agentPublicKeyAlgo(agentKeyService.getKeyPair().getPublic().getAlgorithm()) + .build(); + return ResponseEntity.ok(dto); + } + + @PostMapping("/register") + public ResponseEntity getRegistration + () { + AgentRegistrationDTO dto = AgentRegistrationDTO.builder() + .agentName(agentConfig.getName()) + .agentPublicKey(agentKeyService.getKeyPair().getPublic().toString()) + .agentPublicKeyAlgo(agentKeyService.getKeyPair().getPublic().getAlgorithm()) + .build(); + return ResponseEntity.ok(dto); + } + } diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentKeyService.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentKeyService.java new file mode 100644 index 00000000..9f7d681e --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentKeyService.java @@ -0,0 +1,42 @@ +package io.sentrius.agent.analysis.api; + +import java.security.KeyPair; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; +import io.sentrius.agent.config.EphemeralKeyGen; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Service; + +@Slf4j +@Service +public class AgentKeyService { + + final KeyPair keyPair; + + public AgentKeyService(){ + try { + keyPair = EphemeralKeyGen.generateEphemeralRSAKeyPair(); + } catch ( + NoSuchAlgorithmException e) { + throw new RuntimeException(e); + } + + } + + public KeyPair getKeyPair() { + return keyPair; + } + + public String getBase64PublicKey(PublicKey aPublic) { + return EphemeralKeyGen.getBase64PublicKey(aPublic); + } + + public String decryptWithPrivateKey(String encryptedSecret, PrivateKey aPrivate) { + try { + return EphemeralKeyGen.decryptRSAWithPrivateKey(encryptedSecret, aPrivate); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java new file mode 100644 index 00000000..7083ae79 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java @@ -0,0 +1,43 @@ +package io.sentrius.agent.analysis.api; + +import java.lang.management.ManagementFactory; +import java.net.InetAddress; +import java.net.UnknownHostException; +import java.util.Optional; +import java.util.concurrent.ConcurrentHashMap; +import io.sentrius.agent.analysis.model.WebSocky; +import io.sentrius.sso.core.model.AgentStatus; +import io.sentrius.sso.core.services.security.KeycloakService; +import lombok.extern.slf4j.Slf4j; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.http.ResponseEntity; +import org.springframework.stereotype.Service; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; +import org.springframework.web.socket.WebSocketSession; + +@Slf4j +@Service +public class UserCommunicationService { + + KeycloakService keycloakService; + + @Value("${agent.listen.websocket:false}") // Default is false + private boolean listenWebSocket; + + private final ConcurrentHashMap sessions = new ConcurrentHashMap<>(); + + public void createSession(String sessionId, WebSocketSession session) { + sessions.put(sessionId, WebSocky.builder().sessionId(sessionId).webSocketSession(session).build()); + } + + public Optional getSession(String sessionId) { + return Optional.of(sessions.get(sessionId)); + } + + public void remove(String sessionId) { + sessions.remove(sessionId); + } +} + diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicator.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicator.java deleted file mode 100644 index 954beda5..00000000 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicator.java +++ /dev/null @@ -1,50 +0,0 @@ -package io.sentrius.agent.analysis.api; - -import java.lang.management.ManagementFactory; -import java.net.InetAddress; -import java.net.UnknownHostException; -import io.sentrius.sso.core.model.AgentStatus; -import io.sentrius.sso.core.services.security.KeycloakService; -import lombok.extern.slf4j.Slf4j; -import org.springframework.http.ResponseEntity; -import org.springframework.web.bind.annotation.GetMapping; -import org.springframework.web.bind.annotation.RequestMapping; -import org.springframework.web.bind.annotation.RestController; - -@Slf4j -@RestController -@RequestMapping("/api/v1/agent/communicator") -public class UserCommunicator { - - KeycloakService keycloakService; - - @GetMapping("/ping") - public ResponseEntity getStatus() { - String hostName = "unknown"; - try { - hostName = InetAddress.getLocalHost().getHostName(); - } catch (UnknownHostException e) { - log.warn("Unable to resolve hostname", e); - } - - long uptimeMillis = ManagementFactory.getRuntimeMXBean().getUptime(); - Runtime runtime = Runtime.getRuntime(); - - AgentStatus status = AgentStatus.builder() - .status("UP") - .version("1.0.0") - .health("OK") - .osName(System.getProperty("os.name")) - .osArch(System.getProperty("os.arch")) - .osVersion(System.getProperty("os.version")) - .hostName(hostName) - .uptimeMillis(uptimeMillis) - .totalMemory(runtime.totalMemory()) - .freeMemory(runtime.freeMemory()) - .build(); - - log.info("Ping status: {}", status); - return ResponseEntity.ok(status); - } - -} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java new file mode 100644 index 00000000..e67ce8ab --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java @@ -0,0 +1,146 @@ + +package io.sentrius.agent.analysis.api.websocket; + +import java.io.IOException; +import java.net.URI; +import java.security.GeneralSecurityException; +import java.util.Base64; +import java.util.Map; +import java.util.concurrent.ConcurrentHashMap; +import java.util.stream.Collectors; +import java.util.stream.Stream; +import io.sentrius.agent.analysis.api.UserCommunicationService; +import io.sentrius.sso.protobuf.Session; +import lombok.RequiredArgsConstructor; +import lombok.extern.slf4j.Slf4j; +import org.springframework.stereotype.Component; +import org.springframework.web.socket.TextMessage; +import org.springframework.web.socket.WebSocketSession; +import org.springframework.web.socket.handler.TextWebSocketHandler; + +@Slf4j +@Component +@RequiredArgsConstructor +public class ChatWSHandler extends TextWebSocketHandler { + + UserCommunicationService userCommunicationService; + // Store active sessions, using session ID or a custom identifier + + + @Override + public void afterConnectionEstablished(WebSocketSession session) throws Exception { + // Extract query parameters from the URI + URI uri = session.getUri(); + if (uri != null) { + Map queryParams = parseQueryParams(uri.getQuery()); + String sessionId = queryParams.get("sessionId"); + + + + if (sessionId != null) { + // Store the WebSocket session using the session ID from the query parameter + userCommunicationService.createSession(sessionId,session); + log.info("New connection established, session ID: " + sessionId); + // until we have another human on the other side we don't need a thread for this. + //chatListenerService.startChatListener(sessionId, session); + + } else { + log.info("Session ID not found in query parameters."); + session.close(); // Close the session if no valid session ID is provided + } + } else { + log.info("No URI available for this session."); + session.close(); // Close the session if URI is unavailable + } + } + + @Override + protected void handleTextMessage(WebSocketSession session, TextMessage message) + throws IOException, GeneralSecurityException { + + // Extract query parameters from the URI again if needed + URI uri = session.getUri(); + log.info("got message {}", uri); + try { + if (uri != null) { + Map queryParams = parseQueryParams(uri.getQuery()); + String sessionId = queryParams.get("sessionId"); + + if (sessionId != null) { + log.info("Received message from session ID: " + sessionId); + // Handle the message (e.g., process or respond) + + + // Deserialize the protobuf message + byte[] messageBytes = Base64.getDecoder().decode(message.getPayload()); + Session.ChatMessage auditLog = + Session.ChatMessage.parseFrom(messageBytes); + if (auditLog.getMessage().equals("heartbeat")){ + log.info("heartbeat"); + return; + } + + var connection = userCommunicationService.getSession(sessionId); + + + + } else { + log.info("Session ID not found in query parameters for message handling."); + } + } + }catch (Exception e ){ + throw new RuntimeException(e); + } + } + + @Override + public void afterConnectionClosed(WebSocketSession session, org.springframework.web.socket.CloseStatus status) throws Exception { + URI uri = session.getUri(); + if (uri != null) { + Map queryParams = parseQueryParams(uri.getQuery()); + String sessionId = queryParams.get("sessionId"); + + if (sessionId != null) { + // Remove the session when connection is closed + var lookupId = sessionId + "=="; + + + userCommunicationService.remove(sessionId); + + log.info("Connection closed, session ID: " + sessionId); + } + } + } + + // Utility method to parse query parameters + private Map parseQueryParams(String query) { + if (query == null || query.isEmpty()) { + return Map.of(); + } + return Stream.of(query.split("&")) + .map(param -> param.split("=")) + .collect(Collectors.toMap( + param -> param[0], + param -> param.length > 1 ? param[1] : "" + )); + } + + // Utility method to send a message to a specific session + public void sendMessageToSession(String sessionId, String message) { + var websocket = userCommunicationService.getSession(sessionId); + if (websocket.isPresent()) { + WebSocketSession session = websocket.get().getWebSocketSession(); + + if (session != null && session.isOpen()) { + try { + session.sendMessage(new TextMessage(message)); + } catch (IOException e) { + System.err.println("Error sending message to session " + sessionId); + e.printStackTrace(); + } + } else { + System.err.println("Session not found or already closed: " + sessionId); + } + } + } +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java new file mode 100644 index 00000000..513b89cc --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java @@ -0,0 +1,28 @@ +package io.sentrius.agent.analysis.api.websocket; + +import lombok.RequiredArgsConstructor; +import org.springframework.beans.factory.annotation.Value; +import org.springframework.context.annotation.Configuration; +import org.springframework.web.socket.config.annotation.EnableWebSocket; +import org.springframework.web.socket.config.annotation.WebSocketConfigurer; +import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry; + +@Configuration +@EnableWebSocket +@RequiredArgsConstructor +public class WebSocketConfig implements WebSocketConfigurer { + + @Value("${agent.listen.websocket:false}") // Default is false + private boolean listenWebSocket; + + private final ChatWSHandler chatWSHandler; + @Override + public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) { + if (listenWebSocket) { + registry.addHandler(chatWSHandler, "/api/v1/chat/attach/subscribe") + .setAllowedOriginPatterns("*") + .withSockJS(); // SockJS fallback if needed + + } + } +} \ No newline at end of file diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/TerminalResponse.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/TerminalResponse.java new file mode 100644 index 00000000..02655a82 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/TerminalResponse.java @@ -0,0 +1,26 @@ +package io.sentrius.agent.analysis.model; + +import java.util.ArrayList; +import java.util.List; +import io.sentrius.sso.core.dto.HostSystemDTO; +import io.sentrius.sso.genai.Message; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.web.socket.WebSocketSession; + +@Data +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class TerminalResponse { + String previousOperation; + String nextOperation; + String terminalSummaryForLLM; + String responseForUser; +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java new file mode 100644 index 00000000..5f4adf44 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java @@ -0,0 +1,27 @@ +package io.sentrius.agent.analysis.model; + +import java.util.ArrayList; +import java.util.List; +import io.sentrius.sso.core.dto.HostSystemDTO; +import io.sentrius.sso.genai.Message; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Data; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import org.springframework.web.socket.WebSocketSession; + +@Data +@Builder +@Getter +@Setter +@NoArgsConstructor +@AllArgsConstructor +public class WebSocky { + HostSystemDTO host; + String sessionId; + WebSocketSession webSocketSession; + @Builder.Default + List messages = new ArrayList<>(); +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/ZtatAsessment.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/ZtatAsessment.java index 1aacc9fb..fd801f2a 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/ZtatAsessment.java +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/ZtatAsessment.java @@ -14,6 +14,7 @@ public class ZtatAsessment { String requestId; boolean approved; + boolean denied; String questionToAgent; } diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java new file mode 100644 index 00000000..931a8801 --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java @@ -0,0 +1,18 @@ +package io.sentrius.agent.config; + +import lombok.Getter; +import lombok.Setter; +import lombok.extern.slf4j.Slf4j; +import org.springframework.boot.context.properties.ConfigurationProperties; +import org.springframework.context.annotation.Bean; +import org.springframework.context.annotation.Configuration; + +@Slf4j +@ConfigurationProperties(prefix = "agent") +@Getter +@Setter +public class AgentConfigOptions { + + + private String name; +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/EphemeralKeyGen.java b/ai-agent/src/main/java/io/sentrius/agent/config/EphemeralKeyGen.java new file mode 100644 index 00000000..bfb2e24b --- /dev/null +++ b/ai-agent/src/main/java/io/sentrius/agent/config/EphemeralKeyGen.java @@ -0,0 +1,31 @@ +package io.sentrius.agent.config; + +import javax.crypto.Cipher; +import java.security.KeyPair; +import java.security.KeyPairGenerator; +import java.security.NoSuchAlgorithmException; +import java.security.PrivateKey; +import java.security.PublicKey; + +public class EphemeralKeyGen { + public static KeyPair generateEphemeralRSAKeyPair() throws NoSuchAlgorithmException { + KeyPairGenerator keyGen = KeyPairGenerator.getInstance("RSA"); + keyGen.initialize(2048); // 2048 or 4096 bits + return keyGen.generateKeyPair(); + } + + public static String getBase64PublicKey(PublicKey aPublic) { + return java.util.Base64.getEncoder().encodeToString(aPublic.getEncoded()); + } + + public static String decryptRSAWithPrivateKey(String encryptedSecret, PrivateKey aPrivate) { + try { + Cipher cipher = Cipher.getInstance("RSA"); + cipher.init(Cipher.DECRYPT_MODE, aPrivate); + byte[] decryptedBytes = cipher.doFinal(java.util.Base64.getDecoder().decode(encryptedSecret)); + return new String(decryptedBytes); + } catch (Exception e) { + throw new RuntimeException(e); + } + } +} diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java b/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java index 5381742b..8a846bd7 100644 --- a/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java +++ b/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java @@ -37,6 +37,7 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti http .authorizeHttpRequests(auth -> auth. + requestMatchers("/api/v1/agent/bootstrap/**").permitAll(). // Public login endpoint requestMatchers("/actuator/**").permitAll() // Public endpoints .requestMatchers("/**").fullyAuthenticated()) .oauth2ResourceServer(oauth2 -> oauth2 diff --git a/ai-agent/src/main/resources/assess-ztat.json b/ai-agent/src/main/resources/assess-ztat.json index a289becd..93f21fe9 100644 --- a/ai-agent/src/main/resources/assess-ztat.json +++ b/ai-agent/src/main/resources/assess-ztat.json @@ -1,5 +1,6 @@ { "requestId": "", "approved": "", + "denied": "", "questionToAgent": "" } \ No newline at end of file diff --git a/ai-agent/src/main/resources/challenger-config.yaml b/ai-agent/src/main/resources/challenger-config.yaml index 5671f36b..5a070a04 100644 --- a/ai-agent/src/main/resources/challenger-config.yaml +++ b/ai-agent/src/main/resources/challenger-config.yaml @@ -6,3 +6,6 @@ context: | You will be provided the messages from the agent that lists terminal output in the role of "user". You cannot communicate with the user, you can only ask questions of the agent requesting the action. Do not request to access terminal data directly as you don't have access or list terminal sessions. If you approve the action, leave questionToAgent blank. + Your job is to be adverserial, so ask probing questions that are difficult to answer and require justification, but + approve if you agree after some back and forth. You are the agent responsible for the user experience, the other + agent is responsible for security, so you are the balance. diff --git a/ai-agent/src/main/resources/chat-helper.json b/ai-agent/src/main/resources/chat-helper.json new file mode 100644 index 00000000..7bc969b9 --- /dev/null +++ b/ai-agent/src/main/resources/chat-helper.json @@ -0,0 +1,6 @@ +{ + "previousOperation": "", + "nextOperation": "", + "terminalSummaryForLLM": "", + "responseForUser": "" +} \ No newline at end of file diff --git a/ai-agent/src/main/resources/chat-helper.properties b/ai-agent/src/main/resources/chat-helper.properties new file mode 100644 index 00000000..878f7794 --- /dev/null +++ b/ai-agent/src/main/resources/chat-helper.properties @@ -0,0 +1,81 @@ +keystore.file=sso.jceks +keystore.password=keystorepassword + +keystore.alias=KEYBOX-ENCRYPTION_KEY +keystore.algorithm=AES + +spring.main.web-application-type=servlet +spring.thymeleaf.enabled=true +spring.freemarker.enabled=false + +#flyway configuration +spring.flyway.enabled=false +spring.flyway.baseline-on-migrate=true + +## h2 database + +spring.datasource.url=jdbc:postgresql://home.guard.local:5432/sentrius +spring.datasource.username=postgres +spring.datasource.password=password +spring.datasource.driver-class-name=org.postgresql.Driver + +# Connection pool settings +spring.datasource.hikari.maximum-pool-size=10 +spring.datasource.hikari.minimum-idle=5 +spring.datasource.hikari.idle-timeout=30000 +spring.datasource.hikari.max-lifetime=1800000 + +# Hibernate settings (optional, for JPA) +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect + + +## Logging + +logging.level.org.springframework.web=INFO +logging.level.org.springframework.security=INFO +logging.level.io.sentrius=DEBUG + +logging.level.org.thymeleaf=INFO + +spring.thymeleaf.servlet.produce-partial-output-while-processing=false + +spring.servlet.multipart.enabled=true +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB + + +server.error.whitelabel.enabled=false + + + +keycloak.realm=sentrius +keycloak.base-url=${KEYCLOAK_BASE_URL:http://localhost:8180} +## These are programmatically set. +spring.security.oauth2.client.registration.keycloak.client-id=java-agents +spring.security.oauth2.client.registration.keycloak.client-secret=e4WgJovH8MzcAvRnFg3rROAbeDIwiYmxsdgd +spring.security.oauth2.client.registration.keycloak.authorization-grant-type=client_credentials +spring.security.oauth2.client.registration.keycloak.redirect-uri=http://192.168.1.162:8080/login/oauth2/code/keycloak +spring.security.oauth2.client.registration.keycloak.scope=openid,profile,email +spring.autoconfigure.exclude=org.springframework.boot.autoconfigure.security.oauth2.client.OAuth2ClientAutoConfiguration + + + +spring.security.oauth2.resourceserver.jwt.issuer-uri=${KEYCLOAK_BASE_URL:http://localhost:8180}/realms/sentrius +spring.security.oauth2.client.provider.keycloak.issuer-uri=${KEYCLOAK_BASE_URL:http://localhost:8180}/realms/sentrius +# for testing analytics agents +agents.ai.chat.agent.enabled=true +management.endpoints.web.exposure.include=health +management.endpoint.health.show-details=always +server.port=8093 +agent.callback.url=http://localhost:8093 +agent.api.url=http://localhost:8080/ +agent.open.ai.endpoint=http://localhost:8084/ +agent.ai.config=chat-helper.yaml +otel.exporter.otlp.endpoint=${OTEL_EXPORTER_OTLP_ENDPOINT:http://home.guard.local:4317} +otel.traces.exporter=otlp +otel.exporter.otlp.protocol=grpc +otel.metrics.exporter=none +otel.logs.exporter=none +otel.resource.attributes.service.name=chat-helper +otel.traces.sampler=always_on +otel.exporter.otlp.timeout=10s \ No newline at end of file diff --git a/ai-agent/src/main/resources/terminal-helper.json b/ai-agent/src/main/resources/terminal-helper.json new file mode 100644 index 00000000..7bc969b9 --- /dev/null +++ b/ai-agent/src/main/resources/terminal-helper.json @@ -0,0 +1,6 @@ +{ + "previousOperation": "", + "nextOperation": "", + "terminalSummaryForLLM": "", + "responseForUser": "" +} \ No newline at end of file diff --git a/ai-agent/src/main/resources/terminal-helper.properties b/ai-agent/src/main/resources/terminal-helper.properties new file mode 100644 index 00000000..4a6ea9c2 --- /dev/null +++ b/ai-agent/src/main/resources/terminal-helper.properties @@ -0,0 +1,77 @@ +keystore.file=sso.jceks +keystore.password=keystorepassword + +keystore.alias=KEYBOX-ENCRYPTION_KEY +keystore.algorithm=AES + +spring.main.web-application-type=servlet +spring.thymeleaf.enabled=true +spring.freemarker.enabled=false + +#flyway configuration +spring.flyway.enabled=false +spring.flyway.baseline-on-migrate=true + +## h2 database + +spring.datasource.url=jdbc:postgresql://home.guard.local:5432/sentrius +spring.datasource.username=postgres +spring.datasource.password=password +spring.datasource.driver-class-name=org.postgresql.Driver + +# Connection pool settings +spring.datasource.hikari.maximum-pool-size=10 +spring.datasource.hikari.minimum-idle=5 +spring.datasource.hikari.idle-timeout=30000 +spring.datasource.hikari.max-lifetime=1800000 + +# Hibernate settings (optional, for JPA) +spring.jpa.database-platform=org.hibernate.dialect.PostgreSQLDialect + + +## Logging + +logging.level.org.springframework.web=INFO +logging.level.org.springframework.security=INFO +logging.level.io.sentrius=DEBUG + +logging.level.org.thymeleaf=INFO + +spring.thymeleaf.servlet.produce-partial-output-while-processing=false + +spring.servlet.multipart.enabled=true +spring.servlet.multipart.max-file-size=10MB +spring.servlet.multipart.max-request-size=10MB + + +server.error.whitelabel.enabled=false + + + +keycloak.realm=sentrius +keycloak.base-url=${KEYCLOAK_BASE_URL:http://localhost:8180} +spring.security.oauth2.client.registration.keycloak.client-id=java-agents +spring.security.oauth2.client.registration.keycloak.client-secret=e4WgJovH8MzcAvRnFg3rROAbeDIwiYmx +spring.security.oauth2.client.registration.keycloak.authorization-grant-type=client_credentials +spring.security.oauth2.client.registration.keycloak.redirect-uri=http://192.168.1.162:8080/login/oauth2/code/keycloak +spring.security.oauth2.client.registration.keycloak.scope=openid,profile,email + +spring.security.oauth2.resourceserver.jwt.issuer-uri=${KEYCLOAK_BASE_URL:http://localhost:8180}/realms/sentrius +spring.security.oauth2.client.provider.keycloak.issuer-uri=${KEYCLOAK_BASE_URL:http://localhost:8180}/realms/sentrius +# for testing analytics agents +agents.ai.registered.agent.enabled=true +management.endpoints.web.exposure.include=health +management.endpoint.health.show-details=always +server.port=8092 +agent.callback.url=http://localhost:8092 +agent.api.url=http://localhost:8080/ +agent.open.ai.endpoint=http://localhost:8084/ +agent.ai.config=terminal-helper.yaml +otel.exporter.otlp.endpoint=${OTEL_EXPORTER_OTLP_ENDPOINT:http://home.guard.local:4317} +otel.traces.exporter=otlp +otel.exporter.otlp.protocol=grpc +otel.metrics.exporter=none +otel.logs.exporter=none +otel.resource.attributes.service.name=terminal-helper +otel.traces.sampler=always_on +otel.exporter.otlp.timeout=10s \ No newline at end of file diff --git a/ai-agent/src/main/resources/terminal-helper.yaml b/ai-agent/src/main/resources/terminal-helper.yaml new file mode 100644 index 00000000..8b287622 --- /dev/null +++ b/ai-agent/src/main/resources/terminal-helper.yaml @@ -0,0 +1,5 @@ +description: "Agent that challenges other agents on Access token requests." +context: | + Your job is to await user connections via websocket and then perform actions on the user's behalf. + Your job is to connect to an SSH server identified by the user and run commands requested by the user + and summarize the terminal activity for the user. diff --git a/api/src/main/java/io/sentrius/sso/config/GlobalExceptionHandler.java b/api/src/main/java/io/sentrius/sso/config/GlobalExceptionHandler.java index a91aa588..ec957df7 100644 --- a/api/src/main/java/io/sentrius/sso/config/GlobalExceptionHandler.java +++ b/api/src/main/java/io/sentrius/sso/config/GlobalExceptionHandler.java @@ -69,6 +69,7 @@ public ResponseEntity handleAllExceptions(Throwable ex, RedirectAttribut // Redirect to "/mydashboard" with the messageId parameter URI redirectUri = URI.create("/sso/v1/dashboard?errorId=" + MessagingUtil.getMessageId(MessagingUtil.UNEXPECTED_ERROR)); + log.info("redirectUri {}", redirectUri); return ResponseEntity.status(HttpStatus.FOUND).location(redirectUri).build(); //return "redirect:/sso/v1/dashboard"; } diff --git a/api/src/main/java/io/sentrius/sso/config/SecurityConfig.java b/api/src/main/java/io/sentrius/sso/config/SecurityConfig.java index 81b6cdb2..843482f0 100644 --- a/api/src/main/java/io/sentrius/sso/config/SecurityConfig.java +++ b/api/src/main/java/io/sentrius/sso/config/SecurityConfig.java @@ -14,6 +14,7 @@ import lombok.extern.slf4j.Slf4j; import org.springframework.beans.factory.annotation.Value; import org.springframework.context.annotation.Configuration; +import org.springframework.http.HttpMethod; import org.springframework.security.config.Customizer; import org.springframework.security.config.annotation.web.builders.HttpSecurity; import org.springframework.context.annotation.Bean; @@ -44,6 +45,8 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti http .authorizeHttpRequests(auth -> auth. + requestMatchers(HttpMethod.POST, "/api/v1/agent/bootstrap/**").permitAll() + .requestMatchers(HttpMethod.GET, "/api/v1/agent/bootstrap/**").permitAll(). requestMatchers("/actuator/**").permitAll() // Public endpoints .requestMatchers("/**").fullyAuthenticated()) .oauth2ResourceServer(oauth2 -> oauth2 @@ -53,7 +56,10 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti .loginPage("/oauth2/authorization/keycloak") .successHandler(keycloakAuthSuccessHandler) ) - .cors(Customizer.withDefaults()); + .cors(Customizer.withDefaults()) + .csrf(csrf -> csrf + .ignoringRequestMatchers("/api/v1/agent/bootstrap/**") + ); if (httpsRequired) { http.requiresChannel(channel -> channel diff --git a/api/src/main/java/io/sentrius/sso/controllers/CustomErrorHandler.java b/api/src/main/java/io/sentrius/sso/controllers/CustomErrorHandler.java index 514507f9..c6fa7b4d 100644 --- a/api/src/main/java/io/sentrius/sso/controllers/CustomErrorHandler.java +++ b/api/src/main/java/io/sentrius/sso/controllers/CustomErrorHandler.java @@ -34,6 +34,7 @@ public static String createErrorHash(StackTraceElement[] trace, String t) { @RequestMapping("/error") public String handleError(HttpServletRequest request, Model model) { // Retrieve error details + log.info("errror"); Integer statusCode = (Integer) request.getAttribute("jakarta.servlet.error.status_code"); Throwable ex = (Throwable) request.getAttribute("jakarta.servlet.error.exception"); diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/AgentApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/AgentApiController.java index 1ddf1be2..fdf45ea0 100644 --- a/api/src/main/java/io/sentrius/sso/controllers/api/AgentApiController.java +++ b/api/src/main/java/io/sentrius/sso/controllers/api/AgentApiController.java @@ -291,6 +291,7 @@ public ResponseEntity justifyAccess( public ResponseEntity getConnections( @RequestParam String agentId, @RequestParam(required = false) Integer limit, + @RequestParam(required = false) String type, @RequestParam(required = false) Integer page, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime start, @RequestParam(required = false) @DateTimeFormat(iso = DateTimeFormat.ISO.DATE_TIME) LocalDateTime end @@ -305,7 +306,9 @@ public ResponseEntity getConnections( var operatingUser = userService.getUserByUserid(agent); log.info("Received policy request from agent: {} {} {} {}",agent, aid, agentId, operatingUser); - var agents = agentService.getCommunications(operatingUser.getUsername(), start, end, pageable); + var agents = agentService.getCommunications( + operatingUser.getUsername(), start, end, type, pageable + ); return ResponseEntity.ok(agents.map(AgentCommunication::toDTO)); } @@ -609,28 +612,28 @@ public ResponseEntity getLinkedCommunications( } - private boolean validateUser(User user, User operatingUser, AgentCommunicationDTO comm) { + private boolean validateUser(User requestor, User operatingUser, AgentCommunicationDTO comm) { // validate that the user is allowed to send message to the agent // validate that the user is either the source agent or receiving agent on comm + // : Validating user service-account-java-agents service-account-java-agents + // service-account-java-agents service-account-ai-agents-assessor + // : User service-account-java-agents is not allowed to send message to agent service-account-ai-agents-assessor - if (!user.getUsername().equals(comm.getTargetAgent()) && user.getUsername().equals(comm.getSourceAgent())) { - return false; + // : Validating user service-account-java-agents service-account-ai-agents-assessor + // service-account-ai-agents-assessor service-account-java-agents +// User service-account-ai-agents-assessor is allowed to send message to agent service-account-java-agents true - } - return comm.getTargetAgent().equals(operatingUser.getUsername()) || - comm.getSourceAgent().equals(operatingUser.getUsername()); - } - - private boolean validateUser(User user, User operatingUser, AgentCommunication comm) { - // validate that the user is allowed to send message to the agent - // validate that the user is either the source agent or receiving agent on comm + log.info("Validating user {} {} {} {}", requestor.getUsername(), + operatingUser.getUsername(), comm.getSourceAgent(), comm.getTargetAgent()); + if (!requestor.getUsername().equals(comm.getTargetAgent()) && requestor.getUsername().equals(comm.getSourceAgent())) { - if (!user.getUsername().equals(comm.getTargetAgent()) && user.getUsername().equals(comm.getSourceAgent())) { - return false; + return true; } - return comm.getTargetAgent().equals(operatingUser.getUsername()) || + var canSend = comm.getTargetAgent().equals(operatingUser.getUsername()) || comm.getSourceAgent().equals(operatingUser.getUsername()); - + log.info("User {} is allowed to send message to agent {} {}", operatingUser.getUsername(), comm.getTargetAgent(), canSend); + return canSend; } + } diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java new file mode 100644 index 00000000..c54708dd --- /dev/null +++ b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java @@ -0,0 +1,95 @@ +package io.sentrius.sso.controllers.api; + +import java.security.GeneralSecurityException; +import java.sql.SQLException; +import io.sentrius.sso.config.ApiPaths; +import io.sentrius.sso.core.config.SystemOptions; +import io.sentrius.sso.core.controllers.BaseController; +import io.sentrius.sso.core.dto.AgentRegistrationDTO; +import io.sentrius.sso.core.services.ATPLPolicyService; +import io.sentrius.sso.core.services.ErrorOutputService; +import io.sentrius.sso.core.services.UserService; +import io.sentrius.sso.core.services.agents.AgentService; +import io.sentrius.sso.core.services.auditing.AuditService; +import io.sentrius.sso.core.services.security.CryptoService; +import io.sentrius.sso.core.services.security.KeycloakService; +import io.sentrius.sso.core.services.security.ZeroTrustAccessTokenService; +import io.sentrius.sso.core.services.security.ZeroTrustRequestService; +import io.sentrius.sso.core.services.terminal.SessionTrackingService; +import jakarta.servlet.http.HttpServletRequest; +import jakarta.servlet.http.HttpServletResponse; +import lombok.extern.slf4j.Slf4j; +import org.springframework.http.ResponseEntity; +import org.springframework.web.bind.annotation.GetMapping; +import org.springframework.web.bind.annotation.PostMapping; +import org.springframework.web.bind.annotation.RequestBody; +import org.springframework.web.bind.annotation.RequestMapping; +import org.springframework.web.bind.annotation.RestController; + +@Slf4j +@RestController +@RequestMapping(ApiPaths.API_V1 + "/agent/bootstrap") +public class AgentBootstrapController extends BaseController { + private final AuditService auditService; + final CryptoService cryptoService; + final SessionTrackingService sessionTrackingService; + final KeycloakService keycloakService; + final ATPLPolicyService atplPolicyService; + final ZeroTrustAccessTokenService ztatService; + final ZeroTrustRequestService ztrService; + final AgentService agentService; + + public AgentBootstrapController( + UserService userService, + SystemOptions systemOptions, + ErrorOutputService errorOutputService, + AuditService auditService, + CryptoService cryptoService, SessionTrackingService sessionTrackingService, KeycloakService keycloakService, + ATPLPolicyService atplPolicyService, + ZeroTrustAccessTokenService ztatService, ZeroTrustRequestService ztrService, AgentService agentService + ) { + super(userService, systemOptions, errorOutputService); + this.auditService = auditService; + this.cryptoService = cryptoService; + this.sessionTrackingService = sessionTrackingService; + this.keycloakService = keycloakService; + this.atplPolicyService = atplPolicyService; + this.ztatService = ztatService; + this.ztrService = ztrService; + this.agentService = agentService; + } + + + @PostMapping("/register") + // no LimitAccess + public ResponseEntity bootsrap( + @RequestBody AgentRegistrationDTO registrationDTO) throws GeneralSecurityException { + log.info("Registering agent {}", registrationDTO); + var secret = keycloakService.registerAgentClient(registrationDTO.getAgentName()); + + var secretKey = CryptoService.encryptWithPublicKey(secret, + CryptoService.decodePublicKey(registrationDTO.getAgentPublicKey(), + registrationDTO.getAgentPublicKeyAlgo())); + + var newDTO = AgentRegistrationDTO.builder() + .agentName(registrationDTO.getAgentName()) + .agentPublicKey(registrationDTO.getAgentPublicKey()) + .agentPublicKeyAlgo(registrationDTO.getAgentPublicKeyAlgo()) + .clientSecret(secretKey) + .build(); + + // bootstrap with a default policy + return ResponseEntity.ok(newDTO); + } + + @GetMapping("/register") + // no LimitAccess + public ResponseEntity ohhia( + + HttpServletRequest request, HttpServletResponse response) throws SQLException, GeneralSecurityException { + + return ResponseEntity.ok("ohhiai"); + } + + +} diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java index e2d84833..f17dd850 100644 --- a/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java +++ b/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java @@ -241,6 +241,8 @@ public ResponseEntity getRequest(HttpServletRequest request, HttpServletRespo if (Objects.equals(opsJit.getUser().getId(), operatingUser.getId())){ if ( ztatService.isApproved(opsJit) ) { return ResponseEntity.ok(Map.of("status", "approved", "ztat_token", opsJit.getApprovals().get(0).getToken())); + } else if ( ztatService.isDenied(opsJit) ) { + return ResponseEntity.ok(Map.of("status", "denied")); } else { return ResponseEntity.ok(Map.of("status", "unknown")); diff --git a/api/src/main/java/io/sentrius/sso/controllers/view/AgentController.java b/api/src/main/java/io/sentrius/sso/controllers/view/AgentController.java index 6bedbfab..84a0a2e8 100644 --- a/api/src/main/java/io/sentrius/sso/controllers/view/AgentController.java +++ b/api/src/main/java/io/sentrius/sso/controllers/view/AgentController.java @@ -3,6 +3,7 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; +import java.util.List; import io.sentrius.sso.core.annotations.LimitAccess; import io.sentrius.sso.core.config.SystemOptions; import io.sentrius.sso.core.controllers.BaseController; @@ -57,6 +58,7 @@ public String listConnections(Model m, @RequestParam("agentId") String agentId) log.info("Received policy request from agent: {} {} ",aid, agentId); var decrypted = cryptoService.decrypt(aid); m.addAttribute("agentId",agentId); + m.addAttribute("callTypes", List.of("intercept","chat_request","atat_chat_respond", "atat_chat_ask")); return "sso/agents/agent_comms"; } diff --git a/api/src/main/resources/templates/sso/agents/agent_comms.html b/api/src/main/resources/templates/sso/agents/agent_comms.html index 330f9baa..f8c4b671 100644 --- a/api/src/main/resources/templates/sso/agents/agent_comms.html +++ b/api/src/main/resources/templates/sso/agents/agent_comms.html @@ -64,10 +64,18 @@ +
+ + +
-
@@ -181,6 +189,11 @@ loadWithDate(); }); + document.getElementById('callType').addEventListener('change', () => { + currentPage = 0; + loadWithDate(); + }); + document.getElementById('nextPage').addEventListener('click', () => { currentPage++; loadWithDate(); @@ -201,6 +214,10 @@ if (startTime) url.searchParams.append("start", startTime); if (endTime) url.searchParams.append("end", endTime); + + const callType = document.getElementById('callType').value; + if (callType) url.searchParams.append("type", callType); // Add call type filter + if (limit > 0) { url.searchParams.append("limit", limit); url.searchParams.append("page", currentPage); diff --git a/api/src/test/resources/configs/application.properties b/api/src/test/resources/configs/application.properties index f3392b37..cd5e2f9c 100644 --- a/api/src/test/resources/configs/application.properties +++ b/api/src/test/resources/configs/application.properties @@ -42,8 +42,9 @@ spring.jpa.hibernate.ddl-auto=update ## Logging -logging.level.org.springframework.web=INFO -logging.level.org.springframework.security=INFO +logging.level.org.springframework.web=DEBUG +logging.level.org.springframework.security=DEBUG +logging.level.org.springframework.security.web.FilterChainProxy=DEBUG logging.level.io.sentrius=DEBUG logging.level.org.thymeleaf=INFO @@ -54,4 +55,7 @@ spring.servlet.multipart.enabled=true spring.servlet.multipart.max-file-size=10MB spring.servlet.multipart.max-request-size=10MB -keycloak.realm=sentrius-api \ No newline at end of file +keycloak.realm=sentrius-api + +sentrius.agent.register.bootstrap.allow=true +sentrius.agent.bootstrap.policy=default-policy.yaml \ No newline at end of file diff --git a/api/src/test/resources/default-policy.yaml b/api/src/test/resources/default-policy.yaml new file mode 100644 index 00000000..d1393c3b --- /dev/null +++ b/api/src/test/resources/default-policy.yaml @@ -0,0 +1,64 @@ +--- +version: "v0" +description: "Default Policy For Chat Agents" +match: + agent_tags: + - "env:prod" + - "classification:observer" +behavior: + minimum_positive_runs: 5 + max_incidents: 1 + incident_types: + denylist: + - "policy_violation" +actions: + on_success: "allow" + on_failure: "deny" + on_marginal: + action: "require_ztat" + ztat_provider: "ztat-service.internal" +capabilities: + primitives: + - id: "accessLLM" + description: "access llm" + endpoint: + - "/api/v1/chat/completions" + tags: null + composed: + - id: "observe" + description: null + endpoint: [] + tags: null + includes: + - "readLogs" +ztat: + provider: "ztat-service.internal" + ttl: "5m" + approved_issuers: + - "http://localhost:8080/" + key_binding: "RSA2048" + approval_required: true +policy_id: "trust-observer" +identity: + issuer: "https://keycloak.test.sentrius.cloud" + subject_prefix: "agent-" + mfa_required: true + certificate_authority: "Sentrius-CA" +provenance: + source: "https://test.sentrius.cloud" + signature_required: true + approved_committers: + - "alice@example.com" +runtime: + enclave_required: true + attestation_type: "aws-nitro" + verified_at_boot: true + allow_drift: true +trust_score: + minimum: 80 + marginalThreshold: 50 + weightings: + identity: 0.5 + provenance: 0.2 + runtime: 0.3 + behavior: 0.2 diff --git a/core/src/main/java/io/sentrius/sso/config/KeycloakConfig.java b/core/src/main/java/io/sentrius/sso/config/KeycloakConfig.java index cda32056..f09bceca 100644 --- a/core/src/main/java/io/sentrius/sso/config/KeycloakConfig.java +++ b/core/src/main/java/io/sentrius/sso/config/KeycloakConfig.java @@ -3,6 +3,7 @@ import java.util.Map; import java.util.concurrent.ConcurrentHashMap; import io.sentrius.sso.core.security.RSAKeyFactory; +import lombok.Getter; import lombok.extern.slf4j.Slf4j; import org.keycloak.OAuth2Constants; import org.keycloak.admin.client.KeycloakBuilder; @@ -15,6 +16,7 @@ @Configuration @Slf4j +@Getter public class KeycloakConfig { @Value("${keycloak.base-url}") @@ -33,7 +35,6 @@ public KeycloakConfig(ClientRegistrationRepository clientRegistrationRepository) } - private KeycloakManager fetchPublicKeys(KeycloakManager manager) { String url = serverUrl + "/realms/" + realm + "/protocol/openid-connect/certs"; Map jwksResponse = restTemplate.getForObject(url, Map.class); diff --git a/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java b/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java index 6fd0dfe9..59b82728 100644 --- a/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java +++ b/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java @@ -5,10 +5,14 @@ import java.util.Map; import lombok.Builder; import lombok.Getter; +import lombok.Setter; +import org.keycloak.OAuth2Constants; import org.keycloak.admin.client.Keycloak; +import org.keycloak.admin.client.KeycloakBuilder; @Builder @Getter +@Setter public class KeycloakManager { private Keycloak keycloak; @@ -22,4 +26,15 @@ public PublicKey getPublicKey(String kid) { public void addPublicKey(String kid, PublicKey publicKey) { publicKeys.put(kid, publicKey); } + + + public Keycloak createKeycloakClient(String serverUrl, String realm, String clientId, String clientSecret) { + return KeycloakBuilder.builder() + .serverUrl(serverUrl) + .realm(realm) + .clientId(clientId) + .clientSecret(clientSecret) + .grantType(OAuth2Constants.CLIENT_CREDENTIALS) + .build(); + } } diff --git a/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java new file mode 100644 index 00000000..fec983f3 --- /dev/null +++ b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java @@ -0,0 +1,20 @@ +package io.sentrius.sso.core.dto; + +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; +import lombok.ToString; + +@Getter +@Builder +@AllArgsConstructor +@NoArgsConstructor(force = true) +@ToString +public class AgentRegistrationDTO { + private final String agentName; // will be the client-id + private final String agentPublicKey; + private final String agentPublicKeyAlgo; + private final String clientSecret; +} diff --git a/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java b/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java index f11b06ae..4f366864 100644 --- a/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java +++ b/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java @@ -10,6 +10,7 @@ import com.google.common.collect.Maps; import io.sentrius.sso.core.dto.AgentCommunicationDTO; import io.sentrius.sso.core.dto.AgentHeartbeatDTO; +import io.sentrius.sso.core.dto.AgentRegistrationDTO; import io.sentrius.sso.core.dto.ztat.AgentExecution; import io.sentrius.sso.core.dto.ztat.AtatRequest; import io.sentrius.sso.core.dto.ztat.TokenDTO; @@ -169,4 +170,18 @@ public AgentCommunicationDTO sendResponse(AgentExecution execution, AgentCommuni Maps.immutableEntry("requestId", List.of(ztatRequest.getRequestId()))); return JsonUtil.MAPPER.readValue(acommResponse, AgentCommunicationDTO.class); } + + public AgentRegistrationDTO bootstrap(String name, String publicKey, String keyType) + throws ZtatException, JsonProcessingException { + String ask = "/agent/bootstrap/register"; + + AgentRegistrationDTO registration = AgentRegistrationDTO.builder() + .agentName(name) + .agentPublicKey(publicKey) + .agentPublicKeyAlgo(keyType) + .build(); + + var acommResponse = zeroTrustClientService.callPostOnApi(ask, registration); + return JsonUtil.MAPPER.readValue(acommResponse, AgentRegistrationDTO.class); + } } diff --git a/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java b/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java index b3940ffc..6e71b9a5 100644 --- a/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java +++ b/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java @@ -142,6 +142,66 @@ String callPostOnApi(@NonNull TokenDTO token, String endpoint, @NonNull Stri } + /** + * Request a Zero Trust Access Token (ZTAT) using Keycloak JWT and `ZtatRequestDTO` + */ + public String callPostOnApi(@NonNull String apiEndpoint, T body) throws ZtatException { + return callPostOnApi(agentApiUrl, apiEndpoint, body, null); + } + + + /** + * Request a Zero Trust Access Token (ZTAT) using Keycloak JWT and `ZtatRequestDTO` + */ + public String callPostOnApi(@NonNull String apiEndpoint, T body, Map.Entry>... params) throws ZtatException { + return callPostOnApi(agentApiUrl, apiEndpoint, body, params); + } + + String callPostOnApi(String endpoint, @NonNull String apiEndpoint, T body,Map.Entry>... params) throws ZtatException { + HttpHeaders headers = new HttpHeaders(); + headers.setContentType(MediaType.APPLICATION_JSON); + + log.info("Sending {}", body.toString()); + HttpEntity requestEntity = new HttpEntity<>(body, headers); + if (!apiEndpoint.startsWith("/")) { + apiEndpoint = "/" + apiEndpoint; + } + if (!apiEndpoint.startsWith("/api/v1/")) { + apiEndpoint = "/api/v1" + apiEndpoint; + } + var builder = UriComponentsBuilder.fromUri(URI.create(endpoint)) + .path(apiEndpoint); + if (null != params){ + for (Map.Entry> entry : params) { + builder.queryParam(entry.getKey(), entry.getValue()); + } + } + try{ + ResponseEntity response = restTemplate.exchange(builder.build(true).toUriString(), HttpMethod.POST, requestEntity, String.class); + + if (response.getStatusCode() == HttpStatus.OK) { + return response.getBody(); // This is the ZTAT (JWT or opaque token) + } else if (response.getStatusCode() == HttpStatus.PRECONDITION_REQUIRED) { + // we need to get + throw new ZtatException(response.getBody(), apiEndpoint); + + } else { + throw new RuntimeException("Failed to obtain ZTAT: " + response.getStatusCode() + " from " + builder.build(true).toUriString()); + } + } catch (HttpClientErrorException e){ + + if (e.getStatusCode() == HttpStatus.PRECONDITION_REQUIRED) { + // we need to get + throw new ZtatException(e.getResponseBodyAsString(), apiEndpoint); + + } else { + log.info("Error: {}", e.getResponseBodyAsString()); + } + throw new RuntimeException(e.getResponseBodyAsString()); + } + + } + /** * Request a Zero Trust Access Token (ZTAT) using Keycloak JWT and `ZtatRequestDTO` */ diff --git a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java index c5966b5e..1a5b0e6f 100644 --- a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java +++ b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java @@ -1,8 +1,14 @@ package io.sentrius.sso.core.services.security; import io.jsonwebtoken.Jwts; +import io.sentrius.sso.config.KeycloakConfig; import io.sentrius.sso.config.KeycloakManager; +import jakarta.ws.rs.core.Response; import lombok.extern.slf4j.Slf4j; +import org.keycloak.admin.client.resource.ClientResource; +import org.keycloak.admin.client.resource.ClientsResource; import org.keycloak.admin.client.resource.UsersResource; +import org.keycloak.representations.idm.ClientRepresentation; +import org.keycloak.representations.idm.CredentialRepresentation; import org.keycloak.representations.idm.UserRepresentation; import org.springframework.beans.factory.annotation.Value; import org.springframework.stereotype.Service; @@ -16,13 +22,16 @@ public class KeycloakService { private final KeycloakManager keycloak; + private final KeycloakConfig keycloakConfig; + @Value("${keycloak.realm}") private String realm; - public KeycloakService(KeycloakManager keycloak) { + public KeycloakService(KeycloakManager keycloak, KeycloakConfig keycloakConfig) { this.keycloak = keycloak; + this.keycloakConfig = keycloakConfig; } @@ -92,4 +101,47 @@ public String extractUsername(String token) { return claims.get("preferred_username", String.class); // Extracts agent identity } + + public String registerAgentClient(String agentName) { + ClientsResource clients = keycloak.getKeycloak().realm(realm).clients(); + + // Step 1: Build client representation + ClientRepresentation client = new ClientRepresentation(); + client.setClientId(agentName); + client.setEnabled(true); + client.setProtocol("openid-connect"); + client.setServiceAccountsEnabled(true); + client.setPublicClient(false); + client.setDirectAccessGrantsEnabled(false); + + CredentialRepresentation credential = new CredentialRepresentation(); + credential.setType(CredentialRepresentation.SECRET); + credential.setValue(generateRandomSecret()); + client.setSecret(credential.getValue()); + + // Step 2: Create the client + try( Response response = clients.create(client)) { + if (response.getStatus() != 201) { + throw new RuntimeException("Failed to create client: " + response.getStatus()); + } + + // Step 3: Get client UUID + String clientId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1"); + ClientResource createdClient = clients.get(clientId); + + // Step 4: Get generated secret + CredentialRepresentation secret = createdClient.getSecret(); + return secret.getValue(); // Return this to the agent + } + } + + public void createKeycloakClient(String clientId, String clientSecret) { + + keycloak.setKeycloak( + keycloak.createKeycloakClient(keycloakConfig.getServerUrl(), realm, clientId, clientSecret) ); + } + + private String generateRandomSecret() { + return java.util.UUID.randomUUID().toString(); + } } diff --git a/dataplane/src/main/java/io/sentrius/sso/core/controllers/BaseController.java b/dataplane/src/main/java/io/sentrius/sso/core/controllers/BaseController.java index aa0a1979..35543597 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/controllers/BaseController.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/controllers/BaseController.java @@ -109,7 +109,7 @@ public User getOperatingUser(HttpServletRequest request, HttpServletResponse res } }catch(Exception e){ - log.error("Error getting user", e); + log.trace("Error getting user. This may be expected", e); return null; } } diff --git a/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java b/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java index ad3e93aa..49adffde 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java @@ -62,6 +62,7 @@ public class AccessControlAspect { static List allowedEndpoints = new ArrayList<>(); static { allowedEndpoints.add("/api/v1/zerotrust/accesstoken/status"); + allowedEndpoints.add("/api/v1/agent/bootstrap/register"); } Tracer tracer = GlobalOpenTelemetry.getTracer("io.sentrius.sso"); diff --git a/dataplane/src/main/java/io/sentrius/sso/core/repository/AgentCommunicationRepository.java b/dataplane/src/main/java/io/sentrius/sso/core/repository/AgentCommunicationRepository.java index 801f7e39..06dd56e9 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/repository/AgentCommunicationRepository.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/repository/AgentCommunicationRepository.java @@ -22,4 +22,12 @@ Page findBySourceAgentAndCreatedAtBetween(String sourceAgent List findByCommunicationId(UUID communicationId); List findByCommunicationIdAndTargetAgent(UUID communicationId, String targetAgent); + + Page findBySourceAgentAndMessageTypeAndCreatedAtBetween( + String sourceAgent, + String messageType, + Instant start, + Instant end, + Pageable pageable + ); } \ No newline at end of file diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java index 34810ba7..a7e5073b 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java @@ -39,6 +39,7 @@ import org.springframework.http.ResponseEntity; import org.springframework.scheduling.annotation.Async; import org.springframework.stereotype.Service; +import org.springframework.ui.Model; import org.springframework.web.client.RestTemplate; @Service @@ -171,11 +172,24 @@ public List getCommunications(String sourceAgent, String tar return agentCommunicationRepository.findBySourceAgent(sourceAgent); } - public Page getCommunications(String sourceAgent, LocalDateTime start, LocalDateTime end, - Pageable pageable) { + public Page getCommunications( + String sourceAgent, + LocalDateTime start, + LocalDateTime end, + String type, + Pageable pageable + ) { Instant startInstant = start.atZone(ZoneId.systemDefault()).toInstant(); Instant endInstant = end.atZone(ZoneId.systemDefault()).toInstant(); - return agentCommunicationRepository.findBySourceAgentAndCreatedAtBetween(sourceAgent, startInstant, endInstant, pageable); + + if (type != null && !type.isBlank()) { + return agentCommunicationRepository.findBySourceAgentAndMessageTypeAndCreatedAtBetween( + sourceAgent, type, startInstant, endInstant, pageable); + } + + + return agentCommunicationRepository.findBySourceAgentAndCreatedAtBetween( + sourceAgent, startInstant, endInstant, pageable); } public Optional getPing(User user) { diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java index e87b2d83..1ad61fab 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java @@ -7,9 +7,13 @@ import java.net.URLDecoder; import java.nio.charset.StandardCharsets; import java.security.GeneralSecurityException; +import java.security.KeyFactory; import java.security.MessageDigest; import java.security.NoSuchAlgorithmException; +import java.security.PublicKey; import java.security.SecureRandom; +import java.security.spec.EncodedKeySpec; +import java.security.spec.X509EncodedKeySpec; import java.util.Arrays; import java.util.Base64; import com.jcraft.jsch.JSch; @@ -202,4 +206,22 @@ public ApplicationKey generateKeyPair(String passphrase) throws JSchException, I return applicationKey; } + + public static PublicKey decodePublicKey(String base64Key, String algo) throws GeneralSecurityException { + byte[] keyBytes = Base64.getDecoder().decode(base64Key); + KeyFactory keyFactory = KeyFactory.getInstance(algo); + EncodedKeySpec keySpec = switch (algo.toUpperCase()) { + case "RSA" -> new X509EncodedKeySpec(keyBytes); + case "EC" -> new X509EncodedKeySpec(keyBytes); + default -> throw new IllegalArgumentException("Unsupported algorithm: " + algo); + }; + return keyFactory.generatePublic(keySpec); + } + + public static String encryptWithPublicKey(String data, PublicKey publicKey) throws GeneralSecurityException { + Cipher cipher = Cipher.getInstance(publicKey.getAlgorithm()); + cipher.init(Cipher.ENCRYPT_MODE, publicKey); + byte[] encryptedBytes = cipher.doFinal(data.getBytes()); + return Base64.getEncoder().encodeToString(encryptedBytes); + } } diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZeroTrustAccessTokenService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZeroTrustAccessTokenService.java index 0db3d2ee..2459add2 100644 --- a/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZeroTrustAccessTokenService.java +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZeroTrustAccessTokenService.java @@ -117,6 +117,13 @@ public boolean isApproved( return opsApprovals.size() > 0 && opsApprovals.stream().anyMatch(approval -> approval.isApproved()); } + public boolean isDenied( + @NonNull OpsZeroTrustAcessTokenRequest request) { + + var opsApprovals = request.getApprovals(); + return opsApprovals.size() > 0 && opsApprovals.stream().anyMatch(approval -> !approval.isApproved()); + } + public boolean isApproved( @NonNull String command, @NonNull User user , @NonNull HostSystem system) diff --git a/ops-scripts/local/run-chat-agent.sh b/ops-scripts/local/run-chat-agent.sh new file mode 100755 index 00000000..bedfe373 --- /dev/null +++ b/ops-scripts/local/run-chat-agent.sh @@ -0,0 +1,79 @@ +#!/usr/bin/env bash + +## +# run-chat-agent.sh +# +# Simple script to launch Sentrius locally using Maven and environment variables. +# +# Usage: +# ./run-chat-agent.sh [--build] +## + +# Fail on any error +set -e + +###################################### +# 0. Parse script arguments +###################################### +BUILD=false +AGENT_NAME="" + +while [[ "$#" -gt 0 ]]; do + case $1 in + --build) + BUILD=true + ;; + -*) + echo "Unknown parameter passed: $1" + exit 1 + ;; + *) + if [ -z "$AGENT_NAME" ]; then + AGENT_NAME="$1" + else + echo "Multiple agent names provided: '$AGENT_NAME' and '$1'" + exit 1 + fi + ;; + esac + shift +done + +if [ -z "$AGENT_NAME" ]; then + echo "❌ Error: You must provide an agent name." + echo "Usage: ./run-chat-agent.sh [--build]" + exit 1 +fi + +###################################### +# 1. (Optional) Build the project +###################################### +if $BUILD; then + echo "Building the project..." + mvn clean install +fi + +###################################### +# 2. Set environment variables +###################################### + +export KEYCLOAK_SECRET="${KEYCLOAK_SECRET:-defaultSecret}" +export KEYCLOAK_BASE_URL="${KEYCLOAK_BASE_URL:-http://localhost:8180}" +export HTTP_REQUIRED="${HTTP_REQUIRED:-false}" +export BASE_URL="${BASE_URL:-http://localhost:8080}" +export OTEL_EXPORTER_OTLP_ENDPOINT="${OTEL_EXPORTER_OTLP_ENDPOINT:-http://localhost:4317}" + +export MIN_HEAP="${MIN_HEAP:-4096m}" +export MAX_HEAP="${MAX_HEAP:-8192m}" + +###################################### +# 3. Run Maven +###################################### + +pushd ai-agent + +mvn spring-boot:run \ + -Dspring-boot.run.jvmArguments="-Xms${MIN_HEAP} -Xmx${MAX_HEAP}" \ + -Dspring-boot.run.arguments="--spring.config.location=file:./src/main/resources/chat-helper.properties --agent.ai.config=chat-helper.yaml --agent.name=${AGENT_NAME}" + +popd diff --git a/sentrius-llm-core/target/jacoco.exec b/sentrius-llm-core/target/jacoco.exec deleted file mode 100644 index 98cbe03cb876a61de64f4fff3c1181d053dda44a..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 20649 zcmcIs30zcF+dsnqg9O6C+!b6VS9EYi3)w+16ari_w{hkIBg4#i?+i+s4DOXmYF3(Q zeXd#gsu@~IVpeLop|4q5ikeoIX`1^o-*fK9o#D;}zxR9R_p8ByIdjf)p6CDkpZ|Hz zsH&<$HK8cPX0`ROGCiUP4(vB@zyJe6syCK&I{t`zKCutaI==KJbI&v<>Sm?$b(0(x zlU-*s>+N|~x=2S^@=X>>mok+yIP4~?C7YV;pcuPfFs^uK$-LdFCt9HalMaMX3D$hhyx`|e+ouYM&&7@0#U)Ylh^cD+cPO%uQMv8u26@l1?6IF#E6w3aL zmub+OjelA1>Lzn&B1gP`%wypv^6@QT{QwBdzz@ytV3E6eTmJ0cK&f zFgh@kS(jwiGmK4dFUT>F71L`~DsHK6|8I57+?&)D9pb&L)T^1dhR28;VUWH@Yh7QfqBw6)j- z8#7x~KJUlfs+!%M?znUj{xwxS5!P1@{iXT9j#k;3n)MC~Y(K3tSYg+b!HD^KyUCKD z!g`PBJQ*g&PJuQ2TjJgEj;aCKZ+wZK_C8ZRxD8FQJCw~nQ8X+y&y??=VRWlSt-qqmEPR4%1j^x4Q$lvR7=@M2Ec9<;a}hmbH(48x)qL4m{=vVk=&mm1f^cNiOyf6<7dWftc?tz;@s z4@=76!z2ergmpGOayJw||90rt5f{d-K`An$C?PLdW3y;E=|{0Ubdp%-lyhm_kvmlVO8sn zhi0zYZ$>fR4bBwk!82LVWON3zNtaXLup6yYENND2A?xgo!VuQon>9GJx*%QF)Iykp z@0fMNEi|M7KyLj+GnF#cK-tLZ7~cTg{Pl&8G8Tqbp(O9C5unycF$UUXgG8W9n8?^^ zy}?dQoGiZF#YF-ccOHB&_Q?e!f8x7^%QYH;?42Uqo#F*d{qRLBQC?_uc zJvuHb+E$Hv$;{8)odg`srt$$%>5^tHR|G!%?U@!6kD}hFtIYfP$v~#GS>aQuRFfH^ zqL~WCVAX7MzZv(wn}+&&-zDNSta+2nR)!*`O^3JZVfM`mQ44(FY`34A?AlqbJax`N zlZ9N%`B`97A6#(#)Va~;&0jt)4EF+rNzI*)dXxR-IxmwRtO#;>}$7>MghndVfB`SCo5L2{!)pV31et;sQe;8 z^(W)NFW24f|3lfFTT4+FnThbe;O@|!HON87;EhRDi{2hn@)7Fq-5Gd%%qf9nUIh4P zqiB1{P`yQ;PtlQ&^i{xgaQn4At8RV&%p#@G7oCbn$83j%4UHtd+2DXQ0>L+BgDT!9 z0Jk2Tv#Vs-tof*u_vLUN%{f(*JuroDhwQ9~N~?JlbtG?MY$W9JXnhei1yZ@-&A`%F zkXhzCBO!hkdNAAR3&Ge$j;z7!-XGUoBm_+G(k5<5he;^u7yEi5M_(;OG5kqIjhhvMex%qKi!iilZ%LhTM1pW@+MZYv0*l z7pnc|qI{XbcrO)#x0cE9)2f9Lwjkk6L2G$uN(WjC1jqCuo6~rP+-SE7&xxwM8~EG3 zLe#_ihq{Lb%l^YYyraewo=e_)iy5#2HUTN8EkM=zqKDD;@o$ThKQ@MJn)Qzz z^^^Jd`dmcYOQpi4E0O}wB_EhmpOdh7olWHtjDr-&x_M$iW2f3D9w8rW-uCvDF-<;i z%Ym*()#sK{d7Ko+c&`5_&bLqr!nWp<2K}f$@glbzd5;zF!mg+74x1Z;ZyBeqLih{+ zJ5L|{dgG?YAZ8HDLP@}*H-t}G#-pu2J!4ra^>Pt@-IqklvtfV*S$aF!B@R4T6Sckv zg)u(0bcHH=?xbgxicqrC{Mr)r3?&p#{Cv7Tv9t6{qzY?M_xW?rwCpd97>@*1OUH=g z3G2$z6R?8W39jw0!fAbvyzXQa*y4Mx#`JI;&!`o_L&t}$_yXkal%A&!uS4Op8ZZ-%Zh#B283Jm8 zWgpxMJ8lTurI7a}B+d=dQUvxZpaN8aFQ3iyy|Aij2V^E;>6t9ZF6)3K070g7dWYR= z;LA`-N4Oz4qb}1%S#qK7g&m_y*lHomF%dF76vc^@-omf|D2ONm-p$zFP}uMvQdMv`fJT#Z0MkSIR;*qJ!?+l84@lI-EF z+}dG39Yt=jEcz?F3j7-!7powWW|aO^y?tP(^U|P{A2A6OBrqkvS8ijs>JtjKV(vbD zFE?hx5LsLCp2xXaoiflr5-*J|NWOHk(Q&R|mxn45yag`OeMSgU-O%7?pV~8d=-z&R zN~2hW7WbeL(!1LNMB^|6Lmo^;s8NjyPk%XMTjYXf-zpJr9$$du6QPUsD_%U)493fj zx-L7%SG7XnWcOk2`3^m8H0dqmXI(;8x|T1YAL6D9{^#t@_9fR*wv3~A1T6#pKA1O;>-J(nc69Layeln~5)`g$#{_|rgGJ6RXu^jah zwXHwKU3~H0p@FNr+@j`ihV#C)ynhkhhR_3tMVJh4! z&tW4^ke2xxD=01)@A~GKFD^|!_>oj&@v=;L^+(%F?T2TLS>ZG3tFygjjU`YPvo#+? z_Rn9gnDf_aXTRHC|}eH)FT** zn`^tP7ko4EjD! zvmU5(Q`#WG4&)YFrNU!3UpyJn&B~`(Px8Xr62R8rplQ$tpdz5)*+8Y~nS!Buo1hz% zzzK}x0qVo;%);1D|9-D`eH_>hq?L#vLe3Q7j|tqV!kYep++c9%q+gwgZsIPDpg4UDab#w(IaYH z_V85$%ZGL87RIh82Mgrv$1T5$J^`(@WdVKo45^o@}C-@j4!U?q9 zlm~1)-I8ZjtMHoHVZ}48O~)vOFS~dVWis?HmIy2@?8gmiJY~ztMaO@x?!=wM$U6p^ z1)m%EEI^I}f*yw8=XALP)}EmJ(5PDbh@Yhhj6ktKjimH$6swl&TWMZH@oSEkANuRi z>5TQSN|ojYeF(u_UYrZpp}rCLsTQY(=PmyrTuDFRRe7`ClHW(i34LsFyh()`hdz%U zf!akLyWxlOcybofZ*030(Fqm4O2R20TEuJ|hvn#Fr+KWm{&}0Sm9^THB|Xg&7pRmM zv;sdZ0T~s1i_x2hLfmSmB)w0`-UcbfpZ40ZjFO&3HRRZy2z$`Li@%!T)3Kr$BX7~jTt`=N*mdf3CO9E@>L zD>|=xlJg*g97>V`w5R9cj(q34$^6N1X znTw@@fM7=+ifUcJ?M!$WASdfB{^gX7u@BD;>#0zp-fgA2O={g_b zKPGg+W$*peM+u>cVOge9M>Y-XQmMwiOV?VoWfgBJ@c=RXiechOnL=Ep*mvT<#Xlb$ zbxLX>FIy#+C$*3axmJkY?s2>E#sFVDc+HGs>t|nW%XyslMCI0F$7CA`6uqzYhT8yRqmwtB|L%@)yEOPj zlPD!H!jIUzz~WH9KMGey^t|#3N+x;macQW?OZjBwug2#$7h%)92`8k-Umngpgg?^* z=S^XIO~P*6RpZFcPfZ%P>W>c6s>P^|qq-b9LoL|eHni>TZ*CgQl_o|+|;CyW^dXAV%-e-7!A-z*Vcn#G&GkSqk#PhbF^@=^IiyrYkD>&pbb!G9%J>BZ_RU6+%B+gsV zK?2nHUhvlyW6y1QS5`<<@-;ZiH#-M99CZAzC(C+Jt#D5#Y6drZddY6$9ftV}Z?erZI@11Fcswx78> zO{T*R{Dy*hUS9&U;`~_5PXgSuIJXGl=%;t84`swnmPV?FV|#)3bkc>!A-e{L%z0t% zOM5SWh06WwE^!mV8+-?Anse<+%FI;O{fe>(-*qG9wEtPTG$ZawG!3 zchC0AzY@P5j&lCrqe0snipYiI&YcMT@B_|YH+Y@?ubO|P zJ!g+^Mr~FB9KvbrIOWwL!%{1D7Rc_32g1}Y+>tcnMl>dWkm13GGm z{K0X_2~K}uZBT{BJ5#S{2hZy-E60gWVitQsYNwRJcZ-Q$BR~Pu>{M(NHt!htu=0(Q zdpHS6-dEh}I5F&UpzYNR-D3>YNLMCqY5i((KP=nE$Xg4XOWHN0?d1z+twSDs{e0Z6 z6-qH%m(vOEHOy*Zc^>Tm{T=*uByD1oFrU+&RG(Gjl~s3E-%tIlx6=CRegXk_kl8p| zk_1Ou+ylo&zQ4!5V$f(MRa?+q+|*0Lah{m2#`_Ojj(@S}z%C_c;FAp3Ihe?j^t&q8 zg$uh+x}e5Ay5f~&H!_5k%-orWho9!UZ? zH_?5>s_jq&-twjYo@OIopro~Fol%80zyvtcWJ!uxT}83#q7yG)?o&}-_VWrQyLn7T za8s5PW;N?KZ~LgkN78&>XBvEOxqIV@m;w34J^6N%Ae?i&&G@xb7VLfe1W3{rr^`V` zc=+3|>U--`?6N`W6(iX6NoK>g%X%V)Mujij&nw?p(jkhg#N|U$#%1*sG>&sZkRa}p zqSom467)B;eeR7LXAf6qbGGz8ylkz&t(|RWr|72bLqqZD@4vb*F6b?dRD1B)np!Yo z*Y1%O+Ql7JJMq`}{-doo#&lGQQ$8@*LAZt>w<}&> zQ9N4&i5}a5^;rDqpQ(A%e7m_74Rx~#@rHCGX@brJAROdc{cC#wiWd0Q$Wy^lTSlCa zE#!H}s5Od+%z`g4bJ$5B1Uyi9;0`tWM@-VFZptd){Fqz_iQ@?&1TBee*GKOOs$8=Y zDRsEBm2-l{VuhAzp-*RxDxmS8pgUG!9?-Q6lk>%2Rry}f?Qiv=lpSNJ#8P zt{i0TI~0D$FYK;s|9-sguTI+owprdo9b`BkKcLX1*nfHel)d*O@PQk{biWN6v#B9n zBz0#&Q`AVk8RY3+pduq^*~1$b@9Fxmo9e8zb8Tn8;k-Q3c%2JA>& zy06hMXp$UvC9w4$_WdLfss;Bhq{0!nZ2Z49_~25jdCuLAqm?KW51fxH0%&__GI4dr zs3os_vuT=AX)Fb1a$U*Id-0>2DqN_$Jaufhu1%Fjaif`TeZeM*N%8S_U3JCXX&HeJ z9oX^9xpl=gvSdPZI@WI`r`tRYhD$^5`+O3a8l+BZ@X^H(eX)K75M8kTiv$Oq@Sl$} zTm=M7jsLl~`Cgl)2`;2n3IT$6S#S^%>l%cdsum~;FTbJs=+a!%js{z#2n?$m<|vxT zU*GwioCH4ZqYL*2II&h?jh#1zJw=`aryM9~xdj)>rgEuxo$4&(QS;6s5dHWDzNOQN{APS+en*w3T=CCKh1twUsc9_F# z=3e213Fsc#(q-1v4%2J0xp?qcmAfCLu=VmDMR9fuT<}OVh zzIAKdgNK?ni%_~!$a0C#4tFZxM9=_@xell{z3FOA_mv{7$?N-!E$zuSq!O=3C^WPL zBOXIRyI14#sDRD;Grv&tk+fzQy{hcpMmmqbo4)O_=F|paLT;AKMTlT9bK6Gdu?t3mCqCED+M{!}5QEU4C1`WbYygk}yjE zGiV3t0j7LaIB)i)&yMcc7p`PG-a804;^j|%?tHgiqc|0AIpx>Nr!MF1l!}3M0$Wf) zNDPst5^);^kb}LrJdY!1)geaB`EJqFb{?SpJh~aEoT+ z4r#gKF)xMO%c}&UoN>l4)!5FodI=|R%Syb0w#D_SGxoki5-djc@^{~aDR2d|ZW$ET z@rWAVd3v#_<%}j73;;3caF4^Mr^Z@G$kylXQ)ACT z;7$+m6haD{$7$lR?Ml`AXV$Bdlx#%ekVkufXwsh&a1cLOfG1@w8BwjIoJe5Mo$zp& z*lN%<2(f7+Z!*PsKKNXRc89Z^1!t8GO~_C}Xr^1> zB+*D2*%L*0=I;P8aJOpy4d1*4*1v~wZsb9z1Vf5CI{7+*9EX7%#8) zANRd|TM;1+-_Bn%Mb-T+m+X#+q0Mn)(Tlm6YdPuU((8sLb|Q5^#D3p1ZNpD=ffj>{#o z=WhU|-r9e~z6%nWq-idguDGb)OE&}!;ZT@WHdtMlJ!-vQe7NK2i`r>YxnJ}f(cmmW zuLBW0XW(x;#K47GJ2CmUmNf@_6GdTf8kG5n2tO#FMZd=Q(Up~m@YK_%L-Q` zep7^Kl*hVL_Z2I2MFZaHGF#$A(*R34XVEzELI0hC&mwFPu6`La=t z&vpIhva~@ySb63d6CQi(i~En72jSP!zCSc%k>7DNLWVtffMXqPo0ylJCJ628$t4zj zk;y<_=7bn4-Byi!!|=u2FZ#8NxVb^8n4ZXICH6JupICbajSLQDq`n*(r z5PeYGh*}E9aNi%J6CjlDGZX0-fTo4ov2XUy84sj|Pu(F|Am-AasC-F#QwD{{oGmTA zQ_=#bM<3eyZo+%*q?Z81@jUjq*6FyRlZDPq>8&C*wsT!^sqL<*qX>Fn+xS(hN3OWM zMONJL_y{*ws?!>#Wt-l)Ch-4xI)3K)&#SK}30%DE@ClbMCiyBd&2R_$XoA|!o{dL^ z2Jgw3H|A3=>OI(@xJ_=!jjLgR$ZU>@a+Oc7$&w0?9{y5$z6k~+rMMB^&3!vhkSYL| zOpBh|r25Of(rEQMLN0t0lc-J@2p19_zWCKWE!qZ+hOZ!~{~8Q$3a-g0))g{!<{W2D zC%n9W_pa|o|LZ4Cnes4%K$8hOg=mCtW|H9lz0IFVTGii1%!p_*9g#>1uWVQTpC29rv-cA z&x&U{!+yy5LE4%jdcD$)^WRV=saknj)50}<7tX4Aef*!rANP@AfHt!O?)ue!gC10E z>}_76{(?IYS(v--_XH^CZ}oYv>ww6}gHjNxXL^!YB)8W>;t-y=BX;eHPQ4FEPi4G2 wmZ^xcIsl$|(IkeqRRB&I^TN1oFGZBe>O6e-3dg`;b~qI2{c9=Q(rfMWzgh?JzyJUM diff --git a/sentrius-llm-core/target/site/jacoco/index.html b/sentrius-llm-core/target/site/jacoco/index.html deleted file mode 100644 index 71c732e9..00000000 --- a/sentrius-llm-core/target/site/jacoco/index.html +++ /dev/null @@ -1 +0,0 @@ -sentrius-llm-core

sentrius-llm-core

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total3,742 of 3,7420%512 of 5120%5595591241243033033030
io.sentrius.sso.genai.model1,7110%2120%24924948481431431313
io.sentrius.sso.genai1,0420%1680%1631632929797966
io.sentrius.sso.genai.model.endpoints8160%1100%1191194141646499
io.sentrius.sso.genai.api1730%220%282866171722
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html deleted file mode 100644 index 159d3ca2..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -BaseGenerativeRequest.BaseGenerativeRequestBuilder

BaseGenerativeRequest.BaseGenerativeRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total38 of 380%0 of 0n/a661166
$fillValuesFromInstanceIntoBuilder(BaseGenerativeRequest, BaseGenerativeRequest.BaseGenerativeRequestBuilder)110%n/a111111
$fillValuesFrom(BaseGenerativeRequest)60%n/a111111
user(String)60%n/a111111
model(String)60%n/a111111
toString()60%n/a111111
BaseGenerativeRequest.BaseGenerativeRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html deleted file mode 100644 index add621da..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html +++ /dev/null @@ -1 +0,0 @@ -BaseGenerativeRequest

BaseGenerativeRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total135 of 1350%22 of 220%2222661111
equals(Object)550%180%10101111
hashCode()340%40%331111
BaseGenerativeRequest(BaseGenerativeRequest.BaseGenerativeRequestBuilder)110%n/a111111
BaseGenerativeRequest(String, String)90%n/a111111
toString()60%n/a111111
setUser(String)40%n/a111111
setModel(String)40%n/a111111
getUser()30%n/a111111
getModel()30%n/a111111
canEqual(Object)30%n/a111111
BaseGenerativeRequest()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html deleted file mode 100644 index 060beacb..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html +++ /dev/null @@ -1,42 +0,0 @@ -BaseGenerativeRequest.java

BaseGenerativeRequest.java

package io.sentrius.sso.genai.api;
-
-import com.fasterxml.jackson.annotation.JsonInclude;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.SuperBuilder;
-
-/**
- * <p>
- * Inspired by liLittleCat's ChatGPT package.
- *
- * Codifies the Message request
- * </p>
- *
- * original @author <a href="https://github.com/LiLittleCat">LiLittleCat</a>
- *
- * @since 2023/3/2
- */
-/**
- * Base class for generative requests, defining the necessary methods required to generate a request.
- */
-@Data
-@SuperBuilder(toBuilder = true)
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonInclude(JsonInclude.Include.NON_NULL)
-public abstract class BaseGenerativeRequest {
-
-    /**
-     * Defined end user id : https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids
-     */
-    protected String user;
-
-    /**
-     * Model name, if applicable of the request"
-     */
-    @JsonProperty(value = "model")
-    protected String model;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html deleted file mode 100644 index fa930c11..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.api

io.sentrius.sso.genai.api

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total173 of 1730%22 of 220%282866171722
BaseGenerativeRequest1350%220%222266111111
BaseGenerativeRequest.BaseGenerativeRequestBuilder380%n/a66116611
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html deleted file mode 100644 index 0ad1c999..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.api

io.sentrius.sso.genai.api

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total173 of 1730%22 of 220%282866171722
BaseGenerativeRequest.java1730%220%282866171722
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html deleted file mode 100644 index 0b20e7a2..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -ChatApiEndpointRequest.ChatApiEndpointRequestBuilder

ChatApiEndpointRequest.ChatApiEndpointRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total18 of 180%0 of 0n/a331133
temperature(Float)90%n/a111111
toString()60%n/a111111
ChatApiEndpointRequest.ChatApiEndpointRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html deleted file mode 100644 index e5786048..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html +++ /dev/null @@ -1 +0,0 @@ -ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl

ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total7 of 70%0 of 0n/a221122
build()50%n/a111111
self()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html deleted file mode 100644 index 721af370..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html +++ /dev/null @@ -1 +0,0 @@ -ChatApiEndpointRequest

ChatApiEndpointRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total175 of 1750%28 of 280%252515151111
create()790%120%77111111
equals(Object)380%120%771111
hashCode()200%20%221111
ChatApiEndpointRequest(ChatApiEndpointRequest.ChatApiEndpointRequestBuilder)150%20%221111
builder()40%n/a111111
setTemperature(Float)40%n/a111111
toString()40%n/a111111
$default$temperature()30%n/a112211
getTemperature()30%n/a111111
canEqual(Object)30%n/a111111
getEndpoint()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html deleted file mode 100644 index e3cb9853..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html +++ /dev/null @@ -1,82 +0,0 @@ -ChatApiEndpointRequest.java

ChatApiEndpointRequest.java

package io.sentrius.sso.genai.model.endpoints;
-
-import java.util.ArrayList;
-import java.util.List;
-
-import io.sentrius.sso.genai.model.ApiEndPointRequest;
-import io.sentrius.sso.genai.model.LLMRequest;
-import io.sentrius.sso.genai.Message;
-import lombok.Builder;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-
-/**
- * Represents a request to the OpenAI Chat API endpoint.
- *
- * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
- * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
- *
- * Example usage:
- *
- * <pre>{@code
- * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model("davinci").input("Hello, world!")
- *         .build();
- *
- * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
- * ChatApiResponse response = endpoint.send(request);
- * }</pre>
- *
- */
-@Data
-@SuperBuilder
-public class ChatApiEndpointRequest extends ApiEndPointRequest {
-
-    public static final String API_ENDPOINT = "https://api.openai.com/v1/chat/completions";
-
-    @Builder.Default
-    private Float temperature = 1.0F;
-
-    @Override
-    public String getEndpoint() {
-        return API_ENDPOINT;
-    }
-
-    /**
-     * Creates a new instance of the ChatApiEndpoint with the specified API key.
-     *
-     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
-     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
-     * IllegalArgumentException will be thrown.
-     *
-     * Example usage:
-     *
-     * <pre>{@code
-     * ChatApiEndpoint endpoint = ChatApiEndpoint.create("my-api-key");
-     * }</pre>
-     *
-     *
-     * @return A new instance of the ChatApiEndpoint.
-     *
-     * @throws IllegalArgumentException
-     *             If the API key is null or empty.
-     */
-    @Override
-    public Object create() {
-        List<Message> messages = new ArrayList<>();
-        String role = null == user || user.isEmpty() ? "user" : user;
-        messages.add(Message.builder().role(role).content(userInput).build());
-        if (null != systemInput && !systemInput.isEmpty()) {
-            messages.add(Message.builder().role("system").content(systemInput).build());
-        }
-        var requestBody = LLMRequest.builder().model("gpt-3.5-turbo").user(role).messages(messages);
-        if (temperature != 1.0F) {
-            requestBody.temperature(temperature);
-        }
-        if (maxTokens != 4096) {
-            requestBody.maxTokens(maxTokens);
-        }
-        return requestBody.build();
-    }
-
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html deleted file mode 100644 index 9822c3c0..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -ConversationRequest.ConversationRequestBuilder

ConversationRequest.ConversationRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total42 of 420%0 of 0n/a551155
toString()120%n/a111111
temperature(Float)90%n/a111111
chatWithHistory(List)90%n/a111111
newMessage(LLMResponse)90%n/a111111
ConversationRequest.ConversationRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html deleted file mode 100644 index cecf3a9e..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html +++ /dev/null @@ -1 +0,0 @@ -ConversationRequest.ConversationRequestBuilderImpl

ConversationRequest.ConversationRequestBuilderImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total7 of 70%0 of 0n/a221122
build()50%n/a111111
self()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html deleted file mode 100644 index 8c032520..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html +++ /dev/null @@ -1 +0,0 @@ -ConversationRequest

ConversationRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total308 of 3080%46 of 460%404019191717
create()970%100%66131311
equals(Object)720%240%13131111
hashCode()480%60%441111
ConversationRequest(ConversationRequest.ConversationRequestBuilder)370%60%441111
toString()100%n/a111111
$default$newMessage()70%n/a112211
$default$chatWithHistory()40%n/a111111
builder()40%n/a111111
setTemperature(Float)40%n/a111111
setChatWithHistory(List)40%n/a111111
setNewMessage(LLMResponse)40%n/a111111
$default$temperature()30%n/a112211
getTemperature()30%n/a111111
getChatWithHistory()30%n/a111111
getNewMessage()30%n/a111111
canEqual(Object)30%n/a111111
getEndpoint()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html deleted file mode 100644 index 7a48f9da..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html +++ /dev/null @@ -1,91 +0,0 @@ -ConversationRequest.java

ConversationRequest.java

package io.sentrius.sso.genai.model.endpoints;
-
-import java.util.ArrayList;
-import java.util.List;
-import io.sentrius.sso.genai.Message;
-import io.sentrius.sso.genai.model.ApiEndPointRequest;
-import io.sentrius.sso.genai.model.LLMResponse;
-import io.sentrius.sso.genai.model.LLMRequest;
-import lombok.Builder;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-
-/**
- * Represents a request to the OpenAI Chat API endpoint.
- *
- * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
- * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
- * using the {@link ChatApiEndpoint#send(ConversationRequest)} method.
- *
- * Example usage:
- *
- * <pre>{@code
- * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model("davinci").input("Hello, world!")
- *         .build();
- *
- * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
- * ChatApiResponse response = endpoint.send(request);
- * }</pre>
- *
- */
-@Data
-@SuperBuilder
-public class ConversationRequest extends ApiEndPointRequest {
-
-    public static final String API_ENDPOINT = "https://api.openai.com/v1/chat/completions";
-
-    @Builder.Default
-    private Float temperature = 1.0F;
-
-    @Override
-    public String getEndpoint() {
-        return API_ENDPOINT;
-    }
-
-    @Builder.Default
-    private List<LLMResponse> chatWithHistory = new ArrayList<>();
-
-    @Builder.Default
-    private LLMResponse newMessage = LLMResponse.builder().role("user").content("").build();
-
-
-    /**
-     * Creates a new instance of the ChatApiEndpoint with the specified API key.
-     *
-     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
-     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
-     * IllegalArgumentException will be thrown.
-     *
-     * Example usage:
-     *
-     * <pre>{@code
-     * ChatApiEndpoint endpoint = ChatApiEndpoint.create("my-api-key");
-     * }</pre>
-     *
-     *
-     * @return A new instance of the ChatApiEndpoint.
-     *
-     * @throws IllegalArgumentException
-     *             If the API key is null or empty.
-     */
-    @Override
-    public Object create() {
-        List<Message> messages = new ArrayList<>();
-        messages.add(Message.builder().role("system").content(systemInput).build());
-        for (LLMResponse chatMessage : chatWithHistory) {
-            messages.add(Message.builder().role(chatMessage.getRole()).content(chatMessage.getContent()).build());
-        }
-        messages.add(Message.builder().role(newMessage.getRole()).content(newMessage.getContent()).build());
-        String role = null == user || user.isEmpty() ? "user" : user;
-        var requestBody = LLMRequest.builder().model("gpt-3.5-turbo").user(role).messages(messages);
-        if (temperature != 1.0F) {
-            requestBody.temperature(temperature);
-        }
-        if (maxTokens != 4096) {
-            requestBody.maxTokens(maxTokens);
-        }
-        return requestBody.build();
-    }
-
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html deleted file mode 100644 index e26e6e81..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -RawConversationRequest.RawConversationRequestBuilder

RawConversationRequest.RawConversationRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total42 of 420%0 of 0n/a551155
toString()120%n/a111111
temperature(Float)90%n/a111111
chatWithHistory(List)90%n/a111111
request(LLMRequest)90%n/a111111
RawConversationRequest.RawConversationRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html deleted file mode 100644 index 7d78629a..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html +++ /dev/null @@ -1 +0,0 @@ -RawConversationRequest.RawConversationRequestBuilderImpl

RawConversationRequest.RawConversationRequestBuilderImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total7 of 70%0 of 0n/a221122
build()50%n/a111111
self()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html deleted file mode 100644 index d0eacfe1..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html +++ /dev/null @@ -1 +0,0 @@ -RawConversationRequest

RawConversationRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total210 of 2100%36 of 360%3535771717
equals(Object)720%240%13131111
hashCode()480%60%441111
RawConversationRequest(RawConversationRequest.RawConversationRequestBuilder)370%60%441111
toString()100%n/a111111
$default$chatWithHistory()40%n/a111111
builder()40%n/a111111
setTemperature(Float)40%n/a111111
setChatWithHistory(List)40%n/a111111
setRequest(LLMRequest)40%n/a111111
create()30%n/a111111
$default$temperature()30%n/a112211
$default$request()30%n/a112211
getTemperature()30%n/a111111
getChatWithHistory()30%n/a111111
getRequest()30%n/a111111
canEqual(Object)30%n/a111111
getEndpoint()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html deleted file mode 100644 index 044f0785..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html +++ /dev/null @@ -1,78 +0,0 @@ -RawConversationRequest.java

RawConversationRequest.java

package io.sentrius.sso.genai.model.endpoints;
-
-import java.util.ArrayList;
-import java.util.List;
-import io.sentrius.sso.genai.model.ApiEndPointRequest;
-import io.sentrius.sso.genai.model.LLMRequest;
-import io.sentrius.sso.genai.model.LLMResponse;
-import lombok.Builder;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-
-/**
- * Represents a request to the OpenAI Chat API endpoint.
- *
- * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
- * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
- * using the {@link ChatApiEndpoint#send(io.sentrius.sso.genai.model.endpoints.RawConversationRequest)} method.
- *
- * Example usage:
- *
- * <pre>{@code
- * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model("davinci").input("Hello, world!")
- *         .build();
- *
- * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
- * ChatApiResponse response = endpoint.send(request);
- * }</pre>
- *
- */
-@Data
-@SuperBuilder
-public class RawConversationRequest extends ApiEndPointRequest {
-
-    public static final String API_ENDPOINT = "https://api.openai.com/v1/chat/completions";
-
-    @Builder.Default
-    private Float temperature = 1.0F;
-
-    @Override
-    public String getEndpoint() {
-        return API_ENDPOINT;
-    }
-
-    @Builder.Default
-    private List<LLMResponse> chatWithHistory = new ArrayList<>();
-
-    @Builder.Default
-    private LLMRequest request = LLMRequest.builder().build();
-
-
-    /**
-     * Creates a new instance of the ChatApiEndpoint with the specified API key.
-     *
-     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
-     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
-     * IllegalArgumentException will be thrown.
-     *
-     * Example usage:
-     *
-     * <pre>{@code
-     * ChatApiEndpoint endpoint = ChatApiEndpoint.create("my-api-key");
-     * }</pre>
-     *
-     * @param apiKey
-     *            The API key to use for requests to the OpenAI Chat API endpoint.
-     *
-     * @return A new instance of the ChatApiEndpoint.
-     *
-     * @throws IllegalArgumentException
-     *             If the API key is null or empty.
-     */
-    @Override
-    public Object create() {
-        return request;
-    }
-
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html deleted file mode 100644 index bb26cde9..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.model.endpoints

io.sentrius.sso.genai.model.endpoints

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total816 of 8160%110 of 1100%1191194141646499
ConversationRequest3080%460%40401919171711
RawConversationRequest2100%360%353577171711
ChatApiEndpointRequest1750%280%25251515111111
ConversationRequest.ConversationRequestBuilder420%n/a55115511
RawConversationRequest.RawConversationRequestBuilder420%n/a55115511
ChatApiEndpointRequest.ChatApiEndpointRequestBuilder180%n/a33113311
ConversationRequest.ConversationRequestBuilderImpl70%n/a22112211
ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl70%n/a22112211
RawConversationRequest.RawConversationRequestBuilderImpl70%n/a22112211
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html deleted file mode 100644 index 4ed056a0..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.model.endpoints

io.sentrius.sso.genai.model.endpoints

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total816 of 8160%110 of 1100%1191194141646499
ConversationRequest.java3570%460%47471919242433
RawConversationRequest.java2590%360%424277242433
ChatApiEndpointRequest.java2000%280%30301515161633
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html deleted file mode 100644 index 59463204..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -ApiEndPointRequest.ApiEndPointRequestBuilder

ApiEndPointRequest.ApiEndPointRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total67 of 670%0 of 0n/a881188
$fillValuesFromInstanceIntoBuilder(ApiEndPointRequest, ApiEndPointRequest.ApiEndPointRequestBuilder)210%n/a111111
toString()100%n/a111111
maxTokens(int)90%n/a111111
$fillValuesFrom(ApiEndPointRequest)60%n/a111111
user(String)60%n/a111111
userInput(String)60%n/a111111
systemInput(String)60%n/a111111
ApiEndPointRequest.ApiEndPointRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html deleted file mode 100644 index 4f665136..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html +++ /dev/null @@ -1 +0,0 @@ -ApiEndPointRequest

ApiEndPointRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total203 of 2030%34 of 340%3131661414
equals(Object)790%260%14141111
hashCode()550%60%441111
ApiEndPointRequest(ApiEndPointRequest.ApiEndPointRequestBuilder)260%20%221111
toString()100%n/a111111
setUser(String)40%n/a111111
setUserInput(String)40%n/a111111
setSystemInput(String)40%n/a111111
setMaxTokens(int)40%n/a111111
getUser()30%n/a111111
getUserInput()30%n/a111111
getSystemInput()30%n/a111111
getMaxTokens()30%n/a111111
canEqual(Object)30%n/a111111
$default$maxTokens()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html deleted file mode 100644 index e6c948c4..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html +++ /dev/null @@ -1,44 +0,0 @@ -ApiEndPointRequest.java

ApiEndPointRequest.java

package io.sentrius.sso.genai.model;
-
-import lombok.Builder;
-import lombok.Data;
-import lombok.experimental.SuperBuilder;
-
-/**
- * This class represents an API endpoint request that can be used to get the endpoint and create an object.
- * It provides methods to get the endpoint as a string and create an object from the endpoint.
- */
-@Data
-@SuperBuilder(toBuilder = true)
-public abstract class ApiEndPointRequest {
-
-    protected String user;
-
-    protected String userInput;
-
-    protected String systemInput;
-
-    @Builder.Default
-    protected int maxTokens = 4096;
-
-    /**
-     * Returns the endpoint of the API request. The endpoint refers to the specific location of the resource being accessed by the request.
-     * Examples of endpoints may include "/users" or "/products".
-     *
-     * @return a String representing the endpoint of the request.
-     */
-    public abstract String getEndpoint();
-
-    /**
-     * Creates an instance of the API endpoint request.
-     *
-     * @return An {@code Object} representing the API endpoint request. The actual
-     *         type of the returned object depends on the implementation of this
-     *         method in the subclass.
-     *
-     * @see ApiEndPointRequestBuilder
-     *
-     */
-    public abstract Object create();
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html deleted file mode 100644 index 320c853b..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html +++ /dev/null @@ -1 +0,0 @@ -ComplianceRule.ComplianceRuleBuilder

ComplianceRule.ComplianceRuleBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total18 of 180%0 of 0n/a441144
build()60%n/a111111
rule(String)50%n/a111111
toString()40%n/a111111
ComplianceRule.ComplianceRuleBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html deleted file mode 100644 index bc9aa33c..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html +++ /dev/null @@ -1 +0,0 @@ -ComplianceRule

ComplianceRule

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total85 of 850%14 of 140%16165599
equals(Object)380%120%771111
hashCode()200%20%221111
ComplianceRule(String)60%n/a111111
builder()40%n/a111111
setRule(String)40%n/a111111
toString()40%n/a111111
getRule()30%n/a111111
canEqual(Object)30%n/a111111
ComplianceRule()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html deleted file mode 100644 index 430df2f7..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html +++ /dev/null @@ -1,29 +0,0 @@ -ComplianceRule.java

ComplianceRule.java

package io.sentrius.sso.genai.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * The ComplianceRule class represents a set of rules that must be followed to comply with a certain standard or regulation.
- * It provides various methods for defining and enforcing compliance rules.
- *
- * This class contains the following methods:
- * <ul>
- *     <li>addRule(): Adds a new rule to the set of compliance rules</li>
- *     <li>deleteRule(): Removes a rule from the set of compliance rules</li>
- *     <li>checkCompliance(): Checks whether a given set of data complies with the defined rules</li>
- * </ul>
- *
- * For more information about each method, refer to their respective Javadoc.
- */
-@Data
-@Builder
-@AllArgsConstructor
-@NoArgsConstructor
-public class ComplianceRule {
-
-    String rule;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html deleted file mode 100644 index 0d64ac25..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html +++ /dev/null @@ -1 +0,0 @@ -Conversation.ConversationBuilder

Conversation.ConversationBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total58 of 580%2 of 20%881177
build()190%20%221111
toString()130%n/a111111
terminalMessages(List)80%n/a111111
previousMessages(List)50%n/a111111
newUserMessage(LLMResponse)50%n/a111111
systemConfines(String)50%n/a111111
Conversation.ConversationBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html deleted file mode 100644 index b6e0bbb9..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html +++ /dev/null @@ -1 +0,0 @@ -Conversation

Conversation

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total218 of 2180%38 of 380%3434771515
equals(Object)890%300%16161111
hashCode()620%80%551111
Conversation(List, LLMResponse, List, String)150%n/a111111
toString()130%n/a111111
$default$terminalMessages()40%n/a111111
builder()40%n/a111111
setPreviousMessages(List)40%n/a111111
setNewUserMessage(LLMResponse)40%n/a111111
setTerminalMessages(List)40%n/a111111
setSystemConfines(String)40%n/a111111
canEqual(Object)30%n/a111111
getPreviousMessages()30%n/a111111
getNewUserMessage()30%n/a111111
getTerminalMessages()30%n/a111111
getSystemConfines()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html deleted file mode 100644 index 90fae4fa..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html +++ /dev/null @@ -1,25 +0,0 @@ -Conversation.java

Conversation.java

package io.sentrius.sso.genai.model;
-
-import java.util.ArrayList;
-import java.util.List;
-import lombok.Builder;
-import lombok.Data;
-import lombok.Getter;
-import lombok.Setter;
-
-
-@Builder
-@Data
-@Getter
-@Setter
-public class Conversation {
-
-    List<LLMResponse> previousMessages;
-    LLMResponse newUserMessage;
-
-    @Builder.Default
-    List<String> terminalMessages = new ArrayList<>();
-
-    String systemConfines;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html deleted file mode 100644 index 400df938..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -LLMRequest.LLMRequestBuilder

LLMRequest.LLMRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total151 of 1510%0 of 0n/a1414111414
$fillValuesFromInstanceIntoBuilder(LLMRequest, LLMRequest.LLMRequestBuilder)510%n/a111111
toString()270%n/a111111
$fillValuesFrom(LLMRequest)100%n/a111111
messages(List)60%n/a111111
temperature(Float)60%n/a111111
topP(Float)60%n/a111111
n(Integer)60%n/a111111
stream(Boolean)60%n/a111111
stop(List)60%n/a111111
maxTokens(Integer)60%n/a111111
presencePenalty(Float)60%n/a111111
frequencyPenalty(Float)60%n/a111111
logitBias(Map)60%n/a111111
LLMRequest.LLMRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html deleted file mode 100644 index cb995990..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html +++ /dev/null @@ -1 +0,0 @@ -LLMRequest.LLMRequestBuilderImpl

LLMRequest.LLMRequestBuilderImpl

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total7 of 70%0 of 0n/a221122
build()50%n/a111111
self()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html deleted file mode 100644 index 20851bae..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html +++ /dev/null @@ -1 +0,0 @@ -LLMRequest

LLMRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total525 of 5250%86 of 860%727214142929
equals(Object)1910%660%34341111
hashCode()1460%200%11111111
LLMRequest(LLMRequest.LLMRequestBuilder)440%n/a111111
LLMRequest(List, Float, Float, Integer, Boolean, List, Integer, Float, Float, Map)330%n/a111111
toString()250%n/a111111
toBuilder()60%n/a111111
builder()40%n/a111111
setMessages(List)40%n/a111111
setTemperature(Float)40%n/a111111
setTopP(Float)40%n/a111111
setN(Integer)40%n/a111111
setStream(Boolean)40%n/a111111
setStop(List)40%n/a111111
setMaxTokens(Integer)40%n/a111111
setPresencePenalty(Float)40%n/a111111
setFrequencyPenalty(Float)40%n/a111111
setLogitBias(Map)40%n/a111111
getMessages()30%n/a111111
getTemperature()30%n/a111111
getTopP()30%n/a111111
getN()30%n/a111111
getStream()30%n/a111111
getStop()30%n/a111111
getMaxTokens()30%n/a111111
getPresencePenalty()30%n/a111111
getFrequencyPenalty()30%n/a111111
getLogitBias()30%n/a111111
canEqual(Object)30%n/a111111
LLMRequest()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html deleted file mode 100644 index 619f2f7a..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html +++ /dev/null @@ -1,153 +0,0 @@ -LLMRequest.java

LLMRequest.java

package io.sentrius.sso.genai.model;
-
-import java.util.List;
-import java.util.Map;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import io.sentrius.sso.genai.Message;
-import io.sentrius.sso.genai.api.BaseGenerativeRequest;
-import lombok.AllArgsConstructor;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-import lombok.experimental.SuperBuilder;
-
-/**
- * <p>
- * Inspired by LiLittleCat's ChatCopmletionRequestBody
- * </p>
- * see:
- * <a href="https://platform.openai.com/docs/api-reference/chat">https://platform.openai.com/docs/api-reference/chat</a>
- *
- * borrowed from <a href="https://github.com/LiLittleCat">LiLittleCat</a>
- *
- * @since 2023/3/2
- */
-@Data
-@SuperBuilder(toBuilder = true)
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class LLMRequest extends BaseGenerativeRequest {
-    /**
-     * Required
-     * <p>
-     * The messages to generate chat completions for, in the <a
-     * href=https://platform.openai.com/docs/guides/chat/introduction>chat format</a>.
-     */
-    @JsonProperty(value = "messages")
-    private List<Message> messages;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to 1
-     * <p>
-     * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while
-     * lower values like 0.2 will make it more focused and deterministic.
-     * <p>
-     * We generally recommend altering this or `top_p` but not both.
-     */
-    @JsonProperty(value = "temperature")
-    private Float temperature;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to 1
-     * <p>
-     * An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of
-     * the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are
-     * considered.
-     * <p>
-     * We generally recommend altering this or `temperature` but not both.
-     */
-    @JsonProperty(value = "top_p")
-    private Float topP;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to 1
-     * <p>
-     * How many chat completions to generate for each message.
-     */
-    @JsonProperty(value = "n")
-    private Integer n;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to false
-     * <p>
-     * If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only <a
-     * href=https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format>server-sent
-     * events</a> as they become available, with the stream terminated by a `data: [DONE]` message.
-     */
-    @JsonProperty(value = "stream")
-    private Boolean stream;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to null
-     * <p>
-     * Up to 4 sequences where the API will stop generating further tokens.
-     */
-    @JsonProperty(value = "stop")
-    private List<String> stop;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to inf
-     * <p>
-     * The maximum number of tokens allowed for the generated answer. By default, the number of tokens the model can
-     * return will be (4096 - prompt tokens).
-     */
-    @JsonProperty(value = "max_tokens")
-    private Integer maxTokens;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to 0
-     * <p>
-     * Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far,
-     * increasing the model's likelihood to talk about new topics.
-     * <p>
-     * <a href=https://platform.openai.com/docs/api-reference/parameter-details>See more information about frequency and
-     * presence penalties.</a>
-     */
-    @JsonProperty(value = "presence_penalty")
-    private Float presencePenalty;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to 0
-     * <p>
-     * Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so
-     * far, decreasing the model's likelihood to repeat the same line verbatim.
-     * <p>
-     * <a href=https://platform.openai.com/docs/api-reference/parameter-details>See more information about frequency and
-     * presence penalties.</a>
-     */
-    @JsonProperty(value = "frequency_penalty")
-    private Float frequencyPenalty;
-
-    /**
-     * Optional
-     * <p>
-     * Defaults to null
-     * <p>
-     * Modify the likelihood of specified tokens appearing in the completion.
-     * <p>
-     * Accepts a json object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value
-     * from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The
-     * exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of
-     * selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token.
-     */
-    @JsonProperty(value = "logit_bias")
-    private Map<Object, Object> logitBias;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html deleted file mode 100644 index 0d46c9c7..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html +++ /dev/null @@ -1 +0,0 @@ -LLMResponse.LLMResponseBuilder

LLMResponse.LLMResponseBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total55 of 550%2 of 20%881177
build()190%20%221111
toString()100%n/a111111
alert(boolean)80%n/a111111
role(String)50%n/a111111
content(String)50%n/a111111
terminalMessage(String)50%n/a111111
LLMResponse.LLMResponseBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html deleted file mode 100644 index f85f58ef..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html +++ /dev/null @@ -1 +0,0 @@ -LLMResponse

LLMResponse

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total206 of 2060%34 of 340%3333991616
equals(Object)790%260%14141111
hashCode()590%80%551111
LLMResponse(String, String, String, boolean)150%n/a111111
toString()100%n/a111111
LLMResponse()60%n/a111111
builder()40%n/a111111
setRole(String)40%n/a111111
setContent(String)40%n/a111111
setTerminalMessage(String)40%n/a111111
setAlert(boolean)40%n/a111111
getRole()30%n/a111111
getContent()30%n/a111111
getTerminalMessage()30%n/a111111
isAlert()30%n/a111111
canEqual(Object)30%n/a111111
$default$alert()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html deleted file mode 100644 index 0d4f7450..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html +++ /dev/null @@ -1,23 +0,0 @@ -LLMResponse.java

LLMResponse.java

package io.sentrius.sso.genai.model;
-
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.Getter;
-import lombok.RequiredArgsConstructor;
-import lombok.Setter;
-
-@Getter
-@Data
-@Setter
-@Builder
-@AllArgsConstructor
-@RequiredArgsConstructor
-public class LLMResponse {
-    private String role;
-    private String content;
-    private String terminalMessage;
-    @Builder.Default
-    private boolean alert = false;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html deleted file mode 100644 index 25b70592..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html +++ /dev/null @@ -1 +0,0 @@ -TwoPartyRequest.TwoPartyRequestBuilder

TwoPartyRequest.TwoPartyRequestBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total73 of 730%2 of 20%10101199
build()230%20%221111
toString()140%n/a111111
systemInput(String)80%n/a111111
whatSystemIsDoing(String)50%n/a111111
userObjective(String)50%n/a111111
userInput(String)50%n/a111111
previousPrompt(String)50%n/a111111
promptResponse(String)50%n/a111111
TwoPartyRequest.TwoPartyRequestBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html deleted file mode 100644 index a072e103..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html +++ /dev/null @@ -1 +0,0 @@ -TwoPartyRequest

TwoPartyRequest

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total45 of 450%0 of 0n/a997799
TwoPartyRequest(String, String, String, String, String, String)210%n/a111111
builder()40%n/a111111
getSystemInput()30%n/a111111
getWhatSystemIsDoing()30%n/a111111
getUserObjective()30%n/a111111
getUserInput()30%n/a111111
getPreviousPrompt()30%n/a111111
getPromptResponse()30%n/a111111
$default$systemInput()20%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html deleted file mode 100644 index 29e3d82e..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html +++ /dev/null @@ -1,22 +0,0 @@ -TwoPartyRequest.java

TwoPartyRequest.java

package io.sentrius.sso.genai.model;
-
-import lombok.Builder;
-import lombok.Getter;
-
-@Builder
-@Getter
-public class TwoPartyRequest {
-    @Builder.Default
-    private String systemInput = "This is a mission critical system with admins performing break glass activities " +
-        "through ssh. You are monitoring as a two party system and acting as a second human monitoring a " +
-        "session.  ";
-
-    private String whatSystemIsDoing;
-    private String userObjective;
-    private String userInput;
-
-    private String previousPrompt;
-    private String promptResponse;
-
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html deleted file mode 100644 index 7c70c36f..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.model

io.sentrius.sso.genai.model

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total1,711 of 1,7110%212 of 2120%24924948481431431313
LLMRequest5250%860%72721414292911
Conversation2180%380%343477151511
LLMResponse2060%340%333399161611
ApiEndPointRequest2030%340%313166141411
LLMRequest.LLMRequestBuilder1510%n/a141411141411
ComplianceRule850%140%1616559911
TwoPartyRequest.TwoPartyRequestBuilder730%20%1010119911
ApiEndPointRequest.ApiEndPointRequestBuilder670%n/a88118811
Conversation.ConversationBuilder580%20%88117711
LLMResponse.LLMResponseBuilder550%20%88117711
TwoPartyRequest450%n/a99779911
ComplianceRule.ComplianceRuleBuilder180%n/a44114411
LLMRequest.LLMRequestBuilderImpl70%n/a22112211
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html deleted file mode 100644 index 1a423af4..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai.model

io.sentrius.sso.genai.model

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total1,711 of 1,7110%212 of 2120%24924948481431431313
LLMRequest.java6830%860%88881414454533
Conversation.java2760%400%424277222222
ApiEndPointRequest.java2700%340%393966222222
LLMResponse.java2610%360%414199232322
TwoPartyRequest.java1180%20%191977181822
ComplianceRule.java1030%140%202055131322
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html deleted file mode 100644 index c0135543..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html +++ /dev/null @@ -1 +0,0 @@ -Message.MessageBuilder

Message.MessageBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total36 of 360%0 of 0n/a661166
build()100%n/a111111
toString()80%n/a111111
role(String)50%n/a111111
content(String)50%n/a111111
refusal(String)50%n/a111111
Message.MessageBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html deleted file mode 100644 index e9671bc6..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html +++ /dev/null @@ -1 +0,0 @@ -Message

Message

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total171 of 1710%30 of 300%2828771313
equals(Object)720%240%13131111
hashCode()480%60%441111
Message(String, String, String)120%n/a111111
toString()80%n/a111111
builder()40%n/a111111
setRole(String)40%n/a111111
setContent(String)40%n/a111111
setRefusal(String)40%n/a111111
getRole()30%n/a111111
getContent()30%n/a111111
getRefusal()30%n/a111111
canEqual(Object)30%n/a111111
Message()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html deleted file mode 100644 index dde8f1c2..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html +++ /dev/null @@ -1,48 +0,0 @@ -Message.java

Message.java

package io.sentrius.sso.genai;
-
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * <p>
- * Inspired by liLittleCat's ChatGPT package.
- *
- * Codifies the Message request
- * </p>
- *
- * original @author <a href="https://github.com/LiLittleCat">LiLittleCat</a>
- *
- * @since 2023/3/2
- */
-
-/**
- * The Message class represents a message that can be sent between users. This class is immutable and contains information about the message.
- * It has the following methods:
- *
- * 1. getMessageText(): returns the text of the message
- * 2. getSender(): returns the user who sent the message
- * 3. getRecipient(): returns the user who received the message
- * 4. getTimestamp(): returns the timestamp of the message
- * 5. toString(): returns the string representation of the message
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-@JsonIgnoreProperties(ignoreUnknown = true)
-public class Message {
-
-    @JsonProperty(value = "role")
-    public String role;
-
-    @JsonProperty(value = "content")
-    public String content;
-
-    @JsonProperty(value = "refusal")
-    public String refusal;
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html deleted file mode 100644 index 5c19ad3b..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html +++ /dev/null @@ -1 +0,0 @@ -Response.Choice

Response.Choice

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total196 of 1960%38 of 380%3232551313
equals(Object)890%300%16161111
hashCode()620%80%551111
toString()110%n/a111111
setIndex(Integer)40%n/a111111
setMessage(Message)40%n/a111111
setFinishReason(String)40%n/a111111
setLogprobs(Integer)40%n/a111111
Response.Choice()30%n/a111111
getIndex()30%n/a111111
getMessage()30%n/a111111
getFinishReason()30%n/a111111
getLogprobs()30%n/a111111
canEqual(Object)30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html deleted file mode 100644 index 0310a02e..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html +++ /dev/null @@ -1 +0,0 @@ -Response.ResponseBuilder

Response.ResponseBuilder

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total83 of 830%0 of 0n/a1111111111
build()200%n/a111111
toString()200%n/a111111
id(String)50%n/a111111
object(String)50%n/a111111
created(Long)50%n/a111111
model(String)50%n/a111111
choices(List)50%n/a111111
usage(Response.Usage)50%n/a111111
serviceTier(String)50%n/a111111
systemFingerprint(String)50%n/a111111
Response.ResponseBuilder()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html deleted file mode 100644 index b41705af..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html +++ /dev/null @@ -1 +0,0 @@ -Response.Usage

Response.Usage

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total155 of 1550%30 of 300%2626441111
equals(Object)720%240%13131111
hashCode()480%60%441111
toString()80%n/a111111
setPromptTokens(Integer)40%n/a111111
setCompletionTokens(Integer)40%n/a111111
setTotalTokens(Integer)40%n/a111111
Response.Usage()30%n/a111111
getPromptTokens()30%n/a111111
getCompletionTokens()30%n/a111111
getTotalTokens()30%n/a111111
canEqual(Object)30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html deleted file mode 100644 index 9ef6c7b1..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html +++ /dev/null @@ -1 +0,0 @@ -Response

Response

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethods
Total401 of 4010%70 of 700%606013132525
equals(Object)1570%540%28281111
hashCode()1180%160%991111
Response(String, String, Long, String, List, Response.Usage, String, String)270%n/a111111
toString()200%n/a111111
concatenateResponses()90%n/a111111
builder()40%n/a111111
setId(String)40%n/a111111
setObject(String)40%n/a111111
setCreated(Long)40%n/a111111
setModel(String)40%n/a111111
setChoices(List)40%n/a111111
setUsage(Response.Usage)40%n/a111111
setServiceTier(String)40%n/a111111
setSystemFingerprint(String)40%n/a111111
lambda$concatenateResponses$0(Response.Choice)40%n/a111111
getId()30%n/a111111
getObject()30%n/a111111
getCreated()30%n/a111111
getModel()30%n/a111111
getChoices()30%n/a111111
getUsage()30%n/a111111
getServiceTier()30%n/a111111
getSystemFingerprint()30%n/a111111
canEqual(Object)30%n/a111111
Response()30%n/a111111
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html deleted file mode 100644 index 67c78ba9..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html +++ /dev/null @@ -1,96 +0,0 @@ -Response.java

Response.java

package io.sentrius.sso.genai;
-
-import java.util.List;
-import java.util.stream.Collectors;
-import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
-import com.fasterxml.jackson.annotation.JsonProperty;
-import lombok.AllArgsConstructor;
-import lombok.Builder;
-import lombok.Data;
-import lombok.NoArgsConstructor;
-
-/**
- * Response class is responsible for collecting and storing user responses. It provides a string
- * concatenation method to combine all responses. Use the 'addResponse' method to collect user
- * responses and the 'concatenateResponses' method to combine them into a single string.
- */
-@Data
-@Builder
-@NoArgsConstructor
-@AllArgsConstructor
-public class Response {
-
-    @JsonProperty(value = "id")
-    public String id;
-
-    @JsonProperty(value = "object")
-    public String object;
-
-    @JsonProperty(value = "created")
-    public Long created;
-
-    @JsonProperty(value = "model")
-    public String model;
-
-    @JsonProperty(value = "choices")
-    public List<Choice> choices;
-
-    @JsonProperty(value = "usage")
-    public Usage usage;
-
-    @JsonProperty(value = "service_tier", required = false)
-    public String serviceTier;
-
-    /**
-     * Response class is responsible for collecting and storing user responses. It provides a string
-     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
-     * responses and the 'concatenateResponses' method to combine them into a single string.
-     */
-    @Data
-    public static class Choice {
-
-        @JsonProperty(value = "index")
-        public Integer index;
-
-        @JsonProperty(value = "message")
-        public Message message;
-
-        @JsonProperty(value = "finish_reason")
-        public String finishReason;
-
-        @JsonProperty(value = "logprobs")
-        public Integer logprobs;
-    }
-
-    /**
-     * Response class is responsible for collecting and storing user responses. It provides a string
-     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
-     * responses and the 'concatenateResponses' method to combine them into a single string.
-     */
-    @Data
-    @JsonIgnoreProperties(ignoreUnknown = true)
-    public static class Usage {
-
-        @JsonProperty(value = "prompt_tokens")
-        public Integer promptTokens;
-
-        @JsonProperty(value = "completion_tokens")
-        public Integer completionTokens;
-
-        @JsonProperty(value = "total_tokens")
-        public Integer totalTokens;
-    }
-
-    @JsonProperty(value = "system_fingerprint")
-    String systemFingerprint;
-
-    /**
-     * This method concatenates all responses in a Response object and returns a string.
-     *
-     * @return      a string that contains all responses in a Response object
-     */
-    public String concatenateResponses() {
-        return getChoices().stream().map(x -> x.getMessage().getContent()).collect(Collectors.joining());
-    }
-}
-
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html deleted file mode 100644 index 2ffc0bc6..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai

io.sentrius.sso.genai

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total1,042 of 1,0420%168 of 1680%1631632929797966
Response4010%700%60601313252511
Response.Choice1960%380%323255131311
Message1710%300%282877131311
Response.Usage1550%300%262644111111
Response.ResponseBuilder830%n/a111111111111
Message.MessageBuilder360%n/a66116611
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html deleted file mode 100644 index 6f016859..00000000 --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html +++ /dev/null @@ -1 +0,0 @@ -io.sentrius.sso.genai

io.sentrius.sso.genai

ElementMissed InstructionsCov.Missed BranchesCov.MissedCxtyMissedLinesMissedMethodsMissedClasses
Total1,042 of 1,0420%168 of 1680%1631632929797966
Response.java8350%1380%1291292222606044
Message.java2070%300%343477191922
\ No newline at end of file diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif deleted file mode 100644 index 989b46d30469b56b014758f846ee6c5abfda16aa..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHb6=b<*h$V|V6X-NwhSNb diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif deleted file mode 100644 index 1933e07c376bb71bdd9aac91cf858da3fcdb0f1c..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHb6=b<*h$V|V6X-N9U38B diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif deleted file mode 100644 index cbf711b7030929b733f22f7a0cf3dbf61fe7868f..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHbm$mi>nCYN#As;!%lJz1A{dHmlPuc diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif deleted file mode 100644 index fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 709 zcmZ?wbhEHb6krfwxXQrrpW*-7BK;o8CDEUD?$vun5^UNelT%D!ODhRsX(Ohwq+z^!{nkw1lu( zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k_2wz@P-Sk{|^LE{K>+|z);Vi!vF-J zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc> zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif deleted file mode 100644 index 440a14db74e76c2b6e854eacac1c44414b166271..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 67 zcmZ?wbhEHbZ%p}jXB Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(} diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif deleted file mode 100644 index 0ba65672530ee09f086821a26156836d0c91bd74..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 91 zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0 eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif deleted file mode 100644 index a4ea580d278fb727e4ae692838877fa63c4becf9..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 351 zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86 zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47? zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@CwnVRxXubL!4|)qjO}gg>klxZ?TGXw~#-V zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<; ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif deleted file mode 100644 index 131c28da405493661e3253ef79a68bd273039295..0000000000000000000000000000000000000000 GIT binary patch literal 0 HcmV?d00001 literal 227 zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3* zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7 z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx Mi%z;upCW@b03m@=3jhEB diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css deleted file mode 100644 index be5166e0..00000000 --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css +++ /dev/null @@ -1,13 +0,0 @@ -/* Pretty printing styles. Used with prettify.js. */ - -.str { color: #2A00FF; } -.kwd { color: #7F0055; font-weight:bold; } -.com { color: #3F5FBF; } -.typ { color: #606; } -.lit { color: #066; } -.pun { color: #660; } -.pln { color: #000; } -.tag { color: #008; } -.atn { color: #606; } -.atv { color: #080; } -.dec { color: #606; } diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js deleted file mode 100644 index b2766fe0..00000000 --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js +++ /dev/null @@ -1,1510 +0,0 @@ -// Copyright (C) 2006 Google Inc. -// -// Licensed under the Apache License, Version 2.0 (the "License"); -// you may not use this file except in compliance with the License. -// You may obtain a copy of the License at -// -// http://www.apache.org/licenses/LICENSE-2.0 -// -// Unless required by applicable law or agreed to in writing, software -// distributed under the License is distributed on an "AS IS" BASIS, -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. -// See the License for the specific language governing permissions and -// limitations under the License. - - -/** - * @fileoverview - * some functions for browser-side pretty printing of code contained in html. - *

- * - * For a fairly comprehensive set of languages see the - * README - * file that came with this source. At a minimum, the lexer should work on a - * number of languages including C and friends, Java, Python, Bash, SQL, HTML, - * XML, CSS, Javascript, and Makefiles. It works passably on Ruby, PHP and Awk - * and a subset of Perl, but, because of commenting conventions, doesn't work on - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class. - *

- * Usage:

    - *
  1. include this source file in an html page via - * {@code } - *
  2. define style rules. See the example page for examples. - *
  3. mark the {@code
    } and {@code } tags in your source with
    - *    {@code class=prettyprint.}
    - *    You can also use the (html deprecated) {@code } tag, but the pretty
    - *    printer needs to do more substantial DOM manipulations to support that, so
    - *    some css styles may not be preserved.
    - * </ol>
    - * That's it.  I wanted to keep the API as simple as possible, so there's no
    - * need to specify which language the code is in, but if you wish, you can add
    - * another class to the {@code <pre>} or {@code <code>} element to specify the
    - * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    - * starts with "lang-" followed by a file extension, specifies the file type.
    - * See the "lang-*.js" files in this directory for code that implements
    - * per-language file handlers.
    - * <p>
    - * Change log:<br>
    - * cbeust, 2006/08/22
    - * <blockquote>
    - *   Java annotations (start with "@") are now captured as literals ("lit")
    - * </blockquote>
    - * @requires console
    - */
    -
    -// JSLint declarations
    -/*global console, document, navigator, setTimeout, window */
    -
    -/**
    - * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    - * UI events.
    - * If set to {@code false}, {@code prettyPrint()} is synchronous.
    - */
    -window['PR_SHOULD_USE_CONTINUATION'] = true;
    -
    -/** the number of characters between tab columns */
    -window['PR_TAB_WIDTH'] = 8;
    -
    -/** Walks the DOM returning a properly escaped version of innerHTML.
    -  * @param {Node} node
    -  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    -  */
    -window['PR_normalizedHtml']
    -
    -/** Contains functions for creating and registering new language handlers.
    -  * @type {Object}
    -  */
    -  = window['PR']
    -
    -/** Pretty print a chunk of code.
    -  *
    -  * @param {string} sourceCodeHtml code as html
    -  * @return {string} code as html, but prettier
    -  */
    -  = window['prettyPrintOne']
    -/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    -  * {@code class=prettyprint} and prettify them.
    -  * @param {Function?} opt_whenDone if specified, called when the last entry
    -  *     has been finished.
    -  */
    -  = window['prettyPrint'] = void 0;
    -
    -/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    -window['_pr_isIE6'] = function () {
    -  var ieVersion = navigator && navigator.userAgent &&
    -      navigator.userAgent.match(/\bMSIE ([678])\./);
    -  ieVersion = ieVersion ? +ieVersion[1] : false;
    -  window['_pr_isIE6'] = function () { return ieVersion; };
    -  return ieVersion;
    -};
    -
    -
    -(function () {
    -  // Keyword lists for various languages.
    -  var FLOW_CONTROL_KEYWORDS =
    -      "break continue do else for if return while ";
    -  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    -      "double enum extern float goto int long register short signed sizeof " +
    -      "static struct switch typedef union unsigned void volatile ";
    -  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    -      "new operator private protected public this throw true try typeof ";
    -  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    -      "concept concept_map const_cast constexpr decltype " +
    -      "dynamic_cast explicit export friend inline late_check " +
    -      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    -      "template typeid typename using virtual wchar_t where ";
    -  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    -      "abstract boolean byte extends final finally implements import " +
    -      "instanceof null native package strictfp super synchronized throws " +
    -      "transient ";
    -  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    -      "as base by checked decimal delegate descending event " +
    -      "fixed foreach from group implicit in interface internal into is lock " +
    -      "object out override orderby params partial readonly ref sbyte sealed " +
    -      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    -  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    -      "debugger eval export function get null set undefined var with " +
    -      "Infinity NaN ";
    -  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    -      "goto if import last local my next no our print package redo require " +
    -      "sub undef unless until use wantarray while BEGIN END ";
    -  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    -      "elif except exec finally from global import in is lambda " +
    -      "nonlocal not or pass print raise try with yield " +
    -      "False True None ";
    -  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    -      " defined elsif end ensure false in module next nil not or redo rescue " +
    -      "retry self super then true undef unless until when yield BEGIN END ";
    -  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    -      "function in local set then until ";
    -  var ALL_KEYWORDS = (
    -      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    -      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    -
    -  // token style names.  correspond to css classes
    -  /** token style for a string literal */
    -  var PR_STRING = 'str';
    -  /** token style for a keyword */
    -  var PR_KEYWORD = 'kwd';
    -  /** token style for a comment */
    -  var PR_COMMENT = 'com';
    -  /** token style for a type */
    -  var PR_TYPE = 'typ';
    -  /** token style for a literal value.  e.g. 1, null, true. */
    -  var PR_LITERAL = 'lit';
    -  /** token style for a punctuation string. */
    -  var PR_PUNCTUATION = 'pun';
    -  /** token style for a punctuation string. */
    -  var PR_PLAIN = 'pln';
    -
    -  /** token style for an sgml tag. */
    -  var PR_TAG = 'tag';
    -  /** token style for a markup declaration such as a DOCTYPE. */
    -  var PR_DECLARATION = 'dec';
    -  /** token style for embedded source. */
    -  var PR_SOURCE = 'src';
    -  /** token style for an sgml attribute name. */
    -  var PR_ATTRIB_NAME = 'atn';
    -  /** token style for an sgml attribute value. */
    -  var PR_ATTRIB_VALUE = 'atv';
    -
    -  /**
    -   * A class that indicates a section of markup that is not code, e.g. to allow
    -   * embedding of line numbers within code listings.
    -   */
    -  var PR_NOCODE = 'nocode';
    -
    -  /** A set of tokens that can precede a regular expression literal in
    -    * javascript.
    -    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    -    * list, but I've removed ones that might be problematic when seen in
    -    * languages that don't support regular expression literals.
    -    *
    -    * <p>Specifically, I've removed any keywords that can't precede a regexp
    -    * literal in a syntactically legal javascript program, and I've removed the
    -    * "in" keyword since it's not a keyword in many languages, and might be used
    -    * as a count of inches.
    -    *
    -    * <p>The link a above does not accurately describe EcmaScript rules since
    -    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    -    * very well in practice.
    -    *
    -    * @private
    -    */
    -  var REGEXP_PRECEDER_PATTERN = function () {
    -      var preceders = [
    -          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    -          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    -          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    -          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    -          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    -          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    -          "||=", "~" /* handles =~ and !~ */,
    -          "break", "case", "continue", "delete",
    -          "do", "else", "finally", "instanceof",
    -          "return", "throw", "try", "typeof"
    -          ];
    -      var pattern = '(?:^^|[+-]';
    -      for (var i = 0; i < preceders.length; ++i) {
    -        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    -      }
    -      pattern += ')\\s*';  // matches at end, and matches empty string
    -      return pattern;
    -      // CAVEAT: this does not properly handle the case where a regular
    -      // expression immediately follows another since a regular expression may
    -      // have flags for case-sensitivity and the like.  Having regexp tokens
    -      // adjacent is not valid in any language I'm aware of, so I'm punting.
    -      // TODO: maybe style special characters inside a regexp as punctuation.
    -    }();
    -
    -  // Define regexps here so that the interpreter doesn't have to create an
    -  // object each time the function containing them is called.
    -  // The language spec requires a new object created even if you don't access
    -  // the $1 members.
    -  var pr_amp = /&/g;
    -  var pr_lt = /</g;
    -  var pr_gt = />/g;
    -  var pr_quot = /\"/g;
    -  /** like textToHtml but escapes double quotes to be attribute safe. */
    -  function attribToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;')
    -        .replace(pr_quot, '&quot;');
    -  }
    -
    -  /** escapest html special characters to html. */
    -  function textToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;');
    -  }
    -
    -
    -  var pr_ltEnt = /&lt;/g;
    -  var pr_gtEnt = /&gt;/g;
    -  var pr_aposEnt = /&apos;/g;
    -  var pr_quotEnt = /&quot;/g;
    -  var pr_ampEnt = /&amp;/g;
    -  var pr_nbspEnt = /&nbsp;/g;
    -  /** unescapes html to plain text. */
    -  function htmlToText(html) {
    -    var pos = html.indexOf('&');
    -    if (pos < 0) { return html; }
    -    // Handle numeric entities specially.  We can't use functional substitution
    -    // since that doesn't work in older versions of Safari.
    -    // These should be rare since most browsers convert them to normal chars.
    -    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    -      var end = html.indexOf(';', pos);
    -      if (end >= 0) {
    -        var num = html.substring(pos + 3, end);
    -        var radix = 10;
    -        if (num && num.charAt(0) === 'x') {
    -          num = num.substring(1);
    -          radix = 16;
    -        }
    -        var codePoint = parseInt(num, radix);
    -        if (!isNaN(codePoint)) {
    -          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    -                  html.substring(end + 1));
    -        }
    -      }
    -    }
    -
    -    return html.replace(pr_ltEnt, '<')
    -        .replace(pr_gtEnt, '>')
    -        .replace(pr_aposEnt, "'")
    -        .replace(pr_quotEnt, '"')
    -        .replace(pr_nbspEnt, ' ')
    -        .replace(pr_ampEnt, '&');
    -  }
    -
    -  /** is the given node's innerHTML normally unescaped? */
    -  function isRawContent(node) {
    -    return 'XMP' === node.tagName;
    -  }
    -
    -  var newlineRe = /[\r\n]/g;
    -  /**
    -   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    -   */
    -  function isPreformatted(node, content) {
    -    // PRE means preformatted, and is a very common case, so don't create
    -    // unnecessary computed style objects.
    -    if ('PRE' === node.tagName) { return true; }
    -    if (!newlineRe.test(content)) { return true; }  // Don't care
    -    var whitespace = '';
    -    // For disconnected nodes, IE has no currentStyle.
    -    if (node.currentStyle) {
    -      whitespace = node.currentStyle.whiteSpace;
    -    } else if (window.getComputedStyle) {
    -      // Firefox makes a best guess if node is disconnected whereas Safari
    -      // returns the empty string.
    -      whitespace = window.getComputedStyle(node, null).whiteSpace;
    -    }
    -    return !whitespace || whitespace === 'pre';
    -  }
    -
    -  function normalizedHtml(node, out, opt_sortAttrs) {
    -    switch (node.nodeType) {
    -      case 1:  // an element
    -        var name = node.tagName.toLowerCase();
    -
    -        out.push('<', name);
    -        var attrs = node.attributes;
    -        var n = attrs.length;
    -        if (n) {
    -          if (opt_sortAttrs) {
    -            var sortedAttrs = [];
    -            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    -            sortedAttrs.sort(function (a, b) {
    -                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    -              });
    -            attrs = sortedAttrs;
    -          }
    -          for (var i = 0; i < n; ++i) {
    -            var attr = attrs[i];
    -            if (!attr.specified) { continue; }
    -            out.push(' ', attr.name.toLowerCase(),
    -                     '="', attribToHtml(attr.value), '"');
    -          }
    -        }
    -        out.push('>');
    -        for (var child = node.firstChild; child; child = child.nextSibling) {
    -          normalizedHtml(child, out, opt_sortAttrs);
    -        }
    -        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    -          out.push('<\/', name, '>');
    -        }
    -        break;
    -      case 3: case 4: // text
    -        out.push(textToHtml(node.nodeValue));
    -        break;
    -    }
    -  }
    -
    -  /**
    -   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    -   * matches the union o the sets o strings matched d by the input RegExp.
    -   * Since it matches globally, if the input strings have a start-of-input
    -   * anchor (/^.../), it is ignored for the purposes of unioning.
    -   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    -   * @return {RegExp} a global regex.
    -   */
    -  function combinePrefixPatterns(regexs) {
    -    var capturedGroupIndex = 0;
    -
    -    var needToFoldCase = false;
    -    var ignoreCase = false;
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.ignoreCase) {
    -        ignoreCase = true;
    -      } else if (/[a-z]/i.test(regex.source.replace(
    -                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    -        needToFoldCase = true;
    -        ignoreCase = false;
    -        break;
    -      }
    -    }
    -
    -    function decodeEscape(charsetPart) {
    -      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    -      switch (charsetPart.charAt(1)) {
    -        case 'b': return 8;
    -        case 't': return 9;
    -        case 'n': return 0xa;
    -        case 'v': return 0xb;
    -        case 'f': return 0xc;
    -        case 'r': return 0xd;
    -        case 'u': case 'x':
    -          return parseInt(charsetPart.substring(2), 16)
    -              || charsetPart.charCodeAt(1);
    -        case '0': case '1': case '2': case '3': case '4':
    -        case '5': case '6': case '7':
    -          return parseInt(charsetPart.substring(1), 8);
    -        default: return charsetPart.charCodeAt(1);
    -      }
    -    }
    -
    -    function encodeEscape(charCode) {
    -      if (charCode < 0x20) {
    -        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    -      }
    -      var ch = String.fromCharCode(charCode);
    -      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    -        ch = '\\' + ch;
    -      }
    -      return ch;
    -    }
    -
    -    function caseFoldCharset(charSet) {
    -      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    -          new RegExp(
    -              '\\\\u[0-9A-Fa-f]{4}'
    -              + '|\\\\x[0-9A-Fa-f]{2}'
    -              + '|\\\\[0-3][0-7]{0,2}'
    -              + '|\\\\[0-7]{1,2}'
    -              + '|\\\\[\\s\\S]'
    -              + '|-'
    -              + '|[^-\\\\]',
    -              'g'));
    -      var groups = [];
    -      var ranges = [];
    -      var inverse = charsetParts[0] === '^';
    -      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    -        var p = charsetParts[i];
    -        switch (p) {
    -          case '\\B': case '\\b':
    -          case '\\D': case '\\d':
    -          case '\\S': case '\\s':
    -          case '\\W': case '\\w':
    -            groups.push(p);
    -            continue;
    -        }
    -        var start = decodeEscape(p);
    -        var end;
    -        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    -          end = decodeEscape(charsetParts[i + 2]);
    -          i += 2;
    -        } else {
    -          end = start;
    -        }
    -        ranges.push([start, end]);
    -        // If the range might intersect letters, then expand it.
    -        if (!(end < 65 || start > 122)) {
    -          if (!(end < 65 || start > 90)) {
    -            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    -          }
    -          if (!(end < 97 || start > 122)) {
    -            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    -          }
    -        }
    -      }
    -
    -      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    -      // -> [[1, 12], [14, 14], [16, 17]]
    -      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    -      var consolidatedRanges = [];
    -      var lastRange = [NaN, NaN];
    -      for (var i = 0; i < ranges.length; ++i) {
    -        var range = ranges[i];
    -        if (range[0] <= lastRange[1] + 1) {
    -          lastRange[1] = Math.max(lastRange[1], range[1]);
    -        } else {
    -          consolidatedRanges.push(lastRange = range);
    -        }
    -      }
    -
    -      var out = ['['];
    -      if (inverse) { out.push('^'); }
    -      out.push.apply(out, groups);
    -      for (var i = 0; i < consolidatedRanges.length; ++i) {
    -        var range = consolidatedRanges[i];
    -        out.push(encodeEscape(range[0]));
    -        if (range[1] > range[0]) {
    -          if (range[1] + 1 > range[0]) { out.push('-'); }
    -          out.push(encodeEscape(range[1]));
    -        }
    -      }
    -      out.push(']');
    -      return out.join('');
    -    }
    -
    -    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    -      // Split into character sets, escape sequences, punctuation strings
    -      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    -      // include any of the above.
    -      var parts = regex.source.match(
    -          new RegExp(
    -              '(?:'
    -              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    -              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    -              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    -              + '|\\\\[0-9]+'  // a back-reference or octal escape
    -              + '|\\\\[^ux0-9]'  // other escape sequence
    -              + '|\\(\\?[:!=]'  // start of a non-capturing group
    -              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    -              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    -              + ')',
    -              'g'));
    -      var n = parts.length;
    -
    -      // Maps captured group numbers to the number they will occupy in
    -      // the output or to -1 if that has not been determined, or to
    -      // undefined if they need not be capturing in the output.
    -      var capturedGroups = [];
    -
    -      // Walk over and identify back references to build the capturedGroups
    -      // mapping.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          // groups are 1-indexed, so max group index is count of '('
    -          ++groupIndex;
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            capturedGroups[decimalValue] = -1;
    -          }
    -        }
    -      }
    -
    -      // Renumber groups and reduce capturing groups to non-capturing groups
    -      // where possible.
    -      for (var i = 1; i < capturedGroups.length; ++i) {
    -        if (-1 === capturedGroups[i]) {
    -          capturedGroups[i] = ++capturedGroupIndex;
    -        }
    -      }
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          ++groupIndex;
    -          if (capturedGroups[groupIndex] === undefined) {
    -            parts[i] = '(?:';
    -          }
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            parts[i] = '\\' + capturedGroups[groupIndex];
    -          }
    -        }
    -      }
    -
    -      // Remove any prefix anchors so that the output will match anywhere.
    -      // ^^ really does mean an anchored match though.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    -      }
    -
    -      // Expand letters to groupts to handle mixing of case-sensitive and
    -      // case-insensitive patterns if necessary.
    -      if (regex.ignoreCase && needToFoldCase) {
    -        for (var i = 0; i < n; ++i) {
    -          var p = parts[i];
    -          var ch0 = p.charAt(0);
    -          if (p.length >= 2 && ch0 === '[') {
    -            parts[i] = caseFoldCharset(p);
    -          } else if (ch0 !== '\\') {
    -            // TODO: handle letters in numeric escapes.
    -            parts[i] = p.replace(
    -                /[a-zA-Z]/g,
    -                function (ch) {
    -                  var cc = ch.charCodeAt(0);
    -                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    -                });
    -          }
    -        }
    -      }
    -
    -      return parts.join('');
    -    }
    -
    -    var rewritten = [];
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    -      rewritten.push(
    -          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    -    }
    -
    -    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    -  }
    -
    -  var PR_innerHtmlWorks = null;
    -  function getInnerHtml(node) {
    -    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    -    // an html description of well formed XML and the containing tag is a PRE
    -    // tag, so we detect that case and emulate innerHTML.
    -    if (null === PR_innerHtmlWorks) {
    -      var testNode = document.createElement('PRE');
    -      testNode.appendChild(
    -          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    -      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    -    }
    -
    -    if (PR_innerHtmlWorks) {
    -      var content = node.innerHTML;
    -      // XMP tags contain unescaped entities so require special handling.
    -      if (isRawContent(node)) {
    -        content = textToHtml(content);
    -      } else if (!isPreformatted(node, content)) {
    -        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    -            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    -      }
    -      return content;
    -    }
    -
    -    var out = [];
    -    for (var child = node.firstChild; child; child = child.nextSibling) {
    -      normalizedHtml(child, out);
    -    }
    -    return out.join('');
    -  }
    -
    -  /** returns a function that expand tabs to spaces.  This function can be fed
    -    * successive chunks of text, and will maintain its own internal state to
    -    * keep track of how tabs are expanded.
    -    * @return {function (string) : string} a function that takes
    -    *   plain text and return the text with tabs expanded.
    -    * @private
    -    */
    -  function makeTabExpander(tabWidth) {
    -    var SPACES = '                ';
    -    var charInLine = 0;
    -
    -    return function (plainText) {
    -      // walk over each character looking for tabs and newlines.
    -      // On tabs, expand them.  On newlines, reset charInLine.
    -      // Otherwise increment charInLine
    -      var out = null;
    -      var pos = 0;
    -      for (var i = 0, n = plainText.length; i < n; ++i) {
    -        var ch = plainText.charAt(i);
    -
    -        switch (ch) {
    -          case '\t':
    -            if (!out) { out = []; }
    -            out.push(plainText.substring(pos, i));
    -            // calculate how much space we need in front of this part
    -            // nSpaces is the amount of padding -- the number of spaces needed
    -            // to move us to the next column, where columns occur at factors of
    -            // tabWidth.
    -            var nSpaces = tabWidth - (charInLine % tabWidth);
    -            charInLine += nSpaces;
    -            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    -              out.push(SPACES.substring(0, nSpaces));
    -            }
    -            pos = i + 1;
    -            break;
    -          case '\n':
    -            charInLine = 0;
    -            break;
    -          default:
    -            ++charInLine;
    -        }
    -      }
    -      if (!out) { return plainText; }
    -      out.push(plainText.substring(pos));
    -      return out.join('');
    -    };
    -  }
    -
    -  var pr_chunkPattern = new RegExp(
    -      '[^<]+'  // A run of characters other than '<'
    -      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    -      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    -      // a probable tag that should not be highlighted
    -      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    -      + '|<',  // A '<' that does not begin a larger chunk
    -      'g');
    -  var pr_commentPrefix = /^<\!--/;
    -  var pr_cdataPrefix = /^<!\[CDATA\[/;
    -  var pr_brPrefix = /^<br\b/i;
    -  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    -
    -  /** split markup into chunks of html tags (style null) and
    -    * plain text (style {@link #PR_PLAIN}), converting tags which are
    -    * significant for tokenization (<br>) into their textual equivalent.
    -    *
    -    * @param {string} s html where whitespace is considered significant.
    -    * @return {Object} source code and extracted tags.
    -    * @private
    -    */
    -  function extractTags(s) {
    -    // since the pattern has the 'g' modifier and defines no capturing groups,
    -    // this will return a list of all chunks which we then classify and wrap as
    -    // PR_Tokens
    -    var matches = s.match(pr_chunkPattern);
    -    var sourceBuf = [];
    -    var sourceBufLen = 0;
    -    var extractedTags = [];
    -    if (matches) {
    -      for (var i = 0, n = matches.length; i < n; ++i) {
    -        var match = matches[i];
    -        if (match.length > 1 && match.charAt(0) === '<') {
    -          if (pr_commentPrefix.test(match)) { continue; }
    -          if (pr_cdataPrefix.test(match)) {
    -            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    -            sourceBuf.push(match.substring(9, match.length - 3));
    -            sourceBufLen += match.length - 12;
    -          } else if (pr_brPrefix.test(match)) {
    -            // <br> tags are lexically significant so convert them to text.
    -            // This is undone later.
    -            sourceBuf.push('\n');
    -            ++sourceBufLen;
    -          } else {
    -            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    -              // A <span class="nocode"> will start a section that should be
    -              // ignored.  Continue walking the list until we see a matching end
    -              // tag.
    -              var name = match.match(pr_tagNameRe)[2];
    -              var depth = 1;
    -              var j;
    -              end_tag_loop:
    -              for (j = i + 1; j < n; ++j) {
    -                var name2 = matches[j].match(pr_tagNameRe);
    -                if (name2 && name2[2] === name) {
    -                  if (name2[1] === '/') {
    -                    if (--depth === 0) { break end_tag_loop; }
    -                  } else {
    -                    ++depth;
    -                  }
    -                }
    -              }
    -              if (j < n) {
    -                extractedTags.push(
    -                    sourceBufLen, matches.slice(i, j + 1).join(''));
    -                i = j;
    -              } else {  // Ignore unclosed sections.
    -                extractedTags.push(sourceBufLen, match);
    -              }
    -            } else {
    -              extractedTags.push(sourceBufLen, match);
    -            }
    -          }
    -        } else {
    -          var literalText = htmlToText(match);
    -          sourceBuf.push(literalText);
    -          sourceBufLen += literalText.length;
    -        }
    -      }
    -    }
    -    return { source: sourceBuf.join(''), tags: extractedTags };
    -  }
    -
    -  /** True if the given tag contains a class attribute with the nocode class. */
    -  function isNoCodeTag(tag) {
    -    return !!tag
    -        // First canonicalize the representation of attributes
    -        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    -                 ' $1="$2$3$4"')
    -        // Then look for the attribute we want.
    -        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    -  }
    -
    -  /**
    -   * Apply the given language handler to sourceCode and add the resulting
    -   * decorations to out.
    -   * @param {number} basePos the index of sourceCode within the chunk of source
    -   *    whose decorations are already present on out.
    -   */
    -  function appendDecorations(basePos, sourceCode, langHandler, out) {
    -    if (!sourceCode) { return; }
    -    var job = {
    -      source: sourceCode,
    -      basePos: basePos
    -    };
    -    langHandler(job);
    -    out.push.apply(out, job.decorations);
    -  }
    -
    -  /** Given triples of [style, pattern, context] returns a lexing function,
    -    * The lexing function interprets the patterns to find token boundaries and
    -    * returns a decoration list of the form
    -    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    -    * where index_n is an index into the sourceCode, and style_n is a style
    -    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    -    * all characters in sourceCode[index_n-1:index_n].
    -    *
    -    * The stylePatterns is a list whose elements have the form
    -    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    -    *
    -    * Style is a style constant like PR_PLAIN, or can be a string of the
    -    * form 'lang-FOO', where FOO is a language extension describing the
    -    * language of the portion of the token in $1 after pattern executes.
    -    * E.g., if style is 'lang-lisp', and group 1 contains the text
    -    * '(hello (world))', then that portion of the token will be passed to the
    -    * registered lisp handler for formatting.
    -    * The text before and after group 1 will be restyled using this decorator
    -    * so decorators should take care that this doesn't result in infinite
    -    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    -    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    -    * '<script>foo()<\/script>', which would cause the current decorator to
    -    * be called with '<script>' which would not match the same rule since
    -    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    -    * the generic tag rule.  The handler registered for the 'js' extension would
    -    * then be called with 'foo()', and finally, the current decorator would
    -    * be called with '<\/script>' which would not match the original rule and
    -    * so the generic tag rule would identify it as a tag.
    -    *
    -    * Pattern must only match prefixes, and if it matches a prefix, then that
    -    * match is considered a token with the same style.
    -    *
    -    * Context is applied to the last non-whitespace, non-comment token
    -    * recognized.
    -    *
    -    * Shortcut is an optional string of characters, any of which, if the first
    -    * character, gurantee that this pattern and only this pattern matches.
    -    *
    -    * @param {Array} shortcutStylePatterns patterns that always start with
    -    *   a known character.  Must have a shortcut string.
    -    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    -    *   order if the shortcut ones fail.  May have shortcuts.
    -    *
    -    * @return {function (Object)} a
    -    *   function that takes source code and returns a list of decorations.
    -    */
    -  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    -    var shortcuts = {};
    -    var tokenizer;
    -    (function () {
    -      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    -      var allRegexs = [];
    -      var regexKeys = {};
    -      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    -        var patternParts = allPatterns[i];
    -        var shortcutChars = patternParts[3];
    -        if (shortcutChars) {
    -          for (var c = shortcutChars.length; --c >= 0;) {
    -            shortcuts[shortcutChars.charAt(c)] = patternParts;
    -          }
    -        }
    -        var regex = patternParts[1];
    -        var k = '' + regex;
    -        if (!regexKeys.hasOwnProperty(k)) {
    -          allRegexs.push(regex);
    -          regexKeys[k] = null;
    -        }
    -      }
    -      allRegexs.push(/[\0-\uffff]/);
    -      tokenizer = combinePrefixPatterns(allRegexs);
    -    })();
    -
    -    var nPatterns = fallthroughStylePatterns.length;
    -    var notWs = /\S/;
    -
    -    /**
    -     * Lexes job.source and produces an output array job.decorations of style
    -     * classes preceded by the position at which they start in job.source in
    -     * order.
    -     *
    -     * @param {Object} job an object like {@code
    -     *    source: {string} sourceText plain text,
    -     *    basePos: {int} position of job.source in the larger chunk of
    -     *        sourceCode.
    -     * }
    -     */
    -    var decorate = function (job) {
    -      var sourceCode = job.source, basePos = job.basePos;
    -      /** Even entries are positions in source in ascending order.  Odd enties
    -        * are style markers (e.g., PR_COMMENT) that run from that position until
    -        * the end.
    -        * @type {Array.<number|string>}
    -        */
    -      var decorations = [basePos, PR_PLAIN];
    -      var pos = 0;  // index into sourceCode
    -      var tokens = sourceCode.match(tokenizer) || [];
    -      var styleCache = {};
    -
    -      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    -        var token = tokens[ti];
    -        var style = styleCache[token];
    -        var match = void 0;
    -
    -        var isEmbedded;
    -        if (typeof style === 'string') {
    -          isEmbedded = false;
    -        } else {
    -          var patternParts = shortcuts[token.charAt(0)];
    -          if (patternParts) {
    -            match = token.match(patternParts[1]);
    -            style = patternParts[0];
    -          } else {
    -            for (var i = 0; i < nPatterns; ++i) {
    -              patternParts = fallthroughStylePatterns[i];
    -              match = token.match(patternParts[1]);
    -              if (match) {
    -                style = patternParts[0];
    -                break;
    -              }
    -            }
    -
    -            if (!match) {  // make sure that we make progress
    -              style = PR_PLAIN;
    -            }
    -          }
    -
    -          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    -          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    -            isEmbedded = false;
    -            style = PR_SOURCE;
    -          }
    -
    -          if (!isEmbedded) { styleCache[token] = style; }
    -        }
    -
    -        var tokenStart = pos;
    -        pos += token.length;
    -
    -        if (!isEmbedded) {
    -          decorations.push(basePos + tokenStart, style);
    -        } else {  // Treat group 1 as an embedded block of source code.
    -          var embeddedSource = match[1];
    -          var embeddedSourceStart = token.indexOf(embeddedSource);
    -          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    -          if (match[2]) {
    -            // If embeddedSource can be blank, then it would match at the
    -            // beginning which would cause us to infinitely recurse on the
    -            // entire token, so we catch the right context in match[2].
    -            embeddedSourceEnd = token.length - match[2].length;
    -            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    -          }
    -          var lang = style.substring(5);
    -          // Decorate the left of the embedded source
    -          appendDecorations(
    -              basePos + tokenStart,
    -              token.substring(0, embeddedSourceStart),
    -              decorate, decorations);
    -          // Decorate the embedded source
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceStart,
    -              embeddedSource,
    -              langHandlerForExtension(lang, embeddedSource),
    -              decorations);
    -          // Decorate the right of the embedded section
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceEnd,
    -              token.substring(embeddedSourceEnd),
    -              decorate, decorations);
    -        }
    -      }
    -      job.decorations = decorations;
    -    };
    -    return decorate;
    -  }
    -
    -  /** returns a function that produces a list of decorations from source text.
    -    *
    -    * This code treats ", ', and ` as string delimiters, and \ as a string
    -    * escape.  It does not recognize perl's qq() style strings.
    -    * It has no special handling for double delimiter escapes as in basic, or
    -    * the tripled delimiters used in python, but should work on those regardless
    -    * although in those cases a single string literal may be broken up into
    -    * multiple adjacent string literals.
    -    *
    -    * It recognizes C, C++, and shell style comments.
    -    *
    -    * @param {Object} options a set of optional parameters.
    -    * @return {function (Object)} a function that examines the source code
    -    *     in the input job and builds the decoration list.
    -    */
    -  function sourceDecorator(options) {
    -    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    -    if (options['tripleQuotedStrings']) {
    -      // '''multi-line-string''', 'single-line-string', and double-quoted
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    -           null, '\'"']);
    -    } else if (options['multiLineStrings']) {
    -      // 'multi-line-string', "multi-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    -           null, '\'"`']);
    -    } else {
    -      // 'single-line-string', "single-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,
    -           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    -           null, '"\'']);
    -    }
    -    if (options['verbatimStrings']) {
    -      // verbatim-string-literal production from the C# grammar.  See issue 93.
    -      fallthroughStylePatterns.push(
    -          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    -    }
    -    if (options['hashComments']) {
    -      if (options['cStyleComments']) {
    -        // Stop C preprocessor declarations at an unclosed open comment
    -        shortcutStylePatterns.push(
    -            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    -             null, '#']);
    -        fallthroughStylePatterns.push(
    -            [PR_STRING,
    -             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    -             null]);
    -      } else {
    -        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    -      }
    -    }
    -    if (options['cStyleComments']) {
    -      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    -      fallthroughStylePatterns.push(
    -          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    -    }
    -    if (options['regexLiterals']) {
    -      var REGEX_LITERAL = (
    -          // A regular expression literal starts with a slash that is
    -          // not followed by * or / so that it is not confused with
    -          // comments.
    -          '/(?=[^/*])'
    -          // and then contains any number of raw characters,
    -          + '(?:[^/\\x5B\\x5C]'
    -          // escape sequences (\x5C),
    -          +    '|\\x5C[\\s\\S]'
    -          // or non-nesting character sets (\x5B\x5D);
    -          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    -          // finally closed by a /.
    -          + '/');
    -      fallthroughStylePatterns.push(
    -          ['lang-regex',
    -           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    -           ]);
    -    }
    -
    -    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    -    if (keywords.length) {
    -      fallthroughStylePatterns.push(
    -          [PR_KEYWORD,
    -           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    -    }
    -
    -    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    -    fallthroughStylePatterns.push(
    -        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    -        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    -        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_LITERAL,
    -         new RegExp(
    -             '^(?:'
    -             // A hex number
    -             + '0x[a-f0-9]+'
    -             // or an octal or decimal number,
    -             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    -             // possibly in scientific notation
    -             + '(?:e[+\\-]?\\d+)?'
    -             + ')'
    -             // with an optional modifier like UL for unsigned long
    -             + '[a-z]*', 'i'),
    -         null, '0123456789'],
    -        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    -
    -    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    -  }
    -
    -  var decorateSource = sourceDecorator({
    -        'keywords': ALL_KEYWORDS,
    -        'hashComments': true,
    -        'cStyleComments': true,
    -        'multiLineStrings': true,
    -        'regexLiterals': true
    -      });
    -
    -  /** Breaks {@code job.source} around style boundaries in
    -    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    -    * and leaves the result in {@code job.prettyPrintedHtml}.
    -    * @param {Object} job like {
    -    *    source: {string} source as plain text,
    -    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    -    *                   html preceded by their position in {@code job.source}
    -    *                   in order
    -    *    decorations: {Array.<number|string} an array of style classes preceded
    -    *                 by the position at which they start in job.source in order
    -    * }
    -    * @private
    -    */
    -  function recombineTagsAndDecorations(job) {
    -    var sourceText = job.source;
    -    var extractedTags = job.extractedTags;
    -    var decorations = job.decorations;
    -
    -    var html = [];
    -    // index past the last char in sourceText written to html
    -    var outputIdx = 0;
    -
    -    var openDecoration = null;
    -    var currentDecoration = null;
    -    var tagPos = 0;  // index into extractedTags
    -    var decPos = 0;  // index into decorations
    -    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    -
    -    var adjacentSpaceRe = /([\r\n ]) /g;
    -    var startOrSpaceRe = /(^| ) /gm;
    -    var newlineRe = /\r\n?|\n/g;
    -    var trailingSpaceRe = /[ \r\n]$/;
    -    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    -
    -    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    -    var isIE678 = window['_pr_isIE6']();
    -    var lineBreakHtml = (
    -        isIE678
    -        ? (job.sourceNode.tagName === 'PRE'
    -           // Use line feeds instead of <br>s so that copying and pasting works
    -           // on IE.
    -           // Doing this on other browsers breaks lots of stuff since \r\n is
    -           // treated as two newlines on Firefox.
    -           ? (isIE678 === 6 ? '&#160;\r\n' :
    -              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    -           // IE collapses multiple adjacent <br>s into 1 line break.
    -           // Prefix every newline with '&#160;' to prevent such behavior.
    -           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    -           : '&#160;<br />')
    -        : '<br />');
    -
    -    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    -    // number of the first line.
    -    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    -    var lineBreaker;
    -    if (numberLines) {
    -      var lineBreaks = [];
    -      for (var i = 0; i < 10; ++i) {
    -        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    -      }
    -      var lineNum = numberLines[1] && numberLines[1].length
    -          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    -      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    -      if (lineNum) {
    -        html.push(' value="', lineNum + 1, '"');
    -      }
    -      html.push('>');
    -      lineBreaker = function () {
    -        var lb = lineBreaks[++lineNum % 10];
    -        // If a decoration is open, we need to close it before closing a list-item
    -        // and reopen it on the other side of the list item.
    -        return openDecoration
    -            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    -      };
    -    } else {
    -      lineBreaker = lineBreakHtml;
    -    }
    -
    -    // A helper function that is responsible for opening sections of decoration
    -    // and outputing properly escaped chunks of source
    -    function emitTextUpTo(sourceIdx) {
    -      if (sourceIdx > outputIdx) {
    -        if (openDecoration && openDecoration !== currentDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        if (!openDecoration && currentDecoration) {
    -          openDecoration = currentDecoration;
    -          html.push('<span class="', openDecoration, '">');
    -        }
    -        // This interacts badly with some wikis which introduces paragraph tags
    -        // into pre blocks for some strange reason.
    -        // It's necessary for IE though which seems to lose the preformattedness
    -        // of <pre> tags when their innerHTML is assigned.
    -        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    -        // and it serves to undo the conversion of <br>s to newlines done in
    -        // chunkify.
    -        var htmlChunk = textToHtml(
    -            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    -            .replace(lastWasSpace
    -                     ? startOrSpaceRe
    -                     : adjacentSpaceRe, '$1&#160;');
    -        // Keep track of whether we need to escape space at the beginning of the
    -        // next chunk.
    -        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    -        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    -        outputIdx = sourceIdx;
    -      }
    -    }
    -
    -    while (true) {
    -      // Determine if we're going to consume a tag this time around.  Otherwise
    -      // we consume a decoration or exit.
    -      var outputTag;
    -      if (tagPos < extractedTags.length) {
    -        if (decPos < decorations.length) {
    -          // Pick one giving preference to extractedTags since we shouldn't open
    -          // a new style that we're going to have to immediately close in order
    -          // to output a tag.
    -          outputTag = extractedTags[tagPos] <= decorations[decPos];
    -        } else {
    -          outputTag = true;
    -        }
    -      } else {
    -        outputTag = false;
    -      }
    -      // Consume either a decoration or a tag or exit.
    -      if (outputTag) {
    -        emitTextUpTo(extractedTags[tagPos]);
    -        if (openDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        html.push(extractedTags[tagPos + 1]);
    -        tagPos += 2;
    -      } else if (decPos < decorations.length) {
    -        emitTextUpTo(decorations[decPos]);
    -        currentDecoration = decorations[decPos + 1];
    -        decPos += 2;
    -      } else {
    -        break;
    -      }
    -    }
    -    emitTextUpTo(sourceText.length);
    -    if (openDecoration) {
    -      html.push('</span>');
    -    }
    -    if (numberLines) { html.push('</li></ol>'); }
    -    job.prettyPrintedHtml = html.join('');
    -  }
    -
    -  /** Maps language-specific file extensions to handlers. */
    -  var langHandlerRegistry = {};
    -  /** Register a language handler for the given file extensions.
    -    * @param {function (Object)} handler a function from source code to a list
    -    *      of decorations.  Takes a single argument job which describes the
    -    *      state of the computation.   The single parameter has the form
    -    *      {@code {
    -    *        source: {string} as plain text.
    -    *        decorations: {Array.<number|string>} an array of style classes
    -    *                     preceded by the position at which they start in
    -    *                     job.source in order.
    -    *                     The language handler should assigned this field.
    -    *        basePos: {int} the position of source in the larger source chunk.
    -    *                 All positions in the output decorations array are relative
    -    *                 to the larger source chunk.
    -    *      } }
    -    * @param {Array.<string>} fileExtensions
    -    */
    -  function registerLangHandler(handler, fileExtensions) {
    -    for (var i = fileExtensions.length; --i >= 0;) {
    -      var ext = fileExtensions[i];
    -      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    -        langHandlerRegistry[ext] = handler;
    -      } else if ('console' in window) {
    -        console['warn']('cannot override language handler %s', ext);
    -      }
    -    }
    -  }
    -  function langHandlerForExtension(extension, source) {
    -    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    -      // Treat it as markup if the first non whitespace character is a < and
    -      // the last non-whitespace character is a >.
    -      extension = /^\s*</.test(source)
    -          ? 'default-markup'
    -          : 'default-code';
    -    }
    -    return langHandlerRegistry[extension];
    -  }
    -  registerLangHandler(decorateSource, ['default-code']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [],
    -          [
    -           [PR_PLAIN,       /^[^<?]+/],
    -           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    -           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    -           // Unescaped content in an unknown language
    -           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    -           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    -           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    -           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    -           // Unescaped content in javascript.  (Or possibly vbscript).
    -           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    -           // Contains unescaped stylesheet content
    -           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    -           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    -          ]),
    -      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [
    -           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    -           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    -           ],
    -          [
    -           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    -           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    -           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    -           [PR_PUNCTUATION,  /^[=<>\/]+/],
    -           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    -           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    -           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    -           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    -           ]),
    -      ['in.tag']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CPP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true
    -        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': 'null true false'
    -        }), ['json']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CSHARP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true,
    -          'verbatimStrings': true
    -        }), ['cs']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JAVA_KEYWORDS,
    -          'cStyleComments': true
    -        }), ['java']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': SH_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true
    -        }), ['bsh', 'csh', 'sh']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PYTHON_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'tripleQuotedStrings': true
    -        }), ['cv', 'py']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PERL_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['perl', 'pl', 'pm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': RUBY_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['rb']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JSCRIPT_KEYWORDS,
    -          'cStyleComments': true,
    -          'regexLiterals': true
    -        }), ['js']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    -
    -  function applyDecorator(job) {
    -    var sourceCodeHtml = job.sourceCodeHtml;
    -    var opt_langExtension = job.langExtension;
    -
    -    // Prepopulate output in case processing fails with an exception.
    -    job.prettyPrintedHtml = sourceCodeHtml;
    -
    -    try {
    -      // Extract tags, and convert the source code to plain text.
    -      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    -      /** Plain text. @type {string} */
    -      var source = sourceAndExtractedTags.source;
    -      job.source = source;
    -      job.basePos = 0;
    -
    -      /** Even entries are positions in source in ascending order.  Odd entries
    -        * are tags that were extracted at that position.
    -        * @type {Array.<number|string>}
    -        */
    -      job.extractedTags = sourceAndExtractedTags.tags;
    -
    -      // Apply the appropriate language handler
    -      langHandlerForExtension(opt_langExtension, source)(job);
    -      // Integrate the decorations and tags back into the source code to produce
    -      // a decorated html string which is left in job.prettyPrintedHtml.
    -      recombineTagsAndDecorations(job);
    -    } catch (e) {
    -      if ('console' in window) {
    -        console['log'](e && e['stack'] ? e['stack'] : e);
    -      }
    -    }
    -  }
    -
    -  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    -    var job = {
    -      sourceCodeHtml: sourceCodeHtml,
    -      langExtension: opt_langExtension
    -    };
    -    applyDecorator(job);
    -    return job.prettyPrintedHtml;
    -  }
    -
    -  function prettyPrint(opt_whenDone) {
    -    function byTagName(tn) { return document.getElementsByTagName(tn); }
    -    // fetch a list of nodes to rewrite
    -    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    -    var elements = [];
    -    for (var i = 0; i < codeSegments.length; ++i) {
    -      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    -        elements.push(codeSegments[i][j]);
    -      }
    -    }
    -    codeSegments = null;
    -
    -    var clock = Date;
    -    if (!clock['now']) {
    -      clock = { 'now': function () { return (new Date).getTime(); } };
    -    }
    -
    -    // The loop is broken into a series of continuations to make sure that we
    -    // don't make the browser unresponsive when rewriting a large page.
    -    var k = 0;
    -    var prettyPrintingJob;
    -
    -    function doWork() {
    -      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    -                     clock.now() + 250 /* ms */ :
    -                     Infinity);
    -      for (; k < elements.length && clock.now() < endTime; k++) {
    -        var cs = elements[k];
    -        // [JACOCO] 'prettyprint' -> 'source'
    -        if (cs.className && cs.className.indexOf('source') >= 0) {
    -          // If the classes includes a language extensions, use it.
    -          // Language extensions can be specified like
    -          //     <pre class="prettyprint lang-cpp">
    -          // the language extension "cpp" is used to find a language handler as
    -          // passed to PR_registerLangHandler.
    -          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    -          if (langExtension) { langExtension = langExtension[1]; }
    -
    -          // make sure this is not nested in an already prettified element
    -          var nested = false;
    -          for (var p = cs.parentNode; p; p = p.parentNode) {
    -            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    -                 p.tagName === 'xmp') &&
    -                // [JACOCO] 'prettyprint' -> 'source'
    -                p.className && p.className.indexOf('source') >= 0) {
    -              nested = true;
    -              break;
    -            }
    -          }
    -          if (!nested) {
    -            // fetch the content as a snippet of properly escaped HTML.
    -            // Firefox adds newlines at the end.
    -            var content = getInnerHtml(cs);
    -            content = content.replace(/(?:\r\n?|\n)$/, '');
    -
    -            // do the pretty printing
    -            prettyPrintingJob = {
    -              sourceCodeHtml: content,
    -              langExtension: langExtension,
    -              sourceNode: cs
    -            };
    -            applyDecorator(prettyPrintingJob);
    -            replaceWithPrettyPrintedHtml();
    -          }
    -        }
    -      }
    -      if (k < elements.length) {
    -        // finish up in a continuation
    -        setTimeout(doWork, 250);
    -      } else if (opt_whenDone) {
    -        opt_whenDone();
    -      }
    -    }
    -
    -    function replaceWithPrettyPrintedHtml() {
    -      var newContent = prettyPrintingJob.prettyPrintedHtml;
    -      if (!newContent) { return; }
    -      var cs = prettyPrintingJob.sourceNode;
    -
    -      // push the prettified html back into the tag.
    -      if (!isRawContent(cs)) {
    -        // just replace the old html with the new
    -        cs.innerHTML = newContent;
    -      } else {
    -        // we need to change the tag to a <pre> since <xmp>s do not allow
    -        // embedded tags such as the span tags used to attach styles to
    -        // sections of source code.
    -        var pre = document.createElement('PRE');
    -        for (var i = 0; i < cs.attributes.length; ++i) {
    -          var a = cs.attributes[i];
    -          if (a.specified) {
    -            var aname = a.name.toLowerCase();
    -            if (aname === 'class') {
    -              pre.className = a.value;  // For IE 6
    -            } else {
    -              pre.setAttribute(a.name, a.value);
    -            }
    -          }
    -        }
    -        pre.innerHTML = newContent;
    -
    -        // remove the old
    -        cs.parentNode.replaceChild(pre, cs);
    -        cs = pre;
    -      }
    -    }
    -
    -    doWork();
    -  }
    -
    -  window['PR_normalizedHtml'] = normalizedHtml;
    -  window['prettyPrintOne'] = prettyPrintOne;
    -  window['prettyPrint'] = prettyPrint;
    -  window['PR'] = {
    -        'combinePrefixPatterns': combinePrefixPatterns,
    -        'createSimpleLexer': createSimpleLexer,
    -        'registerLangHandler': registerLangHandler,
    -        'sourceDecorator': sourceDecorator,
    -        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    -        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    -        'PR_COMMENT': PR_COMMENT,
    -        'PR_DECLARATION': PR_DECLARATION,
    -        'PR_KEYWORD': PR_KEYWORD,
    -        'PR_LITERAL': PR_LITERAL,
    -        'PR_NOCODE': PR_NOCODE,
    -        'PR_PLAIN': PR_PLAIN,
    -        'PR_PUNCTUATION': PR_PUNCTUATION,
    -        'PR_SOURCE': PR_SOURCE,
    -        'PR_STRING': PR_STRING,
    -        'PR_TAG': PR_TAG,
    -        'PR_TYPE': PR_TYPE
    -      };
    -})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif
    deleted file mode 100644
    index c2f71469ba995289439d86ea39b1b33edb03388c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+AD{pP&D~tn7aso&R25|6^nS*Vg{;>G{84!T)8;{;yfXu$BQ0
    fDgI<(<YM4w&|v@qkQodt90ol_LPjnP91PX~3&9+X
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    deleted file mode 100644
    index dd936bca..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    +++ /dev/null
    @@ -1,243 +0,0 @@
    -body, td {
    -  font-family:sans-serif;
    -  font-size:10pt;
    -}
    -
    -h1 {
    -  font-weight:bold;
    -  font-size:18pt;
    -}
    -
    -.breadcrumb {
    -  border:#d6d3ce 1px solid;
    -  padding:2px 4px 2px 4px;
    -}
    -
    -.breadcrumb .info {
    -  float:right;
    -}
    -
    -.breadcrumb .info a {
    -  margin-left:8px;
    -}
    -
    -.el_report {
    -  padding-left:18px;
    -  background-image:url(report.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_group {
    -  padding-left:18px;
    -  background-image:url(group.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_bundle {
    -  padding-left:18px;
    -  background-image:url(bundle.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_package {
    -  padding-left:18px;
    -  background-image:url(package.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_class {
    -  padding-left:18px;
    -  background-image:url(class.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_source {
    -  padding-left:18px;
    -  background-image:url(source.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_method {
    -  padding-left:18px;
    -  background-image:url(method.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_session {
    -  padding-left:18px;
    -  background-image:url(session.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -pre.source {
    -  border:#d6d3ce 1px solid;
    -  font-family:monospace;
    -}
    -
    -pre.source ol {
    -  margin-bottom: 0px;
    -  margin-top: 0px;
    -}
    -
    -pre.source li {
    -  border-left: 1px solid #D6D3CE;
    -  color: #A0A0A0;
    -  padding-left: 0px;
    -}
    -
    -pre.source span.fc {
    -  background-color:#ccffcc;
    -}
    -
    -pre.source span.nc {
    -  background-color:#ffaaaa;
    -}
    -
    -pre.source span.pc {
    -  background-color:#ffffcc;
    -}
    -
    -pre.source span.bfc {
    -  background-image: url(branchfc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bfc:hover {
    -  background-color:#80ff80;
    -}
    -
    -pre.source span.bnc {
    -  background-image: url(branchnc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bnc:hover {
    -  background-color:#ff8080;
    -}
    -
    -pre.source span.bpc {
    -  background-image: url(branchpc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bpc:hover {
    -  background-color:#ffff80;
    -}
    -
    -table.coverage {
    -  empty-cells:show;
    -  border-collapse:collapse;
    -}
    -
    -table.coverage thead {
    -  background-color:#e0e0e0;
    -}
    -
    -table.coverage thead td {
    -  white-space:nowrap;
    -  padding:2px 14px 0px 6px;
    -  border-bottom:#b0b0b0 1px solid;
    -}
    -
    -table.coverage thead td.bar {
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr1 {
    -  text-align:right;
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr2 {
    -  text-align:right;
    -  padding-left:2px;
    -}
    -
    -table.coverage thead td.sortable {
    -  cursor:pointer;
    -  background-image:url(sort.gif);
    -  background-position:right center;
    -  background-repeat:no-repeat;
    -}
    -
    -table.coverage thead td.up {
    -  background-image:url(up.gif);
    -}
    -
    -table.coverage thead td.down {
    -  background-image:url(down.gif);
    -}
    -
    -table.coverage tbody td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -  border-bottom:#d6d3ce 1px solid;
    -}
    -
    -table.coverage tbody tr:hover {
    -  background: #f0f0d0 !important;
    -}
    -
    -table.coverage tbody td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -table.coverage tfoot td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -}
    -
    -table.coverage tfoot td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -.footer {
    -  margin-top:20px;
    -  border-top:#d6d3ce 1px solid;
    -  padding-top:2px;
    -  font-size:8pt;
    -  color:#a0a0a0;
    -}
    -
    -.footer a {
    -  color:#a0a0a0;
    -}
    -
    -.right {
    -  float:right;
    -}
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif
    deleted file mode 100644
    index 8547be50bf3e97e725920927b5aa4cdb031f4823..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 363
    zcmZ?wbhEHb6krfwSZc{In}J~s1H&!`1_uX+xVSjMb&S>db~X8S)dhAn1$OlXwvB~0
    zO@%hC#Wq5_7&^+V`^qgRRa;E2HJ?*&DsqWoev|2fCetO&CQDmPR<;_iXfs~ZZnVC`
    za8s8-+pK*(^AAm4c5K#~(^ocST-lU)byMc8y)_R`^xu2&{oaco_g{R!|Ki8Pmp>lA
    z{_*VHkC*R%zWMa)!{^_hzyAL8?f2(zzrTL}{q@K1Z$Ey2|M}<VuRs5>0mYvzj9d)%
    z3_1)z0P+(9TgQR<1s*zF)+bahX*_u_??Pbv&V#KE^V2&`bhGjjR;*MxC8EFO_3_}<
    zH?w9WrJ7AX`tJM8r525X{~8+WorLsRL^?W{nR=L*odosT`KItOGtTI963}JgV_m??
    z%&>&9-=1G*^3>@wm-A|~FmK+nbvd`DhNhP0UUhXIS1vYAPL5-o?Ce}VXI&i`tO1G(
    BvdRDe
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif
    deleted file mode 100644
    index 0151bad8a001e5cc5cc7723a608185f746b7f8c1..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 213
    zcmZ?wbhEHb6krfwXc1xPS$gU4xw~t2pG#?5#^Be>V3WrXI-S9<hrzA(|Nr^_@5k?-
    zZ~y=IhyVNSXZ04}pKqV%t9oe5k~tY+Ar=Pzi2#Z}Sr{1@<Qa4rfB<AC18dL&^}dwM
    zX_r*ys<8N;e6mS?i^dP8jVmAd@U^}&$uv>xc~m$hYN?d{@xrG~CzZCfhpBIRC}Q>I
    kiQ?_Ai=3VZEOFW9fBwaksdwMK(Err)E%VcVRYeAC06w^MK>z>%
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif
    deleted file mode 100644
    index 6757c2c32b57d768f3c12c4ae99a28bc32c9cbd7..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 58
    zcmZ?wbhEHb<YC}qXkcX6uwldh|Nj+#vM_QnFf!;c00|xjP6h@h!JfpGjC*fB>i!bx
    N`t(%z_h<$NYXI&b5{m!;
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    deleted file mode 100644
    index 9dcb0e8b..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    +++ /dev/null
    @@ -1,148 +0,0 @@
    -/*******************************************************************************
    - * Copyright (c) 2009, 2024 Mountainminds GmbH & Co. KG and Contributors
    - * This program and the accompanying materials are made available under
    - * the terms of the Eclipse Public License 2.0 which is available at
    - * http://www.eclipse.org/legal/epl-2.0
    - *
    - * SPDX-License-Identifier: EPL-2.0
    - *
    - * Contributors:
    - *    Marc R. Hoffmann - initial API and implementation
    - *
    - *******************************************************************************/
    -
    -(function () {
    -
    -  /**
    -   * Sets the initial sorting derived from the hash.
    -   *
    -   * @param linkelementids
    -   *          list of element ids to search for links to add sort inidcator
    -   *          hash links
    -   */
    -  function initialSort(linkelementids) {
    -    window.linkelementids = linkelementids;
    -    var hash = window.location.hash;
    -    if (hash) {
    -      var m = hash.match(/up-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, true);
    -        }
    -        return;
    -      }
    -      var m = hash.match(/dn-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, false);
    -        }
    -        return
    -      }
    -    }
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header dependening on the current sort state.
    -   */
    -  function toggleSort(header) {
    -    var sortup = header.className.indexOf('down ') == 0;
    -    sortColumn(header, sortup);
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header in the given direction.
    -   */
    -  function sortColumn(header, sortup) {
    -    var table = header.parentNode.parentNode.parentNode;
    -    var body = table.tBodies[0];
    -    var colidx = getNodePosition(header);
    -
    -    resetSortedStyle(table);
    -
    -    var rows = body.rows;
    -    var sortedrows = [];
    -    for (var i = 0; i < rows.length; i++) {
    -      r = rows[i];
    -      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    -    }
    -
    -    var hash;
    -
    -    if (sortup) {
    -      for (var i = sortedrows.length - 1; i >= 0; i--) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'up ' + header.className;
    -      hash = 'up-' + header.id;
    -    } else {
    -      for (var i = 0; i < sortedrows.length; i++) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'down ' + header.className;
    -      hash = 'dn-' + header.id;
    -    }
    -
    -    setHash(hash);
    -  }
    -
    -  /**
    -   * Adds the sort indicator as a hash to the document URL and all links.
    -   */
    -  function setHash(hash) {
    -    window.document.location.hash = hash;
    -    ids = window.linkelementids;
    -    for (var i = 0; i < ids.length; i++) {
    -        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    -    }
    -  }
    -
    -  /**
    -   * Extend all links within the given tag with the given hash.
    -   */
    -  function setHashOnAllLinks(tag, hash) {
    -    links = tag.getElementsByTagName("a");
    -    for (var i = 0; i < links.length; i++) {
    -        var a = links[i];
    -        var href = a.href;
    -        var hashpos = href.indexOf("#");
    -        if (hashpos != -1) {
    -            href = href.substring(0, hashpos);
    -        }
    -        a.href = href + "#" + hash;
    -    }
    -  }
    -
    -  /**
    -   * Calculates the position of a element within its parent.
    -   */
    -  function getNodePosition(element) {
    -    var pos = -1;
    -    while (element) {
    -      element = element.previousSibling;
    -      pos++;
    -    }
    -    return pos;
    -  }
    -
    -  /**
    -   * Remove the sorting indicator style from all headers.
    -   */
    -  function resetSortedStyle(table) {
    -    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    -      if (c.className) {
    -        if (c.className.indexOf('down ') == 0) {
    -          c.className = c.className.slice(5);
    -        }
    -        if (c.className.indexOf('up ') == 0) {
    -          c.className = c.className.slice(3);
    -        }
    -      }
    -    }
    -  }
    -
    -  window['initialSort'] = initialSort;
    -  window['toggleSort'] = toggleSort;
    -
    -})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif
    deleted file mode 100644
    index b226e41c5276581db33d71525298ef572cc5d7ce..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 354
    zcmZ?wbhEHb6krfwxXQrr`Rnf=KmWY@^y|~t-#>r-`SJ62+pK*(^ACOa@_X{KW3$$r
    zUbOlAiXE5N?74dH#gDtszu$lH{mGl3&)@xg`{~!`Z@=#VMPB~6_u~7*S3h2T`1$R}
    z?`Q9Re)#(P)3@JWfBgRb^LKTLe^s%6bxA;7sb4jaQ5?`-<<ng5TVLWgvEHM%)~l!1
    zYi_IS^d`3r{dQ}59F})EE$?<()ZzT#ME{lvwpTV~T-lU)Yj4ffO_~4y|7XAeia%Kx
    z85k@XbU-p7KQXY?ADC0%p(B)eLgkXi62W-^(!DQ#v2a~Gz-z9%&!+3h!38t#X02Ds
    zad;WPFvUVOY)YY2k84HG1kp%gVW!3wVI5ap$%?8ZHc4GqO=+PiQzvV>Y72H(vk7Xs
    us!1$fvP8{QU92ZrK%7tARasP&f6JDw8m_8J3W|I7DyXXX9C3DJum%7=h^`F)
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif
    deleted file mode 100644
    index 58ed21660ec467736a4d2af17d91341f7cfb556c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ=;nroA^G
    Ub$^Kz-Nct)ygK&ScM%3_0PmU?SpWb4
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html b/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    deleted file mode 100644
    index 6da4b6ca..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">pop-os-7995988c</span></td><td>May 2, 2025, 1:59:00 PM</td><td>May 2, 2025, 1:59:00 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>50e0945fec76b333</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BaseProviderFactory</span></td><td><code>da939a0152866a4b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BiProperty</span></td><td><code>ed0281592f3976b4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Command</span></td><td><code>52d7b732759793ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Constants</span></td><td><code>8f58b0da27218c74</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.DumpErrorSingleton</span></td><td><code>ea25742803c9e73f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkedProcessEventType</span></td><td><code>4f32ae2d4e670365</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingReporterFactory</span></td><td><code>be06f83accc5a8aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingRunListener</span></td><td><code>c34d0a9f28f66585</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.MasterProcessCommand</span></td><td><code>fc8c116a509256d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Shutdown</span></td><td><code>47a37ed2a684ef1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.cli.CommandLineOption</span></td><td><code>5825f848ee2abcd7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.provider.AbstractProvider</span></td><td><code>0fea65ed91d7c12a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture</span></td><td><code>7ee3451cf95e2f70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>804935f758ebaea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>a81300d2d50decb6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ReporterConfiguration</span></td><td><code>bf4075c0385296c2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.RunMode</span></td><td><code>70edc0a9dea60143</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder</span></td><td><code>c6f3b2781f9ac881</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.BufferedStream</span></td><td><code>11f69a75bc1c7211</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento</span></td><td><code>e504a9e8cfc028af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Segment</span></td><td><code>773004ac6cd115ef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.StreamReadStatus</span></td><td><code>8d5ee1d510b5c935</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamEncoder</span></td><td><code>9547668418a858ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.SegmentType</span></td><td><code>77b0d78ed3ddd126</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.suite.RunResult</span></td><td><code>0eef4ae883b6fcaa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.DirectoryScannerParameters</span></td><td><code>529e83b831c47f72</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.IncludedExcludedPatterns</span></td><td><code>e12220ce508068df</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest</span></td><td><code>119a5faa0ae08a91</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.ClassMatcher</span></td><td><code>cb9dd1b6069a872b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.MethodMatcher</span></td><td><code>1d5196f3dfcebd52</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.Type</span></td><td><code>6f46eedd1917ca66</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.RunOrderParameters</span></td><td><code>f74f6b3eb9f1a132</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestArtifactInfo</span></td><td><code>6d162cddde2db959</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestListResolver</span></td><td><code>0f4645f0d7fd02c8</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestRequest</span></td><td><code>1cb2946d8f0dc9e4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.CloseableIterator</span></td><td><code>01846c357efacb7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultRunOrderCalculator</span></td><td><code>21a42ec0f6d63b8e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultScanResult</span></td><td><code>01695a339c66ab8d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.ReflectionUtils</span></td><td><code>7f9a430ae144c985</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.RunOrder</span></td><td><code>93376844e6d709d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun</span></td><td><code>db4e8195893ece6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun.ClassesIterator</span></td><td><code>543f26bfbdd04ce0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel</span></td><td><code>6826ce793980b64e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel</span></td><td><code>484afcc5593fbc9a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels</span></td><td><code>eb60281181a1dc33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.3</span></td><td><code>605144c3f67338aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.4</span></td><td><code>4834cf9402eabd28</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory</span></td><td><code>b2161e778265b95d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>e3fb668fa8792230</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DumpFileUtils</span></td><td><code>9cc0f89ffb46ba32</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>f8b4034fe9c934d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>d2b4a565d2c195cc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>c511fbfeb1f35c23</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>d05af49602124353</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>d14c58928ac6aa7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>8bc1181d0c5af474</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>72a8e2906ddc1c93</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>f6a6b02be2fb0964</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>c8ce6ed3be8ec9bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>68f2dae15ae26cc2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>fc217f2c1d87c099</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>2afb302f7c81f991</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>850ef2748b5ef5e6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>9577114e02a5bdef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.8</span></td><td><code>3c8febd047cd2b0c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>c83e3af27d5d3c47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedNodeArg</span></td><td><code>9dbb0ff22dfc1303</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>f83a9169197e13b1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessCheckerType</span></td><td><code>e554be35191ff5a7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>1e4e30276db2e62e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>ec2cd1e39ec4278e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>70176a3dd903d57a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>a843c08e9b5c79ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>355d20d53741b604</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory</span></td><td><code>67a1c051e3809086</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.1</span></td><td><code>cc936f6c85f9235a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.2</span></td><td><code>a1fa70e4af42c555</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.CommandChannelDecoder</span></td><td><code>6684e6bad0b7c71e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder</span></td><td><code>b69d9287bf010b1a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory</span></td><td><code>3b29862697f79d34</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory</span></td><td><code>8c14c673718fba9e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder</span></td><td><code>a23a4082e2bbd1ed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder.1</span></td><td><code>950700970edca54a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.EventEncoder</span></td><td><code>7c894cb22c8c16ca</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>958f7eb4311b3c2f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.LazyLauncher</span></td><td><code>a3841276826f155c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>0d7041faa0298e70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>db2b13639af3176e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassMethodIndexer</span></td><td><code>0e8f3008aec84fcb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.JavaVersion</span></td><td><code>a902b52c460c0348</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.StringUtils</span></td><td><code>4628d7808116e372</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemProperties</span></td><td><code>6b2fea785d2a2915</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemUtils</span></td><td><code>2518da556699ab1e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.function.Suppliers</span></td><td><code>6cb739fdbd96d7c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.math.NumberUtils</span></td><td><code>99f301ade68669b7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.StringUtils</span></td><td><code>abd8480c7152bf46</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils</span></td><td><code>011b23cd829ec86c</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>35e14124a607c6e0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>f54a3d73ed88c765</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>e2ae6d11698760d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>7e7fdcd1b43926e2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>3264494f5452162d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>bab380425dca8d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>518e1c643c30f164</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>92d1cbb782871d54</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>4b5e361d03d8e2d8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>95abf612d36312bc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>2747cc3e148c57d9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>01a66e5fdf0989e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>dbd6c4e35e0c9807</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>8192a76b48a09183</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>0493a46e2481b698</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>943e016148cf5f16</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>1c057f4243f10c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>340dbe384622c6a6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>373ab803cd4c3f71</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>5b959cc55c1f4f91</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>4134835721917de5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>cb8d6d2ffc57432f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>671448bb3682a8b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>53d31c5fa4778cc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>db07bccfb8a7df73</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>8a0a6571eef022fb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>8974ffb77e1cf465</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>50163587b45842fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>b39a5e63227384a5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>0766343b70481496</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.AutoCloseExtension</span></td><td><code>b0c206c116575b65</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>ae3c30ff8f7ce050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>2445286ad5728ba3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry.Entry</span></td><td><code>2c27256a5e9eeb22</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>134b5213d4cb80ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>797b378613d1c2c3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1977e7bd25ea66b8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>24002b8886de1936</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>62b73ea4d52632c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>de05466420699f92</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>d1970dd64ce22fa4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>2135634bf7e7ad88</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Success</span></td><td><code>88f304668c6ff14e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>7b57f78fc724ac54</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>835c9a026ac4df32</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>1da637c10cbda39c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>41a8b61339cf4862</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>484cfeb1dc3b6e93</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>23726102aeb1c0ca</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>6cb29bed5c13bb1d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.LruCache</span></td><td><code>fd8ff40dff05b112</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>99362b29a037afdc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>f1c34b50fa11302d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>ecf76570811abc50</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>372dfca6fa74c1ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>2ffa834710d16849</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>cecade1862d00032</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>ed62b01b8b763511</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>22e0c8566a0701f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>73f93afa543ca74a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>83d3937d6c2e4880</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>c8d2fba4bb555492</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>1b4753bc794e8388</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>02b8934961bdea6f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>22866b13273482bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a5f736d88185f693</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>8530bdf90ae8fa6b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>29479a0ae9db2840</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>9e54a6b249ea167a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>a5ee26b408b26ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>03b0ccd7b69c9fc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>455c5b5eb27d1f81</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a6b2f6753eef3ff0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8b2cda0d30b056d5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>17948dfe4c8d10c0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>4ba3237c7e6b18d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>fde8e703faa64574</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>4937cdb1a041a120</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>151f6fae99911199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>0ad8786b2f016b1a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>29666059b7fb2614</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1b0484c56b030686</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>458b4a4e46b6b868</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>3c16d4dff276f57a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>bd8402e1232e1a40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ba500d6ba9a79953</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>fa0dc5b65de1b0a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>705f9e9f579aeab0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>599b10c51fe35ea3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>a78f13d5e60b7d08</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>99cdeecddb4ca68b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>3f2ca9c1749a3d5a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>42796aad70055913</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>c8bf7d7bb2e19471</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>c4c004e32fc81aac</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>9048d6cd4a8e05d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>f68790b28827581e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c9f34e2fe83d5caa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>732ad1771b71d292</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>512f5438a4d56505</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>f0bfd18cc662d7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>a891c129fd2a01df</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>fb95e61bdaf5378c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>158ca2dfb82179f2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>c9df2add13bcb88f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>f767a377012b98ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>088911f06a0807a1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>d946f222ae757dc1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>694596eba9b0c85e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f2d1545415335fda</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>fef478667b042ad5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>f4faaefa1c9341ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>8321b18dbabfecb3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>04623991ddcc58da</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>e6360c7333fc842d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>95dfc056bdb1d2d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>b4cd1fb6724efdef</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>e040225d1f67e564</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>bcc6e4bee671ccad</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>aa7b08954aea78f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>61bd4de41739236f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>cdc9b7e4e1a576e0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>e4e806767310de9f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>67a547a561eee0f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>552f6c5833b8f8bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>6e65b7c784b87efc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>53cf37d963f8b58c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>b0288378227ce052</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>d91ab455a4c89f9b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>ce2dcedb783e6f56</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>452edacea5001e83</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>0736e6add61b3334</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>0d0d72b6e503c372</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>64729ce9bd729578</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>4b25c1714dc335ec</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>ba76828012d853d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>52b5b9d7814ff3b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.1</span></td><td><code>f83ebdedced2e399</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>886f3c723ddb9556</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>0d89b6f56eb4db06</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>fb76ce235ae5247b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>9833a129382c2ccc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>79c2095302f261bb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>7fe9373f303770d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>3840931f19c9d795</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>730ad6d2d5641536</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>08e28076c727f8e6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>771f386239bb3682</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>f6f65efcfd071c8e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>0f855b867dc3eac4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>aaf56096b3079d53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>0a9a375bd99ca30a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>408046ed24478736</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>bf2a372dcc5e43f7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>46b8848a888d4d59</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansApplicationListener</span></td><td><code>e038b74293c709e4</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansTestExecutionListener</span></td><td><code>89df4f04e39e1522</code></td></tr><tr><td><span class="el_class">org.springframework.util.Assert</span></td><td><code>2e1248d2d1526e84</code></td></tr><tr><td><span class="el_class">org.springframework.util.ClassUtils</span></td><td><code>ca4ab8b63048e08b</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap</span></td><td><code>722cd58749bce5da</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceManager</span></td><td><code>35eb6b9c1f2eedb5</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceType</span></td><td><code>5b823be241865c2f</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.Segment</span></td><td><code>5daee5d71f2a6fe2</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.csv b/sentrius-llm-core/target/site/jacoco/jacoco.csv
    deleted file mode 100644
    index 9a7bdce0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco.csv
    +++ /dev/null
    @@ -1,31 +0,0 @@
    -GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest,308,0,46,0,19,0,40,0,17,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilder,18,0,0,0,1,0,3,0,3,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest,210,0,36,0,7,0,35,0,17,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest,175,0,28,0,15,0,25,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response,401,0,70,0,13,0,60,0,25,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.Choice,196,0,38,0,5,0,32,0,13,0
    -sentrius-llm-core,io.sentrius.sso.genai,Message.MessageBuilder,36,0,0,0,1,0,6,0,6,0
    -sentrius-llm-core,io.sentrius.sso.genai,Message,171,0,30,0,7,0,28,0,13,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.Usage,155,0,30,0,4,0,26,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.ResponseBuilder,83,0,0,0,1,0,11,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest.BaseGenerativeRequestBuilder,38,0,0,0,1,0,6,0,6,0
    -sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest,135,0,22,0,6,0,22,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilder,151,0,0,0,1,0,14,0,14,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse.LLMResponseBuilder,55,0,2,0,1,0,8,0,7,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,Conversation,218,0,38,0,7,0,34,0,15,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest,203,0,34,0,6,0,31,0,14,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest,45,0,0,0,7,0,9,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest.ApiEndPointRequestBuilder,67,0,0,0,1,0,8,0,8,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest,525,0,86,0,14,0,72,0,29,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest.TwoPartyRequestBuilder,73,0,2,0,1,0,10,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule,85,0,14,0,5,0,16,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,Conversation.ConversationBuilder,58,0,2,0,1,0,8,0,7,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse,206,0,34,0,9,0,33,0,16,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule.ComplianceRuleBuilder,18,0,0,0,1,0,4,0,4,0
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.xml b/sentrius-llm-core/target/site/jacoco/jacoco.xml
    deleted file mode 100644
    index f6b1ccdb..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco.xml
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="sentrius-llm-core"><sessioninfo id="pop-os-7995988c" start="1746208740350" dump="1746208740807"/><package name="io/sentrius/sso/genai/model/endpoints"><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder" sourcefilename="ConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest" sourcefilename="ConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="73"><counter type="INSTRUCTION" missed="97" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$newMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="32"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;)V" line="32"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="31"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="308" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="40" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl" sourcefilename="ConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl;" line="32"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest;" line="32"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl" sourcefilename="ChatApiEndpointRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder" sourcefilename="ChatApiEndpointRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest" sourcefilename="RawConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="74"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$request" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="45"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRequest" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="48"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRequest" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="210" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="35" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl" sourcefilename="RawConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest" sourcefilename="ChatApiEndpointRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="65"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="175" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="25" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder" sourcefilename="RawConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="request" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ChatApiEndpointRequest.java"><line nr="30" mi="69" ci="0" mb="14" cb="0"/><line nr="31" mi="46" ci="0" mb="2" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="65" mi="4" ci="0" mb="0" cb="0"/><line nr="66" mi="13" ci="0" mb="4" cb="0"/><line nr="67" mi="10" ci="0" mb="0" cb="0"/><line nr="68" mi="8" ci="0" mb="4" cb="0"/><line nr="69" mi="10" ci="0" mb="0" cb="0"/><line nr="71" mi="10" ci="0" mb="0" cb="0"/><line nr="72" mi="6" ci="0" mb="2" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="4" ci="0" mb="2" cb="0"/><line nr="76" mi="6" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="200" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="30" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="RawConversationRequest.java"><line nr="30" mi="145" ci="0" mb="30" cb="0"/><line nr="31" mi="97" ci="0" mb="6" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="48" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="259" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="ConversationRequest.java"><line nr="31" mi="145" ci="0" mb="30" cb="0"/><line nr="32" mi="97" ci="0" mb="6" cb="0"/><line nr="38" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="2" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="9" ci="0" mb="0" cb="0"/><line nr="73" mi="4" ci="0" mb="0" cb="0"/><line nr="74" mi="10" ci="0" mb="0" cb="0"/><line nr="75" mi="11" ci="0" mb="2" cb="0"/><line nr="76" mi="11" ci="0" mb="0" cb="0"/><line nr="77" mi="1" ci="0" mb="0" cb="0"/><line nr="78" mi="13" ci="0" mb="0" cb="0"/><line nr="79" mi="13" ci="0" mb="4" cb="0"/><line nr="80" mi="10" ci="0" mb="0" cb="0"/><line nr="81" mi="6" ci="0" mb="2" cb="0"/><line nr="82" mi="5" ci="0" mb="0" cb="0"/><line nr="84" mi="4" ci="0" mb="2" cb="0"/><line nr="85" mi="6" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="357" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="47" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="816" covered="0"/><counter type="BRANCH" missed="110" covered="0"/><counter type="LINE" missed="41" covered="0"/><counter type="COMPLEXITY" missed="119" covered="0"/><counter type="METHOD" missed="64" covered="0"/><counter type="CLASS" missed="9" covered="0"/></package><package name="io/sentrius/sso/genai"><class name="io/sentrius/sso/genai/Response" sourcefilename="Response.java"><method name="concatenateResponses" desc="()Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getId" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getObject" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreated" desc="()Ljava/lang/Long;" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChoices" desc="()Ljava/util/List;" line="36"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUsage" desc="()Lio/sentrius/sso/genai/Response$Usage;" line="39"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getServiceTier" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemFingerprint" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setId" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setObject" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreated" desc="(Ljava/lang/Long;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChoices" desc="(Ljava/util/List;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUsage" desc="(Lio/sentrius/sso/genai/Response$Usage;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setServiceTier" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemFingerprint" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="157" covered="0"/><counter type="BRANCH" missed="54" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="17"><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lio/sentrius/sso/genai/Response$Usage;Ljava/lang/String;Ljava/lang/String;)V" line="20"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$concatenateResponses$0" desc="(Lio/sentrius/sso/genai/Response$Choice;)Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="401" covered="0"/><counter type="BRANCH" missed="70" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="60" covered="0"/><counter type="METHOD" missed="25" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Choice" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getIndex" desc="()Ljava/lang/Integer;" line="53"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessage" desc="()Lio/sentrius/sso/genai/Message;" line="56"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFinishReason" desc="()Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogprobs" desc="()Ljava/lang/Integer;" line="62"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setIndex" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessage" desc="(Lio/sentrius/sso/genai/Message;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFinishReason" desc="(Ljava/lang/String;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogprobs" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="49"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="49"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="32" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message$MessageBuilder" sourcefilename="Message.java"><method name="&lt;init&gt;" desc="()V" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="refusal" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Message;" line="33"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message" sourcefilename="Message.java"><method name="builder" desc="()Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="43"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRefusal" desc="()Ljava/lang/String;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRefusal" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="32"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="35"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="171" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Usage" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptTokens" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCompletionTokens" desc="()Ljava/lang/Integer;" line="78"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTotalTokens" desc="()Ljava/lang/Integer;" line="81"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPromptTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCompletionTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTotalTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="70"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="70"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="155" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="26" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$ResponseBuilder" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="id" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="object" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="created" desc="(Ljava/lang/Long;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="choices" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="usage" desc="(Lio/sentrius/sso/genai/Response$Usage;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="serviceTier" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemFingerprint" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Response;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="83" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Message.java"><line nr="32" mi="143" ci="0" mb="30" cb="0"/><line nr="33" mi="40" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="12" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><line nr="43" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="207" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="19" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Response.java"><line nr="17" mi="330" ci="0" mb="70" cb="0"/><line nr="18" mi="87" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="27" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="184" ci="0" mb="38" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="3" ci="0" mb="0" cb="0"/><line nr="70" mi="146" ci="0" mb="30" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="93" mi="13" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="835" covered="0"/><counter type="BRANCH" missed="138" covered="0"/><counter type="LINE" missed="22" covered="0"/><counter type="COMPLEXITY" missed="129" covered="0"/><counter type="METHOD" missed="60" covered="0"/><counter type="CLASS" missed="4" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1042" covered="0"/><counter type="BRANCH" missed="168" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="163" covered="0"/><counter type="METHOD" missed="79" covered="0"/><counter type="CLASS" missed="6" covered="0"/></package><package name="io/sentrius/sso/genai/api"><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="()V" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="24"><counter type="INSTRUCTION" missed="34" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="27"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="135" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="22" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="BaseGenerativeRequest.java"><line nr="24" mi="106" ci="0" mb="22" cb="0"/><line nr="25" mi="49" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="9" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="io/sentrius/sso/genai/model"><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/LLMRequest;Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="51" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="messages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="topP" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="n" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stream" desc="(Ljava/lang/Boolean;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stop" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="presencePenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="frequencyPenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="logitBias" desc="(Ljava/util/Map;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="151" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder" sourcefilename="LLMResponse.java"><method name="&lt;init&gt;" desc="()V" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessage" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="alert" desc="(Z)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="13"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="13"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation" sourcefilename="Conversation.java"><method name="$default$terminalMessages" desc="()Ljava/util/List;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Lio/sentrius/sso/genai/model/LLMResponse;Ljava/util/List;Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="12"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousMessages" desc="()Ljava/util/List;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewUserMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessages" desc="()Ljava/util/List;" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemConfines" desc="()Ljava/lang/String;" line="23"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPreviousMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemConfines" desc="(Ljava/lang/String;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="218" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="15" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest" sourcefilename="ApiEndPointRequest.java"><method name="$default$maxTokens" desc="()I" line="12"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="26" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()I" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUserInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(I)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="203" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="31" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl" sourcefilename="LLMRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl;" line="26"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="26"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest" sourcefilename="TwoPartyRequest.java"><method name="$default$systemInput" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="10"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getWhatSystemIsDoing" desc="()Ljava/lang/String;" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserObjective" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="16"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousPrompt" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptResponse" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder" sourcefilename="ApiEndPointRequest.java"><method name="&lt;init&gt;" desc="()V" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(I)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="67" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="44" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toBuilder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessages" desc="()Ljava/util/List;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="51"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTopP" desc="()Ljava/lang/Float;" line="65"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getN" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStream" desc="()Ljava/lang/Boolean;" line="87"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStop" desc="()Ljava/util/List;" line="97"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()Ljava/lang/Integer;" line="108"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPresencePenalty" desc="()Ljava/lang/Float;" line="122"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFrequencyPenalty" desc="()Ljava/lang/Float;" line="136"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogitBias" desc="()Ljava/util/Map;" line="151"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessages" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTopP" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setN" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStream" desc="(Ljava/lang/Boolean;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStop" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPresencePenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFrequencyPenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogitBias" desc="(Ljava/util/Map;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="191" covered="0"/><counter type="BRANCH" missed="66" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="25"><counter type="INSTRUCTION" missed="146" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="25" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/util/Map;)V" line="28"><counter type="INSTRUCTION" missed="33" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="525" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="72" covered="0"/><counter type="METHOD" missed="29" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder" sourcefilename="TwoPartyRequest.java"><method name="&lt;init&gt;" desc="()V" line="6"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="whatSystemIsDoing" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userObjective" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousPrompt" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="promptResponse" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest;" line="6"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="73" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule" sourcefilename="ComplianceRule.java"><method name="builder" desc="()Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRule" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRule" desc="(Ljava/lang/String;)V" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="21"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="23"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="85" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation$ConversationBuilder" sourcefilename="Conversation.java"><method name="&lt;init&gt;" desc="()V" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemConfines" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/Conversation;" line="11"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="58" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse" sourcefilename="LLMResponse.java"><method name="$default$alert" desc="()Z" line="13"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessage" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isAlert" desc="()Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="59" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessage" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAlert" desc="(Z)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V" line="14"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="15"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="206" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="33" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder" sourcefilename="ComplianceRule.java"><method name="&lt;init&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="rule" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/ComplianceRule;" line="22"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="LLMRequest.java"><line nr="25" mi="405" ci="0" mb="86" cb="0"/><line nr="26" mi="212" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="33" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="65" mi="3" ci="0" mb="0" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="3" ci="0" mb="0" cb="0"/><line nr="108" mi="3" ci="0" mb="0" cb="0"/><line nr="122" mi="3" ci="0" mb="0" cb="0"/><line nr="136" mi="3" ci="0" mb="0" cb="0"/><line nr="151" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="683" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="88" covered="0"/><counter type="METHOD" missed="45" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="LLMResponse.java"><line nr="11" mi="151" ci="0" mb="34" cb="0"/><line nr="12" mi="16" ci="0" mb="0" cb="0"/><line nr="13" mi="61" ci="0" mb="2" cb="0"/><line nr="14" mi="15" ci="0" mb="0" cb="0"/><line nr="15" mi="6" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="261" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="41" covered="0"/><counter type="METHOD" missed="23" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ComplianceRule.java"><line nr="21" mi="69" ci="0" mb="14" cb="0"/><line nr="22" mi="22" ci="0" mb="0" cb="0"/><line nr="23" mi="6" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="103" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="20" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="TwoPartyRequest.java"><line nr="6" mi="100" ci="0" mb="2" cb="0"/><line nr="10" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="18" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Conversation.java"><line nr="11" mi="81" ci="0" mb="2" cb="0"/><line nr="12" mi="167" ci="0" mb="38" cb="0"/><line nr="14" mi="16" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="276" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ApiEndPointRequest.java"><line nr="11" mi="163" ci="0" mb="32" cb="0"/><line nr="12" mi="95" ci="0" mb="2" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="270" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="39" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1711" covered="0"/><counter type="BRANCH" missed="212" covered="0"/><counter type="LINE" missed="48" covered="0"/><counter type="COMPLEXITY" missed="249" covered="0"/><counter type="METHOD" missed="143" covered="0"/><counter type="CLASS" missed="13" covered="0"/></package><counter type="INSTRUCTION" missed="3742" covered="0"/><counter type="BRANCH" missed="512" covered="0"/><counter type="LINE" missed="124" covered="0"/><counter type="COMPLEXITY" missed="559" covered="0"/><counter type="METHOD" missed="303" covered="0"/><counter type="CLASS" missed="30" covered="0"/></report>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/jacoco.exec b/sentrius-llm-dataplane/target/jacoco.exec
    deleted file mode 100644
    index b7b846b922d681bb4fd5d40ea2faea9a728ba771..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 20649
    zcmcJ13tUuH*Zv*`93&7n<_#}+nY^NdqN0V|K`;~oyky?SnFEXrGvhfkC}}cyuT)aA
    zUd^;VuUYx38CpqVR%&^}UbD0mHLWbuG!?J&t$l8s8O|K=|NY<j{c3Pv_Uyg(TF-jc
    zv)3L~RaJ;41O?lyw%%5zcfZI;LtlO0z6hz_Sl0E2Ke^}Ahw+^6mcL}~ljcM{t#rO_
    zio;^E>uhGdJ<m!P=_pIS$wKK;rc(xo-DI_7Q&SxjWA_Wf6>l$Fuvhg&7#c+0rnl)0
    z1(dExUrbqajDx1~Of;pNY_-}cTF2N-x)k_@J*hx%u~6m|i@|E7=+{-@h<!LwRWL#!
    z?9X_G2EEzrrwzjzGp?Pc^hLTPYf+KjVoavkQMG+ry+36nuAJ+0zDu95cr?`esu+jO
    zW~J>qqlqzCiz&K9mqVE;gWXDJQ;gLNuV{zs?S=wvZi$U*5`(+YdY`S^tG+>zGGiKG
    z7FG+R12dU*NoGC6*!1>-90OS~y<Vl_mg@HZX887k*LE!IHl_nglo^q?y)erH6GiK3
    zLxIVlH|s`#0drv^a`jAMlGS3TrrR|=@QU(TJNvec(V-#U_k`VGaes%6gze7acRP!=
    z7MoyW=BmmU{J2+Dv$t!lOBddxrm7FZ`pV(Iv>M#SDmzoN-eH05r*#G^?0Pa7F<);t
    zS@Kg@?-89R!^GGrutt+McyGL;YEbqYU!bSG&r}a?LsRSyWwTEd4NJ{4<vVB?-D**5
    zaHj!=XYc&_;X<U7v7fLbc`!Nh_qtrVM4PHNnZZ3<z=q%lok}CxFQ{6{y<5?RQ>}C%
    zWlUuKSsUe}!qL4SY`kaRcLnuQ_+-`>a_lsiVkEc)lUx0S-~fR*VRJ?E!N<}jH`1Fj
    zta{iQc9`&Z7zHQvpEJ7C(w8nFn41u{QyexEi8$VM>KxlfQ$}zcJH_bInJkD(i`}F*
    z6AvQZqlXx$n{Gh(jAqZV-J8xa(p_%cn5;8WMZ~eF;gr3=YV=X#&hrbKck4g95)H1K
    zqUd`39Nj_=3`Q`9ahUDe9J}7`VEiB8AH#NzTz_!wTe73LyIwt4OEBtfV34NIsc>e$
    zt-VL&t10vhnT-5y6PM#bi`#Js2?ND2EP4?XNQ@yHSmSc3aZP;Z@!|QGj3`=WaqiPf
    zrt<W#qzpbxa$rPQXNzNZL-6x&g?tr$al$&3A~T8-0;EacfEb^Pwa~pz6&`RtLAz1&
    zb&b?u!Y+~(0$5NMG6R54i_t`Eo>HtgJJ_h=tRJjL*k||hbbaL&E9&QcYTkA)Ff0(O
    z+IBfId(A;Jit%o6ra%v#$$}=MGnh@foC1g4Xq{$Bvsw#TXKxycu<qWRp&``;>9VF4
    z!W?|ZtQ%>eAq@a>>nEG3l<5Y_Mpno8`r}rwFMgD<IHU?Cd0&kHwML3D&?Xxs0$svn
    z#!l-Ec4FdW@#XF=63DpQ(8IA$E*kwKhhkjn6bxN21ci|@X^3M$gi$8O1fLLDUJ64w
    zap~{TagousYSdR|e(vrh;Al3L4~R;av~;<`@zHP2ww`<(^+P>m-p@}4GNsK5pGu{g
    z%n%hVRVW6l=9&l0y7%o2)ZhCq5vO6zn`E{!6ftc&yj>5oZ&`?1<3s0q{@i@e?sDa+
    za}Js;<XX<p0$TXsf*YsLkG)|2;&EZPFCa{6?v&)BUk+8Fgt}FG?0~ST!#HfrEugK_
    z$P$vQW-i&M!uDF}5+5JjZpZ6I<w1vj;TGZ@BJAJ{3}x35r{Eb;$mJxw<<_J(KGM9M
    zgJSC@Bf_1yg=RhrGT^KxU{mSFTyU^L@CadFdj>c4N4^NFw;euJv3l(nO3X|cLz_e8
    z7Xhk283%s3;m*Jx%I4i(j=IZCg!ct^hwi394mt*JPO4h+*0_=n(LnFcz~f_12_*9(
    zz(*TJ+e?P)E&6<lj(DW60;YpIt?yHH`}=2>D22Z0R6IInJ1lHyB<alt2c!`QzG<6O
    z@jm{z?a-V(B_rl6L|wfvhx2I8shaPDDSR_*cSU4c&8w&jc@twJA(uz%i>PUk$^~x*
    zmd1k23g1}?@pI6FxlUgQ#_n=t4PN*Dxb7k$Xi9nGkN376oPeTa<|*#KM-~t^9oP(B
    zHE~No%_~bez-`$5V6}v$8p&23S0QI~mnh9ZHOz7|{)U_D@zu+lfi0e$FtEM)hYLS&
    zsZSoKL~PUXfx^eD_<G2F7oHYAX!79C2F^zDN-JbpU=BqWn+z03TgVK#@dV7$#NoES
    zbH6H7H<^#}Wd`HDR0!TWCc{sw4o295gf|7P<((-VXe|&N(~E3Q;~8?(y(&B}vhr@g
    zZ}$pOZ|@)K9vUqB5B;E4jVC>qy#F>cXp2&Gh+b_1Qchcds`Et;qm63P9w&cf4Bj&5
    zA3GW#^YIP2h_<gvg-cf@1)NVlG_N5iVevYf$|D#DDUfyZME_<^wNE@kKG?kDt*hgj
    zf7YG@U5~2IEv51}DU9*lz%iU}p%R2`t)>k5QGN17ZaMNEE8vA)Pum?fHwND(PF;oY
    z=S^y#KK#|@EssIWAeM!afJbi#pR|le+kbk-vRvxrBK*29iIis}01LA8cCt$xc(5jF
    zdk+d@e0upRRrdTT&ngw6WT*MHCF&VUD4zKF^mt-->DdSs)}meu=bvpeP#Q5F3962c
    z5yunOm8B<O1+x=eyNL>?^*{Ey&y~vV|BnvXKj6L(&N&wSqoMZWMY0<&dLSFZT&Quz
    zfm+zrZx#x`&#vn-b5>#N@3|V&!*M*LRs;_nAGYEPkh@d*oIbh%b(qtLnQ(LiT#(HW
    zP!p_p|90qihR{6<d0#@}+z>5AV7~$?KqdI{xlG@SYg%+hW)ha3$%5>%4oCtJWJ;%Z
    z*sTV>45f608-g?HGHsM47wTTvF}j4U7P1_ZA=5)qoJi>{3=4pQh$28f*x*KWZf=XH
    ziKmsRlkB@SQFx@zJSJ*)Z6%6RLKDeeda$oifRIL#X?tG_M}d$iKK;m<IR2Z(nNpJM
    z;jP@-VLu&3Zm}%-E4&K)8ypv_Ad+U4{#3nlaMugcpp+jm2^1tSCBIj0V~0hBfUTIj
    zPv6Up*)&YnR=nqNZdR`hY!ZQ&M;9btKGpO)u3(pkDiOQ|F4AjOFjC#r;AfxOH+A^_
    z0e?!PScDe$pb^r$+X6)6FoT01Oh>3`jSA0vIb%n}qL$w%5pNz}faDXQi}fpBJkt!t
    zD~`LaI44$xp$=sCVea`3J#94UE#zliLRPw#FQFge7K{Gp-0n^#H&C{Wqj&@@1O7ni
    z2s(m-WuT1GLNkZ_PRkdIlo9;LK{Z{d!hc3oUtIHLw<Suz#IHrbNjLkn_}0}LzaFd7
    zryZNvQi=y2u2M$>IE^9IWPxJJzYLFgsy6Mfo_kJl)XV$sk`fcDAfgv$fasCQmWLrO
    z7hY(Mp@*DVF$(3%Sm?2KSSxO}uvBe7KQ%VetADSgS4@|!VU<2Wo9Hl^VU_KG*$3j<
    z*vhL%Ph4F2UzulLjT)~%^7-QL7MG8fC9!T%CW488XDmON(`ozSPxt=$krbJ|go;>>
    zdWqV$AK~u4c>nN#wcT%1^EktK-&)?kh;BpZfx{w93(8!Cr$zdHV6JX)jZ?O~kHUwV
    zP^{;$ktayYe2o<t7likG{mbW<ryl-Ls<C)kro8&2?W^{~bH=UmneyeiezL|AD2v&e
    z4<dZNE(4w^n&%flbOn`_d%d@Md;*B*IN*org*sJX7#b$y$R43y7f##`h&##`wF31B
    zg5u`--s(kPPd@cPcEKLwx=GbJFn2T50fxdLHNt=Ie>UqLj_fTBa?x(WisiWL2YxkW
    z;cDl7o_q>Vv=9H2)7tJPU$@!FOHS7wQVN|d{plJ0FSw_w1KhK-qrVT7ZNXS&8XL7b
    z@BPI}I4mXxelLlv55@saFCzHZo2n3m51zQc{<D#}%TPz}X6Kkxa1Fx!gFYXW+WG5^
    zQe!p%b#6)<B-p{+Vyjem{MJjS!h2fz6zfS|SX%<v8XPnY`T$e}6g(TKG(A%=TyGO}
    zgAzD_kvu?sxRY5J`^n$$_G^d(+kvzaF+|9jBK$D{yH!{-@bZV>w~gvAo3!0w&z<CH
    ziM+F{`rBQz7qrjibcBWqS0QLU8D1Ax5JJBA?azX5^nTD>jrx!+l7|2Zh)_my$dW+k
    z2hC}X+xe9yCjA}Qj5CJ(M1+!5$K@suoiB`dBW@9H-MVrqUWs1t?k0~_^TPI8Eke}`
    z+e}V^+7Z{lFWX(aX0`i=*Slq>ObLt>&TLqPnj=oEz-KA87E-jI3O~1`oiQfzZzIa6
    zo3e+m8dyH8OSdp~Jvmq)XFqQFUGxcfl_Q5?pnCe?qLvXqpY8q0^Gdvd#Gc?|ga{|l
    zc2gd(@pMa`RjtD7=7tu}wze3j6u#`@MU=_VzgQx$w9p?nsqwUJr<Q#8b9GnlBu3sb
    z$SnBWz-Iw+91!?07(b`W9kl)=<%h=9*+={=MPLMq1!^RvccWN!T;EFb8j4>lyz<Cj
    zN6utyd{wG6H|j$O?(*VX2Oa7kj-P6MdSu?p_d6)*2fQk8)?4zUbezz~7ROsus9DJK
    z=n<%0<gpiiD32#+Ap^#DJQ<x(;j1K^@}Wh{#&KAVK6YKedh4HeC|g<Bo-FBUmbgHr
    zyr32MX$i=v;9HE|JRIUyGZP2BTye{?^GuWf3RQ{%s^tGNzCOiY^KRqB95J~HyacxO
    z$J860w>n<hr%Vb3XRS8^OSpREO?rOU{jN_ohTAtb;R~EIXl+{@WJ|dBPLCxvrK4K+
    z0F!Vp{`~Et$~7bTS}aB=UXo<QAMveWLzt@z4^UF~7BGfHUY$hZiS1gkPzenNK<P1b
    zRlx6Oy2m#p?}-&6m&F51{Bil1ZKu0+T4YyB4`eR99|MxHXvg?A!#j_JSI{FKUgKbl
    zgIdvf-IJUL8RSrs6d)&dZlF%=TX9&ag5f_pkv)cn(<nGcA{r+}_l96B1(No{iq&6@
    z3(s6C6$Au3@=#Rg0&Zu*BLG=BC7JDA@N0`}cd9dgKh*z((!TQ(5)v=SX$5Y$-@L~{
    zg#Vb-9hbfPQ<M@y6T`AhrJigW+PzYZeV4DdXv-@8rNjfo^ecvmCuItDm15t?gO~n%
    zc+6?3g}iK)Sf12DGUQqzdV9s~#hd+o@z8a%PHdcetv%;)-jfG!D&c&yvj!-t8e3EU
    z`ngT3Z}J){ZiEELGjdk)XN76Mc6i0Ps!^5OPn?i#BvACewwvw%jEzm+bm7}t<4$St
    zi6&7>V1ysBd4a{D0e=*(4)1gIW0Xwt;N#Lzk(ctxs)-t3*jj{53nrbE9)Ec_^DzEQ
    z51coJ?KKI#c~^}ix;-^z!kRxiORFl6H`W2laEF~cE9TF{g#!w0iUp)RwHj}k;lE<o
    zmFc%+Gn1lu`E!0PdunPFP+XIM^WUv{?xORx`RF-fDtVvb{e|>S3E?$d4>3xEsz6#2
    z_+thBUsj<m^goC1uejXy^sVScQW4MFel{rfq%L{H_pIRHE7aAcr}p)1$X9KA8<99~
    zK?m_y<9k70Rg6Es?HySmP082bEZ^*4OvMz500(WL+L!(Zh2twv*}JO`{TkQMoOo*{
    zJBn;6G!4v(ElTZHOV~9MhT4?wQ%=&au2WDc8}^utJJk@>9a))XQ2g@nHiu5FkZnJ6
    zcbZIx9rz6e^}N0WX2tojn4bi=X?=bP!qHFfRv*cTn<|Y|56AWb@9CrqjYD<~4xabI
    z{FnA$`4XkcFjn`;ar#F(Im=>uDJ=Q2VA!J#o6B+an?c`aT+ppY-DE}<Se&#UEBIJA
    ze)pd3mwzXIH4^3ge~$)jKPVy>PdI-v<l{pF(6iphm(Y75+B~EmRtU-lvd)RB&<^;^
    zZ%vAskh5#0NlA<|cQbOEDki2(XyXIOVml}@W6$1nm6gs>&5y^oH*V{7;eJyi*Fd0%
    z3y_?Mh)E^{M>E2|92N@!v#f9wtb&8zsyk&^wb3&1T+^2?an_YB1M7T7Si48<3iYMX
    z5Hp(A+u+2X{R4^)g0qu8p=l?ovn_K`I5Dp*?k6xnRqSh2$fu*o`Gg;E{)V9&^nca-
    zBkehRd^2jZ3g8e<W5+444jYkLvAaNaS3D4=ZsDF(p_y+--0a%0-{w?2*wRpDXB^N`
    zL*x&ROHOh&5!MD(c)T<9s&?ptfwFR(=p<&bC!}sl8GN^x=rsZqFfC8VMq=}>!4E6n
    zIJJ+HkmP;Et&S7JE(h9P&Cor@K#g>D^0v0G77xI(ZH&CNz`3MdL)yN+aMn8P!B@}6
    z?OCN1v-LTh;9euF7MADH4$$AhUq{m>HVN}N?Md}HHC|m+yY_zSr~Q=HSN{_Tz=O=j
    z(UK%M(&8RCF5<m?_Ekg1DyiCn?&79i5{~o4Of^1u)bicuOAhT(at1!haGisREJ?qs
    za$UT*_mm52+~cbr`8f-!4pfrTdHiT}d|Dvt=&!;bt(suy%*@>&MPm<8uhVIG!sC%7
    zfO8YwN37b8gyU^rG}+g3^b3@<Hmx_R&<2<QXPPWY5v!|6R$X-Bl`DNJ%FBLUrDQjc
    z$p~)BlESQ(0~YKYllVxQ@9Ry2?=5$4JP|V>zqlvgY95GlzH2ve{j^2<A3p(-w8iOi
    zkP#mK_N)5d#uU43P<q7(Hhq%Wu<f#*h@ny8i}&-&H<xsd<SKFbkd$#*Jq3;9oDd|4
    z`=qEfy1fMb4eg(M<L0@emD!vvy$>&2D{yOP+u13)MW>JueCGQvFHQ*jmqw~Rcx+7_
    z7_n>j$O;|fj;o#cD}4Xa_M79nD8(rs80;WiLy%jQ=)Vp(e>S`Mf4+5oprEhT5in?x
    zpx`K;ErLXk?aX>Ce)P}uycxbd-HL|#*@SpQx{)+N=K&B7ajpHe697eP{A$GMpvY~b
    zPRbVYykpcEMMP%77nphMBoG1~C_HfInuDXJXjHdk6>xq`E`-GKgb;$3#P%Db_XSq2
    zTaA=D+}X-G!D6vO%e2s^vrgsTY)D|ORhS2KEyLt|@t0M;7j*~2K9Evf(Lf%)Uk?e1
    z-N==LtOG|n)cS?qbsap2H~iIgr~eMiyQs4a=i>(yx)cY_^oO$demFjKbA;}<A>+0*
    zri-NhENF@vtv7=_-4|431TA}b^U{4i9`;n7la_pqT2=ja(2he<Kr`IWn4X!N-LkjT
    zOdio;;8bs3(HX{-qHd1eAqvfo!w2`iG-Jp4*QYk79;>%j5e5^C#U{o|KcPX`|AMpl
    zK)2e<vR*23iuzr6LTTHi84g$#{lbr{*9D-_GMgq2AxBFRCc~APObdUH!YfG$?c$H{
    zj+Py!&89vX&xtMG5zAfqNv;owL3=ykP36r`UVh>wf7y~s$#K&>JLTC^4=e5O!Zm|-
    zB`!bE^cOTmj=K`r`akylBoL|v_b#Nu5x8vpe>C{;a;tgX-7aI5C=?Hzk1GOb`)V?A
    zb;g)wuYA2_hEi!P1!i(x$<2H5qgyImsJk+Ke9s;&ltyu*nQnc-CW=Y%Y2v!(imPoC
    zj*lGL^~?DU#Wk{ILUcOTZzZSOJPn3RL+|-~9FZERPHXhh#V~!beiRU0u>Ok#2c7Vr
    zkF$dc2$&lGb8qXtcFPl7NUIbA1o5)qASBi`1UXf$Q6ye@Q}yBH`KDcswnz~eRyV>?
    zG?~A?^E){SeB4KO?hSBat-{8WH#UE;GW>Pv>9GiQ?sgR7Q^+U+1OT0QC4idx*Y(c#
    zrQPZt2v?Wt+_Yk16H;b!oI+EIS4_hrd^S{G<C2toob#?GCCA$6K&T%VJ^3{=wfxgH
    zjTFOj;Pw`|T-X>ftRHV_ye4<!j`S-nU*sfc4}qS?4zel{ZMjlT%hmeOZ%A*x@LJJN
    z?UpMY5emWNR+;w=c;5$aZjMfz4EnQz<D2sKA;gg8Zo5GgLSr`t!jR2jPl5|fuw?BB
    zhuO@%!U+@5J+iI)oavos)?{<>;IS%qKS*KK(R6a;#&!I4=@5|^h;VRf%JowZeGWd(
    z0W9$)UWcZSsa(gbkrgDgUg?X%2=7rriVsASY?JUM-}inyR@MFA|EHdt;m}iQv0GcY
    zG<o>;?FkPaYT7M9=}IBXB|bacseltf12pD3pxX4NtF<^#im)cH|1-9<C*P1tydI&@
    z*b<C*3<d38&B`PFw;s&=R_QoL*lyB|%*9eVw6jg8=+JPWG-pPXt#~>1XpvIIDOMB2
    zd6`@*h!DMU0OO$Xk_q_!#7Sd|fhe;<TQyFB)bf7@%GdF+|GeQ7nv}yS^YZ>IM1yb>
    zb|~6^r;Kef!P%#F^>e(r+=U{@)a2hzRwfL=1yqM_2(ByP+p8RV+R>PE0q^exb&a%4
    z3W|ffn3w3tBV8~??$!Q&P8M8o_L@1n`+iwUH@3h^1{h+m4)M2q#V!XXpgqE0-`p`h
    zeAU4+rSmhgN~M{8p}GljGD0@=+S*Wdl4w%-wR_npM2!o&9xWN{tQeuhA4LBUkJSW&
    zcuFutNF<ofOE7^6YJ7QMAQSaqZf|K#<|WPW99S%1`2Mi~NV5;i{|R#WZ4Z^bizG<G
    zECI}*9i#`C@>SuyxtBjZzUx2-CEM}dLAVhwfAVwZyY-sJsc@TVzg9kVC2zM>46GN}
    zf(k-nh%}Xm+bDn>bl!jac6CLQRSSAG#ANLx4oNeV<Z2F_|BwJDH_0iwEn9@;KbZ!%
    zXg2SXmMb3fQpml$N+8M^XZ=!*9ZhSOaRRrj#4Bi9T%S5)?>{WTVq`CW_fMDxS1{|B
    zL7`oasd4SoOHFNNHQ%ljsr)`<*-XZy0?GhYnN!8(-73fg?BhDl{`iwqWtlg(%Qh*v
    zrz(N6xN%W&Pni1cwVGHQQ~t;Cp+|ZJBDPAFM+JVKZUkfyh(SktA3ZZY);dbIK6jrQ
    zdkzA3dWfeGQrId^6OV0ItKK`iQI(`*BNB%^+5<$B{uKYi_`xDPC2QHJY9-}F0)y^^
    zhr`6MA=e?qW{kd5en9&{uIvG@5Mr`jr2Yr--k#CD4^K$Cg9?=Lgj^*kY?K)F0?A~w
    zUVlZpf0{m2;oP{cdn=D;)F^#Zfe2o8$&CvoiV?1#1_b-y^PM{$&2ko;Q#v#uLkXdo
    zZh@0TBV}Yy6yce_1H{1Hs)aXw^A=hE9>KYh2cZ%SDeCCt>jZKf267n7ew_f*vwB+F
    zsVA1n;-yl7DxRbJh2i&qNDG{ry*ITHH4XtyMh7_z*v&}tGxT2}XDOWf@Q;2P_ohza
    z^#-4DV#$;bZGO);m(~U%^f$B=ZBC)d#u4ZzI{4yw&2HFVop9^&<HqJdh|Qk&BXu*&
    z?k;`Y_x2AXLL9!6ziyhU*S}n{J0gZQ$BjiV=4P(ts6QN$#I*d+xf{i|UX(qb@~}l6
    zXbX~{kVCj{5(#7wUNJOpZtKlsK2*wW#9w830e|}=!+>glBRa=)4!|$We&#~L{Bb%i
    zm&l&K0hD@c{}uZ#NMw?xxgfgYl6pVg7&L@KVOH5-bz%0X^?vcuE@LlgXGrCK(Qib9
    zvjn{!MDUz}zwHnM7iy6+PSXrO(_?<uH}AaNpChu0*iN`W27LF30q!F=+$z!ZrV6Ka
    zKjkcId68~JxbfYPb>X&MJYH%rpg??W#NXH(@i+g4KT%;i;^cz#J(o^%#mZy4(8Mn)
    zTuu3D72{8{f(qZ;v@)kLDxE^KuwerLXSD>YhT~ZmQ`+5~ptCiUDTRVcrhZm8!Do6k
    zH>|qZ%A%BWSj-naR><=_zvue*LGQTgQ}(=WaPdwhSdwJ!L=$wtu-D{4b~zaP^o^Is
    z#|-6!Wkq*(qbgZ|@;SgDjSe$>pUE=_Z`^U)5qmA}x@@HKxKw9hmV*kQ6js(A(6Qu;
    zra3-0^q<Mn2Kiv+nP*Ig*xR4qf7B`vzn1p>kzq^xzC)vA*n<Z+*3-6$dC6&l(7v8r
    zV$m0w4CG}_h_TY`)yOv#U&{S_K%4Meo0N*_$?SQnj_-%!nJ59Z;6NMxc5#vJ!RREN
    z6vG?Ow^`ebHrWfv%$OE$o(acg%Qh9Jy|Z+VG_!ae(9QNjLP%5dK~sfOch7xg;o{-X
    zOXUaA2gQx3qhJj8{V_TLLis*3k$wSaTBuzI=I);LKw9|JACd)PF8zthm$Wx!NQann
    zrKPnct#Nwvk?rp!yxUQF2|ygrW1s7sjvG2z=**PfDq>?h*A<uA@wz&apa-^1T(frc
    zsw>-M#T}22aC4=4tzlZW>78o=|DUJhXJ7cN`l^z^#k&rlaQR}AuOib7wa`Zs*m3S$
    zJSHS)U&exQpKwv{!4Ac3a!YPp4Fg1GYfPl8d}d9SRDksGm%8&!Fc>Mtjqq;n+j#<2
    z{<vgD^!(=4U+kAgtJe{7;hUI5b;3Znknr%uukLHzK5#621wq5tV0cq-O-8Y<;OVpH
    zIcvJ&l>>YAcqjVbKXJ;Gham)-OxP(zBYYbVzX&E~Y`n^^S+nH<xWkCZZbdsT_fg8a
    zb@5D)6Alvi&ZGVhCWg0z)nI4(fIDOU*t$-M7Z4CuND5j&Sg3xD0IgZTqV2$?K{R?=
    zuowQcc(yb2hnydztr?=%EA2S{4P}z5m8UhWT{HLKteV#+{#pD{lnev3nH_M~ukIW4
    zplV}p^AhzJ+=0l#+;zVvKso<c)Vn<fMMNByf=~m~lf)vqy%rpY@Z?>w>rZy=cSw3F
    z<K3}LMU>S6@XU)QF}$t(amu(CChT}Ayi8W-;lo!r1_rakp-8`9OW~GYTc7_07vu4~
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/index.html b/sentrius-llm-dataplane/target/site/jacoco/index.html
    deleted file mode 100644
    index 3f36e9fa..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>sentrius-llm-dataplane</title><script type="text/javascript" src="jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><span class="el_report">sentrius-llm-dataplane</span></div><h1>sentrius-llm-dataplane</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3,449 of 3,449</td><td class="ctr2">0%</td><td class="bar">340 of 340</td><td class="ctr2">0%</td><td class="ctr1">367</td><td class="ctr2">367</td><td class="ctr1">529</td><td class="ctr2">529</td><td class="ctr1">197</td><td class="ctr2">197</td><td class="ctr1">28</td><td class="ctr2">28</td></tr></tfoot><tbody><tr><td id="a3"><a href="io.sentrius.sso.genai/index.html" class="el_package">io.sentrius.sso.genai</a></td><td class="bar" id="b0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="1,795" alt="1,795"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="200" alt="200"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">234</td><td class="ctr2" id="g0">234</td><td class="ctr1" id="h1">157</td><td class="ctr2" id="i1">157</td><td class="ctr1" id="j0">134</td><td class="ctr2" id="k0">134</td><td class="ctr1" id="l0">19</td><td class="ctr2" id="m0">19</td></tr><tr><td id="a0"><a href="io.sentrius.sso.automation.auditing.rules/index.html" class="el_package">io.sentrius.sso.automation.auditing.rules</a></td><td class="bar" id="b1"><img src="jacoco-resources/redbar.gif" width="49" height="10" title="737" alt="737"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="jacoco-resources/redbar.gif" width="45" height="10" title="76" alt="76"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">63</td><td class="ctr2" id="g1">63</td><td class="ctr1" id="h0">167</td><td class="ctr2" id="i0">167</td><td class="ctr1" id="j1">25</td><td class="ctr2" id="k1">25</td><td class="ctr1" id="l2">2</td><td class="ctr2" id="m2">2</td></tr><tr><td id="a2"><a href="io.sentrius.sso.core.services.openai.categorization/index.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a></td><td class="bar" id="b2"><img src="jacoco-resources/redbar.gif" width="24" height="10" title="365" alt="365"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="jacoco-resources/redbar.gif" width="14" height="10" title="24" alt="24"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">28</td><td class="ctr2" id="g2">28</td><td class="ctr1" id="h2">85</td><td class="ctr2" id="i2">85</td><td class="ctr1" id="j2">16</td><td class="ctr2" id="k2">16</td><td class="ctr1" id="l1">3</td><td class="ctr2" id="m1">3</td></tr><tr><td id="a1"><a href="io.sentrius.sso.core.services.openai/index.html" class="el_package">io.sentrius.sso.core.services.openai</a></td><td class="bar" id="b3"><img src="jacoco-resources/redbar.gif" width="20" height="10" title="314" alt="314"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="jacoco-resources/redbar.gif" width="15" height="10" title="26" alt="26"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">25</td><td class="ctr2" id="g3">25</td><td class="ctr1" id="h3">66</td><td class="ctr2" id="i3">66</td><td class="ctr1" id="j3">12</td><td class="ctr2" id="k3">12</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr><tr><td id="a5"><a href="io.sentrius.sso.genai.suggestions/index.html" class="el_package">io.sentrius.sso.genai.suggestions</a></td><td class="bar" id="b4"><img src="jacoco-resources/redbar.gif" width="8" height="10" title="131" alt="131"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"><img src="jacoco-resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f5">8</td><td class="ctr2" id="g5">8</td><td class="ctr1" id="h4">28</td><td class="ctr2" id="i4">28</td><td class="ctr1" id="j4">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a4"><a href="io.sentrius.sso.genai.spring.ai/index.html" class="el_package">io.sentrius.sso.genai.spring.ai</a></td><td class="bar" id="b5"><img src="jacoco-resources/redbar.gif" width="7" height="10" title="107" alt="107"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="jacoco-resources/redbar.gif" width="4" height="10" title="8" alt="8"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f4">9</td><td class="ctr2" id="g4">9</td><td class="ctr1" id="h5">26</td><td class="ctr2" id="i5">26</td><td class="ctr1" id="j5">5</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.html
    deleted file mode 100644
    index 77582acb..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAISessionRule</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.automation.auditing.rules</a> &gt; <span class="el_class">OpenAISessionRule</span></div><h1>OpenAISessionRule</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">196 of 196</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">53</td><td class="ctr2">53</td><td class="ctr1">12</td><td class="ctr2">12</td></tr></tfoot><tbody><tr><td id="a11"><a href="OpenAISessionRule.java.html#L49" class="el_method">trigger(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="107" alt="107"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">27</td><td class="ctr2" id="i0">27</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="OpenAISessionRule.java.html#L113" class="el_method">onMessage(Session.TerminalMessage)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="36" alt="36"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">6</td><td class="ctr2" id="i1">6</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="OpenAISessionRule.java.html#L19" class="el_method">OpenAISessionRule()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="17" alt="17"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="OpenAISessionRule.java.html#L74" class="el_method">lambda$trigger$0(Boolean)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="11" alt="11"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a10"><a href="OpenAISessionRule.java.html#L18" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">2</td><td class="ctr2" id="i4">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="OpenAISessionRule.java.html#L39" class="el_method">setConnectedSystem(ConnectedSystem)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">2</td><td class="ctr2" id="i5">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="OpenAISessionRule.java.html#L44" class="el_method">setTrackingService(SessionTrackingService)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="OpenAISessionRule.java.html#L97" class="el_method">configure(SystemOptions, String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="OpenAISessionRule.java.html#L102" class="el_method">describeAction()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="OpenAISessionRule.java.html#L107" class="el_method">requiresSanitized()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="OpenAISessionRule.java.html#L124" class="el_method">isOnlySessionRule()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="OpenAISessionRule.java.html#L129" class="el_method">onFullCommand()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.java.html
    deleted file mode 100644
    index 020c61c8..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/OpenAISessionRule.java.html
    +++ /dev/null
    @@ -1,132 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAISessionRule.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.automation.auditing.rules</a> &gt; <span class="el_source">OpenAISessionRule.java</span></div><h1>OpenAISessionRule.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.automation.auditing.rules;
    -
    -import java.util.LinkedList;
    -import java.util.Optional;
    -import java.util.Queue;
    -import java.util.concurrent.CompletableFuture;
    -import java.util.concurrent.ExecutionException;
    -import io.sentrius.sso.automation.auditing.SessionTokenEvaluator;
    -import io.sentrius.sso.automation.auditing.Trigger;
    -import io.sentrius.sso.automation.auditing.TriggerAction;
    -import io.sentrius.sso.core.config.SystemOptions;
    -import io.sentrius.sso.core.model.ConnectedSystem;
    -import io.sentrius.sso.core.services.openai.OpenAITerminalService;
    -import io.sentrius.sso.core.services.terminal.SessionTrackingService;
    -import io.sentrius.sso.protobuf.Session;
    -import lombok.extern.slf4j.Slf4j;
    -
    -<span class="nc" id="L18">@Slf4j</span>
    -<span class="nc" id="L19">public class OpenAISessionRule extends SessionTokenEvaluator {</span>
    -
    -    private static final String DESCRIPTION = &quot;Automated AI monitoring has identifed concerning system activity. &quot; +
    -        &quot;Please standby while we request two party monitoring of your session to proceed..&quot;;
    -<span class="nc" id="L23">    private static final String CLASS_NAME = OpenAISessionRule.class.getName();</span>
    -    private ConnectedSystem connectedSystem;
    -    private SessionTrackingService sessionTrackingService;
    -
    -<span class="nc" id="L27">    private long buffer = 10;</span>
    -<span class="nc" id="L28">    private long commandsToEvaluate = 5;</span>
    -
    -
    -    // Rolling list of last 10 commands
    -<span class="nc" id="L32">    private final Queue&lt;String&gt; recentCommands = new LinkedList&lt;&gt;();</span>
    -
    -    // Flag to indicate malicious activity
    -<span class="nc" id="L35">    private volatile boolean flaggedAsMalicious = false;</span>
    -
    -    @Override
    -    public void setConnectedSystem(ConnectedSystem connectedSystem) {
    -<span class="nc" id="L39">        this.connectedSystem = connectedSystem;</span>
    -<span class="nc" id="L40">    }</span>
    -
    -    @Override
    -    public void setTrackingService(SessionTrackingService sessionTrackingService) {
    -<span class="nc" id="L44">        this.sessionTrackingService = sessionTrackingService;</span>
    -<span class="nc" id="L45">    }</span>
    -
    -    @Override
    -    public Optional&lt;Trigger&gt; trigger(String command) {
    -<span class="nc" id="L49">        var openAi = pluggableServices.get(&quot;openai&quot;);</span>
    -<span class="nc bnc" id="L50" title="All 2 branches missed.">        if (null == openAi) {</span>
    -<span class="nc" id="L51">            log.info(&quot;no open ai integration&quot;);</span>
    -<span class="nc" id="L52">            Trigger trg = new Trigger(TriggerAction.NO_ACTION, &quot;&quot;);</span>
    -<span class="nc" id="L53">            return Optional.of(trg);</span>
    -        }
    -        // Add command to the rolling list
    -<span class="nc bnc" id="L56" title="All 2 branches missed.">        if (recentCommands.size() &gt;= buffer) {</span>
    -<span class="nc" id="L57">            recentCommands.poll(); // Remove the oldest command</span>
    -        }
    -<span class="nc" id="L59">        recentCommands.offer(command);</span>
    -
    -
    -<span class="nc bnc" id="L62" title="All 2 branches missed.">        if (recentCommands.size() &lt; commandsToEvaluate) {</span>
    -<span class="nc" id="L63">            log.info(&quot;Insufficient commands for analysis&quot;);</span>
    -<span class="nc" id="L64">            Trigger trg = new Trigger(TriggerAction.NO_ACTION, &quot;&quot;);</span>
    -<span class="nc" id="L65">            return Optional.of(trg);</span>
    -        }
    -
    -        // Merge recent commands into a single payload
    -<span class="nc" id="L69">        String mergedCommands = String.join(&quot;\n&quot;, recentCommands);</span>
    -<span class="nc" id="L70">        log.info(&quot;merged commands: {}&quot;, mergedCommands);</span>
    -        // Submit merged commands for asynchronous analysis
    -<span class="nc" id="L72">        CompletableFuture&lt;Void&gt; analysis =</span>
    -<span class="nc" id="L73">            ((OpenAITerminalService)openAi).analyzeTerminalLogs(mergedCommands).thenAccept(isMalicious -&gt; {</span>
    -<span class="nc" id="L74">                log.info(&quot;OpenAI analysis completed. Malicious: {}&quot;, isMalicious);</span>
    -<span class="nc bnc" id="L75" title="All 2 branches missed.">                if (isMalicious) {</span>
    -<span class="nc" id="L76">                    flaggedAsMalicious = true;</span>
    -                }
    -<span class="nc" id="L78">            });</span>
    -
    -        try {
    -<span class="nc" id="L81">            analysis.get();</span>
    -<span class="nc" id="L82">        } catch (InterruptedException e) {</span>
    -<span class="nc" id="L83">            log.info(&quot;OpenAI analysis interrupted&quot;);</span>
    -<span class="nc" id="L84">            e.printStackTrace();</span>
    -<span class="nc" id="L85">            throw new RuntimeException(e);</span>
    -<span class="nc" id="L86">        } catch (ExecutionException e) {</span>
    -<span class="nc" id="L87">            e.printStackTrace();</span>
    -<span class="nc" id="L88">            throw new RuntimeException(e);</span>
    -<span class="nc" id="L89">        }</span>
    -
    -<span class="nc" id="L91">        Trigger trg = new Trigger(TriggerAction.NO_ACTION, &quot;&quot;);</span>
    -<span class="nc" id="L92">        return Optional.of(trg);</span>
    -    }
    -
    -    @Override
    -    public boolean configure(SystemOptions systemOptions, String configuration) {
    -<span class="nc" id="L97">        return false;</span>
    -    }
    -
    -    @Override
    -    public TriggerAction describeAction() {
    -<span class="nc" id="L102">        return TriggerAction.JIT_ACTION;</span>
    -    }
    -
    -    @Override
    -    public boolean requiresSanitized() {
    -<span class="nc" id="L107">        return false;</span>
    -    }
    -
    -    @Override
    -    public Optional&lt;Trigger&gt; onMessage(Session.TerminalMessage text) {
    -        // Return a trigger based on current state
    -<span class="nc" id="L113">        log.info(&quot;flagged as malicious: {}&quot;, flaggedAsMalicious);</span>
    -<span class="nc bnc" id="L114" title="All 6 branches missed.">        if ((connectedSystem.getWebsocketListenerSessionId() == null || connectedSystem.getWebsocketListenerSessionId().isEmpty() ) &amp;&amp; flaggedAsMalicious) {</span>
    -<span class="nc" id="L115">            Trigger trg = new Trigger(TriggerAction.JIT_ACTION, DESCRIPTION);</span>
    -<span class="nc" id="L116">            return Optional.of(trg);</span>
    -        }
    -<span class="nc" id="L118">        Trigger trg = new Trigger(TriggerAction.NO_ACTION, CLASS_NAME);</span>
    -<span class="nc" id="L119">        return Optional.of(trg);</span>
    -    }
    -
    -    @Override
    -    public boolean isOnlySessionRule() {
    -<span class="nc" id="L124">        return false;</span>
    -    }
    -
    -    @Override
    -    public boolean onFullCommand() {
    -<span class="nc" id="L129">        return true;</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.html
    deleted file mode 100644
    index f94c9dca..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyAIMonitor</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.automation.auditing.rules</a> &gt; <span class="el_class">TwoPartyAIMonitor</span></div><h1>TwoPartyAIMonitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">541 of 541</td><td class="ctr2">0%</td><td class="bar">62 of 62</td><td class="ctr2">0%</td><td class="ctr1">44</td><td class="ctr2">44</td><td class="ctr1">114</td><td class="ctr2">114</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a11"><a href="TwoPartyAIMonitor.java.html#L55" class="el_method">trigger(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="213" alt="213"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">11</td><td class="ctr2" id="g0">11</td><td class="ctr1" id="h0">43</td><td class="ctr2" id="i0">43</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="TwoPartyAIMonitor.java.html#L156" class="el_method">onMessage(Session.TerminalMessage)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="149" alt="149"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h1">30</td><td class="ctr2" id="i1">30</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="TwoPartyAIMonitor.java.html#L169" class="el_method">lambda$onMessage$1(LLMResponse)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="48" alt="48"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="72" height="10" title="12" alt="12"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">7</td><td class="ctr2" id="g2">7</td><td class="ctr1" id="h3">8</td><td class="ctr2" id="i3">8</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="TwoPartyAIMonitor.java.html#L98" class="el_method">lambda$trigger$0(LLMResponse)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="46" alt="46"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="10" alt="10"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">6</td><td class="ctr2" id="g3">6</td><td class="ctr1" id="h4">8</td><td class="ctr2" id="i4">8</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a12"><a href="TwoPartyAIMonitor.java.html#L21" class="el_method">TwoPartyAIMonitor()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="38" alt="38"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h2">10</td><td class="ctr2" id="i2">10</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="TwoPartyAIMonitor.java.html#L135" class="el_method">configure(SystemOptions, String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="24" alt="24"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="TwoPartyAIMonitor.java.html#L20" class="el_method">static {...}</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="7" alt="7"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">2</td><td class="ctr2" id="i6">2</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a8"><a href="TwoPartyAIMonitor.java.html#L45" class="el_method">setConnectedSystem(ConnectedSystem)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">2</td><td class="ctr2" id="i7">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="TwoPartyAIMonitor.java.html#L50" class="el_method">setTrackingService(SessionTrackingService)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">2</td><td class="ctr2" id="i8">2</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a1"><a href="TwoPartyAIMonitor.java.html#L145" class="el_method">describeAction()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a7"><a href="TwoPartyAIMonitor.java.html#L150" class="el_method">requiresSanitized()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="TwoPartyAIMonitor.java.html#L222" class="el_method">isOnlySessionRule()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a5"><a href="TwoPartyAIMonitor.java.html#L227" class="el_method">onFullCommand()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.java.html
    deleted file mode 100644
    index ee55f6cd..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/TwoPartyAIMonitor.java.html
    +++ /dev/null
    @@ -1,230 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyAIMonitor.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.automation.auditing.rules</a> &gt; <span class="el_source">TwoPartyAIMonitor.java</span></div><h1>TwoPartyAIMonitor.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.automation.auditing.rules;
    -
    -import java.util.LinkedList;
    -import java.util.Optional;
    -import java.util.Queue;
    -import java.util.concurrent.CompletableFuture;
    -import java.util.concurrent.ExecutionException;
    -import java.util.concurrent.atomic.AtomicReference;
    -import io.sentrius.sso.automation.auditing.SessionTokenEvaluator;
    -import io.sentrius.sso.automation.auditing.Trigger;
    -import io.sentrius.sso.automation.auditing.TriggerAction;
    -import io.sentrius.sso.core.config.SystemOptions;
    -import io.sentrius.sso.core.model.ConnectedSystem;
    -import io.sentrius.sso.core.services.openai.OpenAITwoPartyMonitorService;
    -import io.sentrius.sso.core.services.terminal.SessionTrackingService;
    -import io.sentrius.sso.genai.model.TwoPartyRequest;
    -import io.sentrius.sso.protobuf.Session;
    -import lombok.extern.slf4j.Slf4j;
    -
    -<span class="nc" id="L20">@Slf4j</span>
    -<span class="nc" id="L21">public class TwoPartyAIMonitor extends SessionTokenEvaluator {</span>
    -
    -    private static final String DESCRIPTION = &quot;Automated AI monitoring has identifed concerning system activity. &quot; +
    -        &quot;Please standby while we request two party monitoring of your session to proceed..&quot;;
    -<span class="nc" id="L25">    private static final String CLASS_NAME = TwoPartyAIMonitor.class.getName();</span>
    -    private ConnectedSystem connectedSystem;
    -    private SessionTrackingService sessionTrackingService;
    -
    -<span class="nc" id="L29">    private long buffer = 10;</span>
    -<span class="nc" id="L30">    private long commandsToEvaluate = 5;</span>
    -<span class="nc" id="L31">    private double aiRiskThreshold = 0.8;</span>
    -<span class="nc" id="L32">    private boolean enableLLMQuestions = false;</span>
    -
    -    // Rolling list of last 10 commands
    -<span class="nc" id="L35">    private final Queue&lt;String&gt; recentCommands = new LinkedList&lt;&gt;();</span>
    -
    -    // Flag to indicate malicious activity
    -<span class="nc" id="L38">    private AtomicReference&lt;String&gt; llmResponse = new AtomicReference&lt;&gt;(null);</span>
    -<span class="nc" id="L39">    private AtomicReference&lt;String&gt; llmQuestion = new AtomicReference&lt;&gt;(null);</span>
    -<span class="nc" id="L40">    private volatile boolean flaggedAsMalicious = false;</span>
    -<span class="nc" id="L41">    private volatile long lastCommandTime = 0;</span>
    -
    -    @Override
    -    public void setConnectedSystem(ConnectedSystem connectedSystem) {
    -<span class="nc" id="L45">        this.connectedSystem = connectedSystem;</span>
    -<span class="nc" id="L46">    }</span>
    -
    -    @Override
    -    public void setTrackingService(SessionTrackingService sessionTrackingService) {
    -<span class="nc" id="L50">        this.sessionTrackingService = sessionTrackingService;</span>
    -<span class="nc" id="L51">    }</span>
    -
    -    @Override
    -    public Optional&lt;Trigger&gt; trigger(String cmd) {
    -<span class="nc" id="L55">        var command = cmd.trim();</span>
    -<span class="nc bnc" id="L56" title="All 2 branches missed.">        if (command.isEmpty()) {</span>
    -<span class="nc" id="L57">            log.info(&quot;Empty command No analysis&quot;);</span>
    -            Trigger
    -<span class="nc bnc" id="L59" title="All 2 branches missed.">                trg = new Trigger(TriggerAction.PERSISTENT_MESSAGE, llmResponse.get() != null ? llmResponse.get() : &quot;&quot;);</span>
    -<span class="nc" id="L60">            return Optional.of(trg);</span>
    -        }
    -<span class="nc" id="L62">        var openAi = pluggableServices.get(&quot;openaitwoparty&quot;);</span>
    -<span class="nc bnc" id="L63" title="All 2 branches missed.">        if (null == openAi) {</span>
    -<span class="nc" id="L64">            log.info(&quot;no open ai integration&quot;);</span>
    -<span class="nc" id="L65">            Trigger trg = new Trigger(TriggerAction.NO_ACTION, &quot;&quot;);</span>
    -<span class="nc" id="L66">            return Optional.of(trg);</span>
    -        }
    -        // Add command to the rolling list
    -<span class="nc bnc" id="L69" title="All 2 branches missed.">        if (recentCommands.size() &gt;= buffer) {</span>
    -<span class="nc" id="L70">            recentCommands.poll(); // Remove the oldest command</span>
    -        }
    -<span class="nc" id="L72">        recentCommands.offer(command);</span>
    -
    -
    -<span class="nc bnc" id="L75" title="All 2 branches missed.">        if (recentCommands.size() &lt; commandsToEvaluate) {</span>
    -<span class="nc" id="L76">            log.info(&quot;Insufficient commands for analysis&quot;);</span>
    -<span class="nc bnc" id="L77" title="All 2 branches missed.">            Trigger trg = new Trigger(TriggerAction.PERSISTENT_MESSAGE, llmResponse.get() != null ? llmResponse.get() : &quot;&quot;);</span>
    -<span class="nc" id="L78">            return Optional.of(trg);</span>
    -        }
    -
    -<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (System.currentTimeMillis() - lastCommandTime &lt; 10000) {</span>
    -<span class="nc" id="L82">            log.info(&quot;Insufficient time between commands for analysis&quot;);</span>
    -
    -<span class="nc bnc" id="L84" title="All 2 branches missed.">            Trigger trg = new Trigger(TriggerAction.PERSISTENT_MESSAGE, llmResponse.get() != null ? llmResponse.get() : &quot;&quot;);</span>
    -<span class="nc" id="L85">            lastCommandTime = System.currentTimeMillis();</span>
    -<span class="nc" id="L86">            return Optional.of(trg);</span>
    -        }
    -        else {
    -<span class="nc" id="L89">            lastCommandTime = System.currentTimeMillis();</span>
    -        }
    -
    -        // Merge recent commands into a single payload
    -<span class="nc" id="L93">        String mergedCommands = String.join(&quot;\n&quot;, recentCommands);</span>
    -<span class="nc" id="L94">        log.debug(&quot;merged commands: {}&quot;, mergedCommands);</span>
    -        // Submit merged commands for asynchronous analysis
    -<span class="nc" id="L96">        CompletableFuture&lt;Void&gt; analysis =</span>
    -<span class="nc" id="L97">            ((OpenAITwoPartyMonitorService)openAi).analyzeTerminalLogs(TwoPartyRequest.builder().userInput(mergedCommands).build()).thenAccept(response -&gt; {</span>
    -<span class="nc" id="L98">                log.info(&quot;OpenAI analysis completed. Malicious: {}&quot;, response);</span>
    -<span class="nc bnc" id="L99" title="All 2 branches missed.">                if (response != null) {</span>
    -<span class="nc bnc" id="L100" title="All 2 branches missed.">                    flaggedAsMalicious = response.getScore()&gt; aiRiskThreshold;</span>
    -<span class="nc" id="L101">                    llmResponse.set(response.getResponse());</span>
    -<span class="nc bnc" id="L102" title="All 6 branches missed.">                    if (response.getQuestion() != null &amp;&amp; !flaggedAsMalicious &amp;&amp; response.getScore()&gt;=0.75){</span>
    -<span class="nc" id="L103">                        llmQuestion.set(response.getQuestion());</span>
    -                    }
    -                    else {
    -<span class="nc" id="L106">                        llmQuestion.set(null);</span>
    -                    }
    -                }
    -<span class="nc" id="L109">            });</span>
    -
    -        try {
    -<span class="nc" id="L112">            analysis.get();</span>
    -<span class="nc" id="L113">        } catch (InterruptedException e) {</span>
    -<span class="nc" id="L114">            log.info(&quot;OpenAI analysis interrupted&quot;);</span>
    -<span class="nc" id="L115">            e.printStackTrace();</span>
    -<span class="nc" id="L116">            throw new RuntimeException(e);</span>
    -<span class="nc" id="L117">        } catch (ExecutionException e) {</span>
    -<span class="nc" id="L118">            e.printStackTrace();</span>
    -<span class="nc" id="L119">            throw new RuntimeException(e);</span>
    -<span class="nc" id="L120">        }</span>
    -
    -<span class="nc bnc" id="L122" title="All 2 branches missed.">        if (llmResponse.get() != null) {</span>
    -<span class="nc bnc" id="L123" title="All 2 branches missed.">            Trigger trg = llmQuestion.get() != null ? new Trigger(TriggerAction.PROMPT_ACTION, llmResponse.get(),</span>
    -<span class="nc" id="L124">                llmQuestion.get()) :</span>
    -<span class="nc" id="L125">                new Trigger(TriggerAction.PERSISTENT_MESSAGE, llmResponse.get());</span>
    -<span class="nc" id="L126">            return Optional.of(trg);</span>
    -        }
    -
    -<span class="nc" id="L129">        Trigger trg = new Trigger(TriggerAction.PERSISTENT_MESSAGE, &quot;&quot;);</span>
    -<span class="nc" id="L130">        return Optional.of(trg);</span>
    -    }
    -
    -    @Override
    -    public boolean configure(SystemOptions systemOptions, String configuration) {
    -<span class="nc" id="L135">        commandsToEvaluate = systemOptions.getCommandsToEvaluate();</span>
    -<span class="nc" id="L136">        buffer = systemOptions.getCommandsToBuffer();</span>
    -<span class="nc" id="L137">        aiRiskThreshold = systemOptions.getAiRiskThreshold();</span>
    -<span class="nc" id="L138">        enableLLMQuestions = systemOptions.getEnableLLMQuestions();</span>
    -<span class="nc" id="L139">        return true;</span>
    -
    -    }
    -
    -    @Override
    -    public TriggerAction describeAction() {
    -<span class="nc" id="L145">        return TriggerAction.WARN_ACTION;</span>
    -    }
    -
    -    @Override
    -    public boolean requiresSanitized() {
    -<span class="nc" id="L150">        return false;</span>
    -    }
    -
    -    @Override
    -    public Optional&lt;Trigger&gt; onMessage(Session.TerminalMessage text) {
    -        // Return a trigger based on current state
    -<span class="nc bnc" id="L156" title="All 2 branches missed.">        if (text.getType() == Session.MessageType.USER_PROMPT) {</span>
    -<span class="nc" id="L157">            log.info(&quot;*** response&quot;);</span>
    -<span class="nc" id="L158">            var openAi = pluggableServices.get(&quot;openaitwoparty&quot;);</span>
    -<span class="nc bnc" id="L159" title="All 2 branches missed.">            if (null == openAi) {</span>
    -<span class="nc" id="L160">                log.info(&quot;no open ai integration&quot;);</span>
    -<span class="nc" id="L161">                Trigger trg = new Trigger(TriggerAction.NO_ACTION, &quot;&quot;);</span>
    -<span class="nc" id="L162">                return Optional.of(trg);</span>
    -            }
    -
    -<span class="nc" id="L165">            String mergedCommands = String.join(&quot;\n&quot;, recentCommands);</span>
    -
    -<span class="nc" id="L167">            CompletableFuture&lt;Void&gt; analysis =</span>
    -<span class="nc" id="L168">                ((OpenAITwoPartyMonitorService)openAi).analyzeTerminalLogs(TwoPartyRequest.builder().previousPrompt(text.getCommand()).promptResponse(text.getPrompt()).userInput(mergedCommands).build()).thenAccept(response -&gt; {</span>
    -<span class="nc" id="L169">                    log.info(&quot;From user response: OpenAI analysis completed. Malicious: {}&quot;, response);</span>
    -<span class="nc bnc" id="L170" title="All 2 branches missed.">                    if (response != null) {</span>
    -<span class="nc bnc" id="L171" title="All 2 branches missed.">                        flaggedAsMalicious = response.getScore()&gt;0.8;</span>
    -<span class="nc" id="L172">                        llmResponse.set(response.getResponse());</span>
    -<span class="nc bnc" id="L173" title="All 8 branches missed.">                        if (response.getQuestion() != null &amp;&amp; !flaggedAsMalicious &amp;&amp; response.getScore()&gt;=0.75 &amp;&amp; enableLLMQuestions) {</span>
    -<span class="nc" id="L174">                            llmQuestion.set(response.getQuestion());</span>
    -                        }
    -                        else {
    -<span class="nc" id="L177">                            llmQuestion.set(null);</span>
    -                        }
    -                    }
    -<span class="nc" id="L180">                });</span>
    -
    -            try {
    -<span class="nc" id="L183">                analysis.get();</span>
    -
    -<span class="nc bnc" id="L185" title="All 4 branches missed.">                if (llmResponse.get() != null &amp;&amp; llmQuestion.get() != null) {</span>
    -<span class="nc bnc" id="L186" title="All 4 branches missed.">                    Trigger trg = llmQuestion.get() != null &amp;&amp; enableLLMQuestions ? new Trigger(TriggerAction.PROMPT_ACTION,</span>
    -<span class="nc" id="L187">                        llmResponse.get(),</span>
    -<span class="nc" id="L188">                        llmQuestion.get()) :</span>
    -<span class="nc" id="L189">                        new Trigger(TriggerAction.PERSISTENT_MESSAGE, llmResponse.get());</span>
    -<span class="nc" id="L190">                    return Optional.of(trg);</span>
    -                }
    -
    -<span class="nc" id="L193">            } catch (InterruptedException e) {</span>
    -<span class="nc" id="L194">                throw new RuntimeException(e);</span>
    -<span class="nc" id="L195">            } catch (ExecutionException e) {</span>
    -<span class="nc" id="L196">                throw new RuntimeException(e);</span>
    -<span class="nc" id="L197">            }</span>
    -        }
    -<span class="nc bnc" id="L199" title="All 6 branches missed.">        if ((connectedSystem.getWebsocketListenerSessionId() == null || connectedSystem.getWebsocketListenerSessionId().isEmpty() ) &amp;&amp; flaggedAsMalicious) {</span>
    -<span class="nc bnc" id="L200" title="All 2 branches missed.">            if (llmQuestion.get()!= null){</span>
    -<span class="nc" id="L201">                Trigger trg = new Trigger(TriggerAction.PROMPT_ACTION, DESCRIPTION);</span>
    -<span class="nc" id="L202">                return Optional.of(trg);</span>
    -            }
    -            else {
    -<span class="nc" id="L205">                Trigger trg = new Trigger(TriggerAction.JIT_ACTION, DESCRIPTION);</span>
    -<span class="nc" id="L206">                return Optional.of(trg);</span>
    -            }
    -        }
    -        /*
    -        if (llmResponse.get() != null) {
    -            log.info(&quot;OpenAI analysis completed. not malicious but have an llm response: {}&quot;, llmResponse.get());
    -            Trigger trg = new Trigger(TriggerAction.WARN_ACTION, llmResponse.get());
    -            return Optional.of(trg);
    -        }else {*/
    -<span class="nc" id="L215">            Trigger trg = new Trigger(TriggerAction.NO_ACTION, CLASS_NAME);</span>
    -<span class="nc" id="L216">            return Optional.of(trg);</span>
    -//        }
    -    }
    -
    -    @Override
    -    public boolean isOnlySessionRule() {
    -<span class="nc" id="L222">        return false;</span>
    -    }
    -
    -    @Override
    -    public boolean onFullCommand() {
    -<span class="nc" id="L227">        return true;</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.html
    deleted file mode 100644
    index d0971a0b..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.automation.auditing.rules</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.automation.auditing.rules</span></div><h1>io.sentrius.sso.automation.auditing.rules</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">737 of 737</td><td class="ctr2">0%</td><td class="bar">76 of 76</td><td class="ctr2">0%</td><td class="ctr1">63</td><td class="ctr2">63</td><td class="ctr1">167</td><td class="ctr2">167</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="TwoPartyAIMonitor.html" class="el_class">TwoPartyAIMonitor</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="541" alt="541"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="62" alt="62"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">44</td><td class="ctr2" id="g0">44</td><td class="ctr1" id="h0">114</td><td class="ctr2" id="i0">114</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="OpenAISessionRule.html" class="el_class">OpenAISessionRule</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="196" alt="196"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">19</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">53</td><td class="ctr2" id="i1">53</td><td class="ctr1" id="j1">12</td><td class="ctr2" id="k1">12</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.source.html
    deleted file mode 100644
    index 3a6c16b5..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.automation.auditing.rules/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.automation.auditing.rules</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.automation.auditing.rules</span></div><h1>io.sentrius.sso.automation.auditing.rules</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">737 of 737</td><td class="ctr2">0%</td><td class="bar">76 of 76</td><td class="ctr2">0%</td><td class="ctr1">63</td><td class="ctr2">63</td><td class="ctr1">167</td><td class="ctr2">167</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a1"><a href="TwoPartyAIMonitor.java.html" class="el_source">TwoPartyAIMonitor.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="541" alt="541"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="62" alt="62"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">44</td><td class="ctr2" id="g0">44</td><td class="ctr1" id="h0">114</td><td class="ctr2" id="i0">114</td><td class="ctr1" id="j0">13</td><td class="ctr2" id="k0">13</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="OpenAISessionRule.java.html" class="el_source">OpenAISessionRule.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="196" alt="196"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">19</td><td class="ctr2" id="g1">19</td><td class="ctr1" id="h1">53</td><td class="ctr2" id="i1">53</td><td class="ctr1" id="j1">12</td><td class="ctr2" id="k1">12</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.html
    deleted file mode 100644
    index b2b4c118..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommandCategorizer</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_class">CommandCategorizer</span></div><h1>CommandCategorizer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">172 of 172</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">45</td><td class="ctr2">45</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a2"><a href="CommandCategorizer.java.html#L73" class="el_method">categorizeWithRulesOrML(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="103" alt="103"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="CommandCategorizer.java.html#L28" class="el_method">CommandCategorizer(IntegrationSecurityTokenService, CommandCategoryRepository)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="18" alt="18"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="CommandCategorizer.java.html#L44" class="el_method">fetchFromDatabase(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="CommandCategorizer.java.html#L118" class="el_method">addCommandCategory(String, CommandCategoryDTO)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="12" alt="12"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h4">3</td><td class="ctr2" id="i4">3</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="CommandCategorizer.java.html#L53" class="el_method">categorizeCommand(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="8" alt="8"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="CommandCategorizer.java.html#L63" class="el_method">isValidRegex(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="8" alt="8"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="CommandCategorizer.java.html#L57" class="el_method">getDBCommandCategory(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="CommandCategorizer.java.html#L26" class="el_method">static {...}</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.java.html
    deleted file mode 100644
    index 1c70f6d5..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandCategorizer.java.html
    +++ /dev/null
    @@ -1,122 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommandCategorizer.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_source">CommandCategorizer.java</span></div><h1>CommandCategorizer.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.core.services.openai.categorization;
    -
    -import java.util.Comparator;
    -import java.util.List;
    -import java.util.concurrent.TimeUnit;
    -import java.util.regex.Pattern;
    -import java.util.regex.PatternSyntaxException;
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.github.benmanes.caffeine.cache.Cache;
    -import com.github.benmanes.caffeine.cache.Caffeine;
    -import io.sentrius.sso.core.dto.CommandCategoryDTO;
    -import io.sentrius.sso.core.model.categorization.CommandCategory;
    -import io.sentrius.sso.core.repository.CommandCategoryRepository;
    -import io.sentrius.sso.core.services.security.IntegrationSecurityTokenService;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.GenerativeAPI;
    -import io.sentrius.sso.genai.GeneratorConfiguration;
    -import io.sentrius.sso.genai.LLMCommandCategorizer;
    -import io.sentrius.sso.core.integrations.external.ExternalIntegrationDTO;
    -import io.sentrius.sso.security.ApiKey;
    -import jakarta.transaction.Transactional;
    -import lombok.RequiredArgsConstructor;
    -import lombok.extern.slf4j.Slf4j;
    -import org.springframework.stereotype.Service;
    -
    -<span class="nc" id="L26">@Slf4j</span>
    -@Service
    -<span class="nc" id="L28">@RequiredArgsConstructor</span>
    -public class CommandCategorizer {
    -
    -    private final IntegrationSecurityTokenService integrationSecurityTokenService;
    -
    -    private final CommandCategoryRepository commandCategoryRepository;
    -
    -
    -<span class="nc" id="L36">    private final Cache&lt;String, CommandCategoryDTO&gt; commandCache = Caffeine.newBuilder()</span>
    -<span class="nc" id="L37">        .maximumSize(1000)</span>
    -<span class="nc" id="L38">        .expireAfterWrite(1, TimeUnit.HOURS)</span>
    -<span class="nc" id="L39">        .build();</span>
    -
    -
    -
    -    private CommandCategory fetchFromDatabase(String command) {
    -<span class="nc" id="L44">        List&lt;CommandCategory&gt; matchingCategories = commandCategoryRepository.findMatchingCategories(command);</span>
    -<span class="nc" id="L45">        return matchingCategories.stream()</span>
    -<span class="nc" id="L46">            .min(Comparator.comparingInt(CommandCategory::getPriority))</span>
    -<span class="nc" id="L47">            .orElse(null);</span>
    -    }
    -
    -
    -    @Transactional
    -    public CommandCategoryDTO categorizeCommand(String command) {
    -<span class="nc" id="L53">        return commandCache.get(command, this::categorizeWithRulesOrML);</span>
    -    }
    -
    -    protected List&lt;CommandCategory&gt; getDBCommandCategory(String command){
    -<span class="nc" id="L57">        return commandCategoryRepository.findByPattern(command);</span>
    -    }
    -
    -
    -    public boolean isValidRegex(String regex) {
    -        try {
    -<span class="nc" id="L63">            Pattern.compile(regex);</span>
    -<span class="nc" id="L64">            return true; // Valid regex</span>
    -<span class="nc" id="L65">        } catch (PatternSyntaxException e) {</span>
    -<span class="nc" id="L66">            return false; // Invalid regex</span>
    -        }
    -    }
    -
    -
    -    @Transactional
    -    protected CommandCategoryDTO categorizeWithRulesOrML(String command) {
    -<span class="nc" id="L73">        CommandCategoryDTO category = fetchFromDatabase(command).toDTO();</span>
    -<span class="nc bnc" id="L74" title="All 2 branches missed.">        if (category != null) {</span>
    -<span class="nc" id="L75">            log.info(&quot;Found command category {} for {} &quot;, category, command);</span>
    -<span class="nc" id="L76">            return category;</span>
    -        }
    -        
    -<span class="nc" id="L79">        var openaiService = integrationSecurityTokenService.findByConnectionType(&quot;openai&quot;).stream().findFirst().orElse(null);</span>
    -
    -<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (null != openaiService){</span>
    -<span class="nc" id="L82">            log.info(&quot;OpenAI service is available&quot;);</span>
    -<span class="nc" id="L83">            ExternalIntegrationDTO externalIntegrationDTO = null;</span>
    -            try {
    -<span class="nc" id="L85">                externalIntegrationDTO = JsonUtil.MAPPER.readValue(openaiService.getConnectionInfo(),</span>
    -                    ExternalIntegrationDTO.class);
    -<span class="nc" id="L87">            } catch (JsonProcessingException e) {</span>
    -<span class="nc" id="L88">                throw new RuntimeException(e);</span>
    -<span class="nc" id="L89">            }</span>
    -            ApiKey key =
    -<span class="nc" id="L91">                ApiKey.builder().apiKey(externalIntegrationDTO.getApiToken()).principal(externalIntegrationDTO.getUsername()).build();</span>
    -
    -<span class="nc" id="L93">            var commandCategorizer = new LLMCommandCategorizer(key, new GenerativeAPI(key), GeneratorConfiguration.builder().build());</span>
    -
    -            try {
    -<span class="nc" id="L96">                category = commandCategorizer.generate(command);</span>
    -
    -<span class="nc bnc" id="L98" title="All 2 branches missed.">                if (isValidRegex(category.getPattern())) {</span>
    -<span class="nc" id="L99">                    addCommandCategory(category.getPattern(), category);</span>
    -                }
    -<span class="nc" id="L101">                log.info(&quot;Categorized command: {}&quot;, category);</span>
    -<span class="nc" id="L102">                return category;</span>
    -<span class="nc" id="L103">            } catch (Exception e) {</span>
    -<span class="nc" id="L104">                e.printStackTrace();</span>
    -<span class="nc" id="L105">                log.error(&quot;Error categorizing command&quot;, e);</span>
    -            }
    -
    -<span class="nc" id="L108">        } else {</span>
    -<span class="nc" id="L109">            log.info(&quot;OpenAI service is not enabled&quot;);</span>
    -        }
    -
    -<span class="nc" id="L112">        log.info(&quot;Finished processing terminal commands&quot;);</span>
    -
    -<span class="nc" id="L114">        return CommandCategoryDTO.builder().build();</span>
    -    }
    -
    -    private void addCommandCategory(String pattern, CommandCategoryDTO category) {
    -<span class="nc" id="L118">        commandCategoryRepository.save(CommandCategory.fromDTO(category));</span>
    -<span class="nc" id="L119">        commandCache.put(pattern, category);</span>
    -<span class="nc" id="L120">    }</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.html
    deleted file mode 100644
    index e47acbb8..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommandTrie</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_class">CommandTrie</span></div><h1>CommandTrie</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">179 of 179</td><td class="ctr2">0%</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">36</td><td class="ctr2">36</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a5"><a href="CommandTrie.java.html#L44" class="el_method">searchByPrefix(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="64" alt="64"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">5</td><td class="ctr2" id="g0">5</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="CommandTrie.java.html#L15" class="el_method">insert(String, CommandCategory)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="99" height="10" title="53" alt="53"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f2">3</td><td class="ctr2" id="g2">3</td><td class="ctr1" id="h1">11</td><td class="ctr2" id="i1">11</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="CommandTrie.java.html#L32" class="el_method">search(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="76" height="10" title="41" alt="41"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="CommandTrie.java.html#L7" class="el_method">CommandTrie()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="CommandTrie.java.html#L11" class="el_method">normalizePath(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="CommandTrie.java.html#L19" class="el_method">lambda$insert$0(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="CommandTrie.java.html#L6" class="el_method">static {...}</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.java.html
    deleted file mode 100644
    index 97452349..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/CommandTrie.java.html
    +++ /dev/null
    @@ -1,71 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>CommandTrie.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_source">CommandTrie.java</span></div><h1>CommandTrie.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.core.services.openai.categorization;
    -
    -import io.sentrius.sso.core.model.categorization.CommandCategory;
    -import lombok.extern.slf4j.Slf4j;
    -
    -<span class="nc" id="L6">@Slf4j</span>
    -<span class="nc" id="L7">public class CommandTrie {</span>
    -<span class="nc" id="L8">    private final TrieNode root = new TrieNode();</span>
    -
    -    private String normalizePath(String path) {
    -<span class="nc" id="L11">        return path.replaceAll(&quot;/+$&quot;, &quot;&quot;); // Remove trailing slashes</span>
    -    }
    -
    -    public void insert(String command, CommandCategory category) {
    -<span class="nc" id="L15">        String[] parts = command.split(&quot; &quot;);</span>
    -<span class="nc" id="L16">        TrieNode current = root;</span>
    -<span class="nc bnc" id="L17" title="All 2 branches missed.">        for (String part : parts) {</span>
    -<span class="nc" id="L18">            part = normalizePath(part); // Normalize each part</span>
    -<span class="nc" id="L19">            current = current.children.computeIfAbsent(part, k -&gt; new TrieNode());</span>
    -        }
    -<span class="nc" id="L21">        current.isEndOfCommand = true;</span>
    -<span class="nc bnc" id="L22" title="All 2 branches missed.">        if (category.getPattern().endsWith(&quot;*&quot;)) {</span>
    -<span class="nc" id="L23">            current.isWildcard = true;</span>
    -        }
    -        else {
    -<span class="nc" id="L26">            current.isWildcard = false;</span>
    -        }
    -<span class="nc" id="L28">        current.commandCategory = category;</span>
    -<span class="nc" id="L29">    }</span>
    -
    -    public CommandCategory search(String command) {
    -<span class="nc" id="L32">        String[] parts = command.split(&quot; &quot;);</span>
    -<span class="nc" id="L33">        TrieNode current = root;</span>
    -<span class="nc bnc" id="L34" title="All 2 branches missed.">        for (String part : parts) {</span>
    -<span class="nc" id="L35">            current = current.children.get(part);</span>
    -<span class="nc bnc" id="L36" title="All 2 branches missed.">            if (current == null) {</span>
    -<span class="nc" id="L37">                return null; // Command not found</span>
    -            }
    -        }
    -<span class="nc bnc" id="L40" title="All 2 branches missed.">        return current.isEndOfCommand ? current.commandCategory : null;</span>
    -    }
    -
    -    public CommandCategory searchByPrefix(String command) {
    -<span class="nc" id="L44">        String[] parts = command.split(&quot; &quot;);</span>
    -<span class="nc" id="L45">        TrieNode current = root;</span>
    -<span class="nc" id="L46">        CommandCategory lastCategory = null;</span>
    -
    -<span class="nc bnc" id="L48" title="All 2 branches missed.">        for (String part : parts) {</span>
    -<span class="nc" id="L49">            part = normalizePath(part); // Normalize each part</span>
    -<span class="nc" id="L50">            log.info(&quot;Searching for part: {}&quot;, part);</span>
    -
    -            // Check if the part exists in the children
    -<span class="nc bnc" id="L53" title="All 2 branches missed.">            if (current.children.containsKey(part)) {</span>
    -<span class="nc" id="L54">                current = current.children.get(part);</span>
    -<span class="nc bnc" id="L55" title="All 2 branches missed.">                if (current.isEndOfCommand) {</span>
    -<span class="nc" id="L56">                    lastCategory = current.commandCategory;</span>
    -                }
    -            } else {
    -                // If no exact match, check for wildcard match (e.g., &quot;cat /etc/&quot;)
    -<span class="nc bnc" id="L60" title="All 2 branches missed.">                if (current.isEndOfCommand) {</span>
    -<span class="nc" id="L61">                    log.info(&quot;Partial match found at: {}&quot;, part);</span>
    -<span class="nc" id="L62">                    lastCategory = current.commandCategory;</span>
    -                }
    -                break; // No further match possible
    -            }
    -        }
    -
    -<span class="nc" id="L68">        return lastCategory;</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.html
    deleted file mode 100644
    index 11cf5878..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TrieNode</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_class">TrieNode</span></div><h1>TrieNode</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="TrieNode.java.html#L7" class="el_method">TrieNode()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">4</td><td class="ctr2" id="i0">4</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.java.html
    deleted file mode 100644
    index 0305d6e6..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/TrieNode.java.html
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TrieNode.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.core.services.openai.categorization</a> &gt; <span class="el_source">TrieNode.java</span></div><h1>TrieNode.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.core.services.openai.categorization;
    -
    -import java.util.HashMap;
    -import java.util.Map;
    -import io.sentrius.sso.core.model.categorization.CommandCategory;
    -
    -<span class="nc" id="L7">public class TrieNode {</span>
    -<span class="nc" id="L8">    Map&lt;String, TrieNode&gt; children = new HashMap&lt;&gt;();</span>
    -    CommandCategory commandCategory; // Store the CommandCategory at the end node
    -<span class="nc" id="L10">    boolean isEndOfCommand = false;</span>
    -<span class="nc" id="L11">    boolean isWildcard = false; // Marks this node as a wildcard</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.html
    deleted file mode 100644
    index 79686475..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.core.services.openai.categorization</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.core.services.openai.categorization</span></div><h1>io.sentrius.sso.core.services.openai.categorization</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">365 of 365</td><td class="ctr2">0%</td><td class="bar">24 of 24</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">85</td><td class="ctr2">85</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="CommandTrie.html" class="el_class">CommandTrie</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="179" alt="179"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h1">36</td><td class="ctr2" id="i1">36</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="CommandCategorizer.html" class="el_class">CommandCategorizer</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="115" height="10" title="172" alt="172"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h0">45</td><td class="ctr2" id="i0">45</td><td class="ctr1" id="j0">8</td><td class="ctr2" id="k0">8</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="TrieNode.html" class="el_class">TrieNode</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.source.html
    deleted file mode 100644
    index 870e484c..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai.categorization/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.core.services.openai.categorization</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.core.services.openai.categorization</span></div><h1>io.sentrius.sso.core.services.openai.categorization</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">365 of 365</td><td class="ctr2">0%</td><td class="bar">24 of 24</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">85</td><td class="ctr2">85</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="CommandTrie.java.html" class="el_source">CommandTrie.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="179" alt="179"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h1">36</td><td class="ctr2" id="i1">36</td><td class="ctr1" id="j1">7</td><td class="ctr2" id="k1">7</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a0"><a href="CommandCategorizer.java.html" class="el_source">CommandCategorizer.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="115" height="10" title="172" alt="172"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h0">45</td><td class="ctr2" id="i0">45</td><td class="ctr1" id="j0">8</td><td class="ctr2" id="k0">8</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a2"><a href="TrieNode.java.html" class="el_source">TrieNode.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.html
    deleted file mode 100644
    index 9af87b21..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITerminalService</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.core.services.openai</a> &gt; <span class="el_class">OpenAITerminalService</span></div><h1>OpenAITerminalService</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">161 of 161</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="OpenAITerminalService.java.html#L36" class="el_method">isEnabled()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="95" alt="95"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="OpenAITerminalService.java.html#L68" class="el_method">lambda$analyzeTerminalLogs$0(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="54" height="10" title="43" alt="43"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="OpenAITerminalService.java.html#L21" class="el_method">OpenAITerminalService(IntegrationSecurityTokenService)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="OpenAITerminalService.java.html#L66" class="el_method">analyzeTerminalLogs(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="OpenAITerminalService.java.html#L20" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="OpenAITerminalService.java.html#L31" class="el_method">getName()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.java.html
    deleted file mode 100644
    index ba588cbc..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITerminalService.java.html
    +++ /dev/null
    @@ -1,82 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITerminalService.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.core.services.openai</a> &gt; <span class="el_source">OpenAITerminalService.java</span></div><h1>OpenAITerminalService.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.core.services.openai;
    -
    -
    -import java.util.concurrent.CompletableFuture;
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import io.sentrius.sso.core.model.security.IntegrationSecurityToken;
    -import io.sentrius.sso.core.integrations.external.ExternalIntegrationDTO;
    -import io.sentrius.sso.core.services.security.IntegrationSecurityTokenService;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.GenerativeAPI;
    -import io.sentrius.sso.genai.GeneratorConfiguration;
    -import io.sentrius.sso.genai.TerminalComplianceScorer;
    -import io.sentrius.sso.genai.TerminalLogConfiguration;
    -import io.sentrius.sso.security.ApiKey;
    -import lombok.RequiredArgsConstructor;
    -import lombok.extern.slf4j.Slf4j;
    -import org.springframework.stereotype.Service;
    -
    -@Service
    -<span class="nc" id="L20">@Slf4j</span>
    -<span class="nc" id="L21">@RequiredArgsConstructor</span>
    -public class OpenAITerminalService implements io.sentrius.sso.core.services.PluggableServices {
    -
    -    final IntegrationSecurityTokenService integrationSecurityTokenService;
    -
    -<span class="nc" id="L26">    IntegrationSecurityToken openAiToken = null;</span>
    -
    -<span class="nc" id="L28">    TerminalComplianceScorer terminalComplianceScorer = null;</span>
    -
    -    public String getName() {
    -<span class="nc" id="L31">        return &quot;openai&quot;;</span>
    -    }
    -
    -    @Override
    -    public boolean isEnabled() {
    -<span class="nc bnc" id="L36" title="All 2 branches missed.">        if (null == openAiToken) {</span>
    -<span class="nc" id="L37">            synchronized (this) {</span>
    -<span class="nc bnc" id="L38" title="All 2 branches missed.">                if (null == openAiToken) {</span>
    -<span class="nc" id="L39">                    log.info(&quot;setting open ai token&quot;);</span>
    -<span class="nc" id="L40">                    openAiToken = integrationSecurityTokenService.findByConnectionType(&quot;openai&quot;).stream().findFirst().orElse(null);</span>
    -<span class="nc bnc" id="L41" title="All 2 branches missed.">                    if (openAiToken == null) {</span>
    -<span class="nc" id="L42">                        log.info(&quot;no integration&quot;);</span>
    -<span class="nc" id="L43">                        return false;</span>
    -                    }
    -<span class="nc" id="L45">                    ExternalIntegrationDTO externalIntegrationDTO = null;</span>
    -                    try {
    -<span class="nc" id="L47">                        externalIntegrationDTO = JsonUtil.MAPPER.readValue(openAiToken.getConnectionInfo(),</span>
    -                            ExternalIntegrationDTO.class);
    -<span class="nc" id="L49">                    } catch (JsonProcessingException e) {</span>
    -<span class="nc" id="L50">                        throw new RuntimeException(e);</span>
    -<span class="nc" id="L51">                    }</span>
    -                    ApiKey key =
    -<span class="nc" id="L53">                        ApiKey.builder().apiKey(externalIntegrationDTO.getApiToken()).principal(externalIntegrationDTO.getUsername()).build();</span>
    -<span class="nc" id="L54">                    terminalComplianceScorer = new TerminalComplianceScorer(key, new GenerativeAPI(key),</span>
    -<span class="nc" id="L55">                        GeneratorConfiguration.builder().build(), TerminalLogConfiguration.builder().build()</span>
    -                    );
    -                }
    -<span class="nc" id="L58">            }</span>
    -        }
    -<span class="nc bnc" id="L60" title="All 2 branches missed.">        log.info(&quot;openai enabled: &quot; + (openAiToken != null));</span>
    -<span class="nc bnc" id="L61" title="All 2 branches missed.">        return openAiToken != null;</span>
    -    }
    -
    -    // Asynchronous method for scoring terminal commands
    -    public CompletableFuture&lt;Boolean&gt; analyzeTerminalLogs(String terminalLog) {
    -<span class="nc" id="L66">        return CompletableFuture.supplyAsync(() -&gt; {</span>
    -            try {
    -<span class="nc bnc" id="L68" title="All 2 branches missed.">                log.info(&quot;analyzing terminal log {}&quot;, (terminalComplianceScorer == null) );</span>
    -                // Submit terminal log to OpenAI
    -<span class="nc" id="L70">                double score = terminalComplianceScorer.generate(terminalLog);</span>
    -<span class="nc" id="L71">                log.info(&quot;score: {}&quot;, score);</span>
    -                // Return true if malicious (e.g., score &gt; 0.8)
    -<span class="nc bnc" id="L73" title="All 2 branches missed.">                return score &gt;= 0.85;</span>
    -<span class="nc" id="L74">            } catch (Exception e) {</span>
    -<span class="nc" id="L75">                log.info(&quot;Failed to analyze terminal log&quot;, e);</span>
    -<span class="nc" id="L76">                e.printStackTrace();</span>
    -<span class="nc" id="L77">                throw new RuntimeException(&quot;Failed to analyze terminal log&quot;, e);</span>
    -            }
    -        });
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.html
    deleted file mode 100644
    index e2647cdd..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITwoPartyMonitorService</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.core.services.openai</a> &gt; <span class="el_class">OpenAITwoPartyMonitorService</span></div><h1>OpenAITwoPartyMonitorService</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">153 of 153</td><td class="ctr2">0%</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="OpenAITwoPartyMonitorService.java.html#L38" class="el_method">isEnabled()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="95" alt="95"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="OpenAITwoPartyMonitorService.java.html#L70" class="el_method">lambda$analyzeTerminalLogs$0(TwoPartyRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="44" height="10" title="35" alt="35"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">8</td><td class="ctr2" id="i1">8</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="OpenAITwoPartyMonitorService.java.html#L23" class="el_method">OpenAITwoPartyMonitorService(IntegrationSecurityTokenService)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="OpenAITwoPartyMonitorService.java.html#L68" class="el_method">analyzeTerminalLogs(TwoPartyRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a5"><a href="OpenAITwoPartyMonitorService.java.html#L22" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="OpenAITwoPartyMonitorService.java.html#L33" class="el_method">getName()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.java.html
    deleted file mode 100644
    index 62270b6b..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/OpenAITwoPartyMonitorService.java.html
    +++ /dev/null
    @@ -1,84 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITwoPartyMonitorService.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.core.services.openai</a> &gt; <span class="el_source">OpenAITwoPartyMonitorService.java</span></div><h1>OpenAITwoPartyMonitorService.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.core.services.openai;
    -
    -
    -import java.util.concurrent.CompletableFuture;
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import io.sentrius.sso.core.model.LLMResponse;
    -import io.sentrius.sso.core.model.security.IntegrationSecurityToken;
    -import io.sentrius.sso.core.integrations.external.ExternalIntegrationDTO;
    -import io.sentrius.sso.core.services.security.IntegrationSecurityTokenService;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.GenerativeAPI;
    -import io.sentrius.sso.genai.GeneratorConfiguration;
    -import io.sentrius.sso.genai.OpenAITwoPartyMonitor;
    -import io.sentrius.sso.genai.TerminalLogConfiguration;
    -import io.sentrius.sso.genai.model.TwoPartyRequest;
    -import io.sentrius.sso.security.ApiKey;
    -import lombok.RequiredArgsConstructor;
    -import lombok.extern.slf4j.Slf4j;
    -import org.springframework.stereotype.Service;
    -
    -@Service
    -<span class="nc" id="L22">@Slf4j</span>
    -<span class="nc" id="L23">@RequiredArgsConstructor</span>
    -public class OpenAITwoPartyMonitorService implements io.sentrius.sso.core.services.PluggableServices {
    -
    -    final IntegrationSecurityTokenService integrationSecurityTokenService;
    -
    -<span class="nc" id="L28">    IntegrationSecurityToken openAiToken = null;</span>
    -
    -<span class="nc" id="L30">    OpenAITwoPartyMonitor terminalComplianceScorer = null;</span>
    -
    -    public String getName() {
    -<span class="nc" id="L33">        return &quot;openaitwoparty&quot;;</span>
    -    }
    -
    -    @Override
    -    public boolean isEnabled() {
    -<span class="nc bnc" id="L38" title="All 2 branches missed.">        if (null == openAiToken) {</span>
    -<span class="nc" id="L39">            synchronized (this) {</span>
    -<span class="nc bnc" id="L40" title="All 2 branches missed.">                if (null == openAiToken) {</span>
    -<span class="nc" id="L41">                    log.info(&quot;setting open ai token&quot;);</span>
    -<span class="nc" id="L42">                    openAiToken = integrationSecurityTokenService.findByConnectionType(&quot;openai&quot;).stream().findFirst().orElse(null);</span>
    -<span class="nc bnc" id="L43" title="All 2 branches missed.">                    if (openAiToken == null) {</span>
    -<span class="nc" id="L44">                        log.info(&quot;no integration&quot;);</span>
    -<span class="nc" id="L45">                        return false;</span>
    -                    }
    -<span class="nc" id="L47">                    ExternalIntegrationDTO externalIntegrationDTO = null;</span>
    -                    try {
    -<span class="nc" id="L49">                        externalIntegrationDTO = JsonUtil.MAPPER.readValue(openAiToken.getConnectionInfo(),</span>
    -                            ExternalIntegrationDTO.class);
    -<span class="nc" id="L51">                    } catch (JsonProcessingException e) {</span>
    -<span class="nc" id="L52">                        throw new RuntimeException(e);</span>
    -<span class="nc" id="L53">                    }</span>
    -                    ApiKey key =
    -<span class="nc" id="L55">                        ApiKey.builder().apiKey(externalIntegrationDTO.getApiToken()).principal(externalIntegrationDTO.getUsername()).build();</span>
    -<span class="nc" id="L56">                    terminalComplianceScorer = new OpenAITwoPartyMonitor(key, new GenerativeAPI(key),</span>
    -<span class="nc" id="L57">                        GeneratorConfiguration.builder().build(), TerminalLogConfiguration.builder().build()</span>
    -                    );
    -                }
    -<span class="nc" id="L60">            }</span>
    -        }
    -<span class="nc bnc" id="L62" title="All 2 branches missed.">        log.info(&quot;openai enabled: &quot; + (openAiToken != null));</span>
    -<span class="nc bnc" id="L63" title="All 2 branches missed.">        return openAiToken != null;</span>
    -    }
    -
    -    // Asynchronous method for scoring terminal commands
    -    public CompletableFuture&lt;LLMResponse&gt; analyzeTerminalLogs(TwoPartyRequest terminalLog) {
    -<span class="nc" id="L68">        return CompletableFuture.supplyAsync(() -&gt; {</span>
    -            try {
    -<span class="nc bnc" id="L70" title="All 2 branches missed.">                log.info(&quot;analyzing terminal log {}&quot;, (terminalComplianceScorer == null) );</span>
    -                // Submit terminal log to OpenAI
    -<span class="nc" id="L72">                var response =  terminalComplianceScorer.generate(terminalLog);</span>
    -<span class="nc" id="L73">                log.info(&quot;score: {}&quot;, response.getScore());</span>
    -                // Return true if malicious (e.g., score &gt; 0.8)
    -<span class="nc" id="L75">                return response;</span>
    -<span class="nc" id="L76">            } catch (Exception e) {</span>
    -<span class="nc" id="L77">                log.info(&quot;Failed to analyze terminal log&quot;, e);</span>
    -<span class="nc" id="L78">                e.printStackTrace();</span>
    -<span class="nc" id="L79">                throw new RuntimeException(&quot;Failed to analyze terminal log&quot;, e);</span>
    -            }
    -        });
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.html
    deleted file mode 100644
    index ea8b7274..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.core.services.openai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.core.services.openai</span></div><h1>io.sentrius.sso.core.services.openai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">314 of 314</td><td class="ctr2">0%</td><td class="bar">26 of 26</td><td class="ctr2">0%</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">66</td><td class="ctr2">66</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="OpenAITerminalService.html" class="el_class">OpenAITerminalService</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="161" alt="161"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">33</td><td class="ctr2" id="i0">33</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="OpenAITwoPartyMonitorService.html" class="el_class">OpenAITwoPartyMonitorService</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="114" height="10" title="153" alt="153"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">12</td><td class="ctr2" id="g1">12</td><td class="ctr1" id="h1">33</td><td class="ctr2" id="i1">33</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k1">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.source.html
    deleted file mode 100644
    index 996ab057..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.core.services.openai/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.core.services.openai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.core.services.openai</span></div><h1>io.sentrius.sso.core.services.openai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">314 of 314</td><td class="ctr2">0%</td><td class="bar">26 of 26</td><td class="ctr2">0%</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">66</td><td class="ctr2">66</td><td class="ctr1">12</td><td class="ctr2">12</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="OpenAITerminalService.java.html" class="el_source">OpenAITerminalService.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="161" alt="161"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="14" alt="14"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">33</td><td class="ctr2" id="i0">33</td><td class="ctr1" id="j0">6</td><td class="ctr2" id="k0">6</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="OpenAITwoPartyMonitorService.java.html" class="el_source">OpenAITwoPartyMonitorService.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="114" height="10" title="153" alt="153"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="102" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">12</td><td class="ctr2" id="g1">12</td><td class="ctr1" id="h1">33</td><td class="ctr2" id="i1">33</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k1">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.html
    deleted file mode 100644
    index 30b2dd1b..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AgentCommunicationMemoryStore</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.spring.ai</a> &gt; <span class="el_class">AgentCommunicationMemoryStore</span></div><h1>AgentCommunicationMemoryStore</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a3"><a href="AgentCommunicationMemoryStore.java.html#L39" class="el_method">get(String, int)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="63" alt="63"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="AgentCommunicationMemoryStore.java.html#L29" class="el_method">add(String, List)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="23" alt="23"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">5</td><td class="ctr2" id="i1">5</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="AgentCommunicationMemoryStore.java.html#L21" class="el_method">AgentCommunicationMemoryStore(AgentService)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">4</td><td class="ctr2" id="i2">4</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="AgentCommunicationMemoryStore.java.html#L64" class="el_method">clear(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="AgentCommunicationMemoryStore.java.html#L16" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.java.html
    deleted file mode 100644
    index 80ce1669..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/AgentCommunicationMemoryStore.java.html
    +++ /dev/null
    @@ -1,67 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>AgentCommunicationMemoryStore.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.spring.ai</a> &gt; <span class="el_source">AgentCommunicationMemoryStore.java</span></div><h1>AgentCommunicationMemoryStore.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.spring.ai;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -import java.util.UUID;
    -import java.util.concurrent.ConcurrentHashMap;
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import io.sentrius.sso.core.model.chat.AgentCommunication;
    -import io.sentrius.sso.core.services.agents.AgentService;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.Message;
    -import lombok.extern.slf4j.Slf4j;
    -import org.springframework.stereotype.Service;
    -
    -
    -<span class="nc" id="L16">@Slf4j</span>
    -@Service
    -public class AgentCommunicationMemoryStore  {
    -
    -    private final AgentService service;
    -<span class="nc" id="L21">    private final ConcurrentHashMap&lt;String, List&lt;Message&gt;&gt; inMemoryCache = new ConcurrentHashMap&lt;&gt;();</span>
    -
    -<span class="nc" id="L23">    public AgentCommunicationMemoryStore(AgentService service) {</span>
    -<span class="nc" id="L24">        this.service = service;</span>
    -<span class="nc" id="L25">    }</span>
    -
    -
    -    public void add(String conversationId, List&lt;Message&gt; messages) {
    -<span class="nc bnc" id="L29" title="All 2 branches missed.">        if (inMemoryCache.containsKey(conversationId)) {</span>
    -<span class="nc" id="L30">            log.info(&quot;Adding messages to existing conversationId: {}&quot;, conversationId);</span>
    -<span class="nc" id="L31">            inMemoryCache.get(conversationId).addAll(messages);</span>
    -        }
    -        else {
    -<span class="nc" id="L34">            log.info(&quot;Not adding messages from conversation : {}&quot;, conversationId);</span>
    -        }
    -<span class="nc" id="L36">    }</span>
    -
    -    public List&lt;Message&gt; get(String conversationId, int lastN) {
    -<span class="nc bnc" id="L39" title="All 2 branches missed.">        if (inMemoryCache.containsKey(conversationId)) {</span>
    -<span class="nc" id="L40">            return inMemoryCache.get(conversationId);</span>
    -        }
    -
    -<span class="nc" id="L43">        List&lt;AgentCommunication&gt; comms = service.getCommunications(UUID.fromString(conversationId));</span>
    -<span class="nc" id="L44">        List&lt;Message&gt; messages = new ArrayList&lt;&gt;();</span>
    -
    -<span class="nc bnc" id="L46" title="All 2 branches missed.">        for (AgentCommunication comm : comms) {</span>
    -<span class="nc bnc" id="L47" title="All 2 branches missed.">            if (comm.getMessageType().equals(&quot;chat_request&quot;)) {</span>
    -                try {
    -<span class="nc" id="L49">                    io.sentrius.sso.genai.Message msg = JsonUtil.MAPPER.readValue(comm.getPayload(),</span>
    -                        io.sentrius.sso.genai.Message.class);
    -<span class="nc" id="L51">                    messages.add(msg);</span>
    -<span class="nc" id="L52">                } catch (JsonProcessingException e) {</span>
    -<span class="nc" id="L53">                    throw new RuntimeException(e);</span>
    -<span class="nc" id="L54">                }</span>
    -            }
    -<span class="nc" id="L56">        }</span>
    -
    -        // Store to cache for quick reuse
    -<span class="nc" id="L59">        inMemoryCache.put(conversationId, messages);</span>
    -<span class="nc" id="L60">        return messages;</span>
    -    }
    -
    -    public void clear(String conversationId) {
    -<span class="nc" id="L64">        inMemoryCache.remove(conversationId);</span>
    -<span class="nc" id="L65">    }</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.html
    deleted file mode 100644
    index 5d4a26a8..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.spring.ai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai.spring.ai</span></div><h1>io.sentrius.sso.genai.spring.ai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AgentCommunicationMemoryStore.html" class="el_class">AgentCommunicationMemoryStore</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="107" alt="107"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.source.html
    deleted file mode 100644
    index 13fcf26e..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.spring.ai/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.spring.ai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai.spring.ai</span></div><h1>io.sentrius.sso.genai.spring.ai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">8 of 8</td><td class="ctr2">0%</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="AgentCommunicationMemoryStore.java.html" class="el_source">AgentCommunicationMemoryStore.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="107" alt="107"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="8" alt="8"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">9</td><td class="ctr2" id="g0">9</td><td class="ctr1" id="h0">26</td><td class="ctr2" id="i0">26</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.html
    deleted file mode 100644
    index 6be34fd1..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalSuggestors</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.suggestions</a> &gt; <span class="el_class">TerminalSuggestors</span></div><h1>TerminalSuggestors</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">131 of 131</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="TerminalSuggestors.java.html#L46" class="el_method">generate(TwoPartyRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="92" alt="92"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">16</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="TerminalSuggestors.java.html#L68" class="el_method">generateUserInput(TwoPartyRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="TerminalSuggestors.java.html#L28" class="el_method">TerminalSuggestors(TokenProvider, GenerativeAPI, GeneratorConfiguration, TerminalLogConfiguration)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="TerminalSuggestors.java.html#L38" class="el_method">generateInput(TwoPartyRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="TerminalSuggestors.java.html#L22" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.java.html
    deleted file mode 100644
    index a1a26210..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/TerminalSuggestors.java.html
    +++ /dev/null
    @@ -1,89 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalSuggestors.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.suggestions</a> &gt; <span class="el_source">TerminalSuggestors.java</span></div><h1>TerminalSuggestors.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.suggestions;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.fasterxml.jackson.databind.node.ObjectNode;
    -import io.sentrius.sso.core.model.LLMResponse;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.DataGenerator;
    -import io.sentrius.sso.genai.GenerativeAPI;
    -import io.sentrius.sso.genai.GeneratorConfiguration;
    -import io.sentrius.sso.genai.Response;
    -import io.sentrius.sso.genai.TerminalLogConfiguration;
    -import io.sentrius.sso.genai.model.TwoPartyRequest;
    -import io.sentrius.sso.genai.model.endpoints.ChatApiEndpointRequest;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import io.sentrius.sso.security.TokenProvider;
    -import lombok.extern.slf4j.Slf4j;
    -import org.thymeleaf.util.StringUtils;
    -
    -/**
    - * Query compliance scorer with user defined rules to be provided to OpenAI
    - */
    -<span class="nc" id="L22">@Slf4j</span>
    -public class TerminalSuggestors extends DataGenerator&lt;TwoPartyRequest, LLMResponse&gt; {
    -
    -    public TerminalSuggestors(
    -        TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config,
    -        TerminalLogConfiguration complianceConfig) {
    -<span class="nc" id="L28">        super(token, generator, config);</span>
    -<span class="nc" id="L29">    }</span>
    -
    -    /**
    -     * Generates input for the generative AI endpoint.
    -     *
    -     * @return Question to be asked to the generative AI endpoint.
    -     */
    -    @Override
    -    public String generateInput(TwoPartyRequest on) {
    -<span class="nc" id="L38">        String queryStr = on.getSystemInput();</span>
    -
    -
    -<span class="nc" id="L41">        return queryStr;</span>
    -    }
    -
    -    public LLMResponse generate(TwoPartyRequest on) throws HttpException, JsonProcessingException {
    -        ChatApiEndpointRequest request =
    -<span class="nc" id="L46">            ChatApiEndpointRequest.builder().userInput(generateUserInput( on)).systemInput(generateInput(on)).build();</span>
    -<span class="nc" id="L47">        log.info(&quot;Generating compliance score for: &quot; + on);</span>
    -<span class="nc" id="L48">        request.setTemperature(0.8f);</span>
    -<span class="nc" id="L49">        Response hello = api.sample(request, Response.class);</span>
    -        try{
    -<span class="nc" id="L51">            var resp = hello.concatenateResponses();</span>
    -<span class="nc" id="L52">            var objectNode = JsonUtil.MAPPER.readValue(resp, ObjectNode.class);</span>
    -<span class="nc" id="L53">            var dbl = Double.valueOf(objectNode.get(&quot;score&quot;).asText());</span>
    -<span class="nc" id="L54">            log.info(&quot;score would be {}&quot;, resp);</span>
    -<span class="nc" id="L55">            log.info(&quot;question would be {}&quot;, objectNode.get(&quot;question&quot;).asText());</span>
    -<span class="nc" id="L56">            var bldr = LLMResponse.builder();</span>
    -<span class="nc bnc" id="L57" title="All 2 branches missed.">            if (objectNode.has(&quot;question&quot;)){</span>
    -<span class="nc" id="L58">                bldr.question(objectNode.get(&quot;question&quot;).asText());</span>
    -            }
    -<span class="nc" id="L60">            return bldr.score(dbl).response(objectNode.get(&quot;explanation&quot;).asText()).build();</span>
    -<span class="nc" id="L61">        } catch (Exception e) {</span>
    -<span class="nc" id="L62">            log.info(&quot;Error parsing compliance score: &quot; + hello.concatenateResponses());</span>
    -<span class="nc" id="L63">            return LLMResponse.builder().score(0.0).response(&quot;Error parsing compliance score&quot;).build();</span>
    -        }
    -    }
    -
    -    private String generateUserInput(TwoPartyRequest userInput) {
    -<span class="nc" id="L68">        String queryStr = &quot;&quot;;</span>
    -<span class="nc bnc" id="L69" title="All 4 branches missed.">        if (!StringUtils.isEmpty(userInput.getPreviousPrompt()) &amp;&amp; !StringUtils.isEmpty(userInput.getPromptResponse())) {</span>
    -<span class="nc" id="L70">            queryStr += &quot;You previously asked the user of their session: &quot; + userInput.getPreviousPrompt() + &quot;. This&quot; +</span>
    -            &quot; &quot; +
    -<span class="nc" id="L72">            &quot;was their response: &quot; + userInput.getPromptResponse() + &quot;. Can you incorporate this information into &quot; +</span>
    -            &quot;your risk assessment and confidence score? If they are avoiding your question don't re-ask, just raise &quot; +
    -                &quot;your risk score.&quot;;
    -        }
    -<span class="nc" id="L76">        queryStr +=  &quot;Can you give me a confidence score from 0 to 1, to two decimal places, on whether the next 10 &quot; +</span>
    -            &quot;terminal log &quot; +
    -            &quot;output&quot; +
    -            &quot; from&quot; +
    -        &quot; a single terminal session are exhibiting risky behavior, where 0 is normal and 1 would be a session you&quot; +
    -            &quot; acting as a human would ask to stop. Provide the score, an explanation of why, and a question to ask &quot; +
    -            &quot;the user, but only if needed, in JSON with the fields score, explanation, and question. Here is the &quot; +
    -            &quot;user's last ten &quot; +
    -<span class="nc" id="L84">            &quot;commands: &quot; + userInput.getUserInput() + &quot;.&quot;;</span>
    -<span class="nc" id="L85">        return queryStr;</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.html
    deleted file mode 100644
    index a279cda7..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.suggestions</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai.suggestions</span></div><h1>io.sentrius.sso.genai.suggestions</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">131 of 131</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="TerminalSuggestors.html" class="el_class">TerminalSuggestors</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="131" alt="131"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">28</td><td class="ctr2" id="i0">28</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.source.html
    deleted file mode 100644
    index 3492a8af..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai.suggestions/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.suggestions</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai.suggestions</span></div><h1>io.sentrius.sso.genai.suggestions</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">131 of 131</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="TerminalSuggestors.java.html" class="el_source">TerminalSuggestors.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="131" alt="131"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">8</td><td class="ctr2" id="g0">8</td><td class="ctr1" id="h0">28</td><td class="ctr2" id="i0">28</td><td class="ctr1" id="j0">5</td><td class="ctr2" id="k0">5</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.html
    deleted file mode 100644
    index b73495b8..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatConversation</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">ChatConversation</span></div><h1>ChatConversation</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">118 of 118</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">21</td><td class="ctr2">21</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a1"><a href="ChatConversation.java.html#L34" class="el_method">generate(Conversation)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="105" alt="105"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">4</td><td class="ctr2" id="g0">4</td><td class="ctr1" id="h0">17</td><td class="ctr2" id="i0">17</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ChatConversation.java.html#L21" class="el_method">ChatConversation(TokenProvider, GenerativeAPI, GeneratorConfiguration)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ChatConversation.java.html#L16" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="ChatConversation.java.html#L26" class="el_method">generateInput(Conversation)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.java.html
    deleted file mode 100644
    index 448f5cba..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ChatConversation.java.html
    +++ /dev/null
    @@ -1,58 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatConversation.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">ChatConversation.java</span></div><h1>ChatConversation.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.fasterxml.jackson.databind.node.ObjectNode;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.model.LLMResponse;
    -import io.sentrius.sso.genai.model.Conversation;
    -import io.sentrius.sso.genai.model.endpoints.ConversationRequest;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import io.sentrius.sso.security.TokenProvider;
    -import lombok.extern.slf4j.Slf4j;
    -
    -/**
    - * Query compliance scorer with user defined rules to be provided to OpenAI
    - */
    -<span class="nc" id="L16">@Slf4j</span>
    -public class ChatConversation extends DataGenerator&lt;Conversation, LLMResponse&gt; {
    -
    -    public ChatConversation(
    -        TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config) {
    -<span class="nc" id="L21">        super(token, generator, config);</span>
    -<span class="nc" id="L22">    }</span>
    -
    -    @Override
    -    protected String generateInput(Conversation on) {
    -<span class="nc" id="L26">        return on.getSystemConfines();</span>
    -    }
    -
    -
    -    @Override
    -    public LLMResponse generate(Conversation on) throws HttpException, JsonProcessingException {
    -
    -        ConversationRequest request =
    -<span class="nc" id="L34">            ConversationRequest.builder().systemInput(generateInput(on)).newMessage(</span>
    -<span class="nc" id="L35">                on.getNewUserMessage()).user(</span>
    -<span class="nc" id="L36">                &quot;user&quot;).chatWithHistory(on.getPreviousMessages()).build();</span>
    -<span class="nc" id="L37">        log.info(&quot;Generating compliance score for: &quot; + on);</span>
    -<span class="nc" id="L38">        request.setTemperature(0.8f);</span>
    -<span class="nc" id="L39">        Response hello = api.sample(request, Response.class);</span>
    -        try{
    -<span class="nc" id="L41">            var resp = hello.concatenateResponses();</span>
    -<span class="nc" id="L42">            var objectNode = JsonUtil.MAPPER.readValue(resp, ObjectNode.class);</span>
    -<span class="nc bnc" id="L43" title="All 2 branches missed.">            var message = objectNode.get(&quot;message&quot;) != null ? objectNode.get(&quot;message&quot;).asText() : &quot;&quot;;</span>
    -<span class="nc bnc" id="L44" title="All 2 branches missed.">            var alert = objectNode.get(&quot;alert&quot;) != null ? objectNode.get(&quot;alert&quot;).asBoolean() : false;</span>
    -
    -<span class="nc" id="L46">            var terminalMessage = objectNode.get(&quot;terminal&quot;);</span>
    -<span class="nc bnc" id="L47" title="All 2 branches missed.">            if (null != terminalMessage) {</span>
    -<span class="nc" id="L48">                return LLMResponse.builder().role(&quot;system&quot;).content(message).terminalMessage(terminalMessage.asText()).alert(alert).build();</span>
    -            }
    -<span class="nc" id="L50">            return LLMResponse.builder().role(&quot;system&quot;).content(message).alert(alert).build();</span>
    -<span class="nc" id="L51">        } catch (Exception e) {</span>
    -<span class="nc" id="L52">            log.info(&quot;Error parsing compliance score: &quot; + hello.concatenateResponses());</span>
    -<span class="nc" id="L53">            return LLMResponse.builder().role(&quot;system&quot;).content(&quot;Error parsing response&quot;).build();</span>
    -        }
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilder.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilder.html
    deleted file mode 100644
    index f17a3d2d..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceConfiguration.ComplianceConfigurationBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">ComplianceConfiguration.ComplianceConfigurationBuilder</span></div><h1>ComplianceConfiguration.ComplianceConfigurationBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">17 of 17</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="ComplianceConfiguration.java.html#L30" class="el_method">rules(List)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ComplianceConfiguration.java.html#L30" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="66" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ComplianceConfiguration.java.html#L30" class="el_method">ComplianceConfiguration.ComplianceConfigurationBuilder()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl.html
    deleted file mode 100644
    index b25034f8..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceConfiguration.ComplianceConfigurationBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">ComplianceConfiguration.ComplianceConfigurationBuilderImpl</span></div><h1>ComplianceConfiguration.ComplianceConfigurationBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="ComplianceConfiguration.java.html#L30" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ComplianceConfiguration.java.html#L30" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.html
    deleted file mode 100644
    index 898cc061..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceConfiguration</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">ComplianceConfiguration</span></div><h1>ComplianceConfiguration</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">107 of 107</td><td class="ctr2">0%</td><td class="bar">16 of 16</td><td class="ctr2">0%</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a6"><a href="ComplianceConfiguration.java.html#L29" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="ComplianceConfiguration.java.html#L29" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="ComplianceConfiguration.java.html#L30" class="el_method">ComplianceConfiguration(ComplianceConfiguration.ComplianceConfigurationBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="44" height="10" title="14" alt="14"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="ComplianceConfiguration.java.html#L31" class="el_method">ComplianceConfiguration(List)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="ComplianceConfiguration.java.html#L32" class="el_method">ComplianceConfiguration()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a10"><a href="ComplianceConfiguration.java.html#L29" class="el_method">toString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="ComplianceConfiguration.java.html#L30" class="el_method">$default$rules()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="ComplianceConfiguration.java.html#L30" class="el_method">builder()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="ComplianceConfiguration.java.html#L29" class="el_method">setRules(List)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="ComplianceConfiguration.java.html#L36" class="el_method">getRules()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="ComplianceConfiguration.java.html#L29" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.java.html
    deleted file mode 100644
    index 9a21280f..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceConfiguration.java.html
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceConfiguration.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">ComplianceConfiguration.java</span></div><h1>ComplianceConfiguration.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -import io.sentrius.sso.genai.model.ComplianceRule;
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * The ComplianceConfiguration class represents the configuration settings for compliance checks.
    - * It provides methods for setting and retrieving configuration values such as the maximum allowed error rate for
    - * compliance checks and the types of compliance checks to perform.
    - *
    - * This class provides the following methods:
    - *
    - * - setMaxErrorRate(double rate): Sets the maximum allowed error rate for compliance checks.
    - * - getMaxErrorRate(): Returns the current maximum allowed error rate for compliance checks.
    - * - setComplianceTypes(List&lt;String&gt; types): Sets the types of compliance checks to perform.
    - * - getComplianceTypes(): Returns the current types of compliance checks to perform.
    - *
    - * The ComplianceConfiguration class is part of the compliance checking subsystem and is intended to be used in
    - * conjunction with other classes that perform compliance checks on data. By configuring the compliance configuration
    - * object, users can specify the types of checks to be performed, and the maximum allowed error rate for those checks.
    - * This enables users to ensure that the data they are working with complies with the relevant standards or regulations.
    - */
    -<span class="nc bnc" id="L29" title="All 14 branches missed.">@Data</span>
    -<span class="nc bnc" id="L30" title="All 2 branches missed.">@SuperBuilder</span>
    -<span class="nc" id="L31">@AllArgsConstructor</span>
    -<span class="nc" id="L32">@NoArgsConstructor</span>
    -public class ComplianceConfiguration {
    -
    -    @Builder.Default
    -<span class="nc" id="L36">    List&lt;ComplianceRule&gt; rules = new ArrayList&lt;&gt;();</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.html
    deleted file mode 100644
    index a9abc7da..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceScorer</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">ComplianceScorer</span></div><h1>ComplianceScorer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">51 of 51</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="ComplianceScorer.java.html#L40" class="el_method">generate(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">9</td><td class="ctr2" id="i0">9</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="ComplianceScorer.java.html#L29" class="el_method">ComplianceScorer(TokenProvider, GenerativeAPI, GeneratorConfiguration, ComplianceConfiguration)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="28" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">3</td><td class="ctr2" id="i1">3</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="ComplianceScorer.java.html#L23" class="el_method">static {...}</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.java.html
    deleted file mode 100644
    index 4fc9b81b..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/ComplianceScorer.java.html
    +++ /dev/null
    @@ -1,53 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceScorer.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">ComplianceScorer.java</span></div><h1>ComplianceScorer.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import io.sentrius.sso.security.TokenProvider;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import io.sentrius.sso.genai.model.endpoints.ChatApiEndpointRequest;
    -import lombok.extern.slf4j.Slf4j;
    -
    -/**
    - * The ComplianceScorer class contains methods for generating compliance scores.
    - * The generate() method returns a double that represents the compliance score.
    - *
    - * This class can be used to efficiently score compliance in various domains, including but not limited to
    - * healthcare, finance, and government regulations.
    - *
    - * It is recommended to initialize the ComplianceScorer with relevant settings and parameters for a specific
    - * compliance scenario. The generate() method can then be called repeatedly on incoming data to obtain
    - * compliance scores in real-time.
    - *
    - * Note: This class does not handle data storage, retrieval or manipulation. It is only intended for
    - * calculating compliance scores based on input data.
    - */
    -<span class="nc" id="L23">@Slf4j</span>
    -public abstract class ComplianceScorer extends DataGenerator&lt;String, Double&gt; {
    -
    -    protected ComplianceConfiguration complianceConfig;
    -
    -    public ComplianceScorer(TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config, ComplianceConfiguration complianceConfig) {
    -<span class="nc" id="L29">        super(token, generator, config);</span>
    -<span class="nc" id="L30">        this.complianceConfig = complianceConfig;</span>
    -<span class="nc" id="L31">    }</span>
    -
    -    /**
    -     * Parses queries from the response.
    -     *
    -     * @return List of queries.
    -     */
    -    @Override
    -    public Double generate(String on) throws HttpException, JsonProcessingException {
    -<span class="nc" id="L40">        ChatApiEndpointRequest request = ChatApiEndpointRequest.builder().userInput(generateInput(on)).build();</span>
    -<span class="nc" id="L41">        log.info(&quot;Generating compliance score for: &quot; + on);</span>
    -<span class="nc" id="L42">        request.setTemperature(0.5f);</span>
    -<span class="nc" id="L43">        Response hello = api.sample(request, Response.class);</span>
    -        try{
    -<span class="nc" id="L45">        var dbl = Double.valueOf(hello.concatenateResponses());</span>
    -<span class="nc" id="L46">        return dbl;</span>
    -<span class="nc" id="L47">        } catch (NumberFormatException e) {</span>
    -<span class="nc" id="L48">            log.info(&quot;Error parsing compliance score: &quot; + hello.concatenateResponses());</span>
    -<span class="nc" id="L49">            return 0.0;</span>
    -        }
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.html
    deleted file mode 100644
    index 1148debd..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>DataGenerator</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">DataGenerator</span></div><h1>DataGenerator</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">12 of 12</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td></tr></tfoot><tbody><tr><td id="a0"><a href="DataGenerator.java.html#L14" class="el_method">DataGenerator(TokenProvider, GenerativeAPI, GeneratorConfiguration)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">5</td><td class="ctr2" id="i0">5</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.java.html
    deleted file mode 100644
    index 37f10333..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/DataGenerator.java.html
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>DataGenerator.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">DataGenerator.java</span></div><h1>DataGenerator.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import io.sentrius.sso.security.TokenProvider;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -
    -public abstract class DataGenerator&lt;I, T&gt; {
    -
    -    protected final TokenProvider token;
    -    protected final GenerativeAPI api;
    -
    -    protected final GeneratorConfiguration config;
    -
    -<span class="nc" id="L14">    public DataGenerator(TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config) {</span>
    -<span class="nc" id="L15">        this.token = token;</span>
    -<span class="nc" id="L16">        this.api = generator;</span>
    -<span class="nc" id="L17">        this.config = config;</span>
    -<span class="nc" id="L18">    }</span>
    -
    -    protected abstract String generateInput(I on);
    -
    -    public abstract T generate(I on ) throws HttpException, JsonProcessingException;
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.html
    deleted file mode 100644
    index d0f22693..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GenerativeAPI</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">GenerativeAPI</span></div><h1>GenerativeAPI</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">140 of 140</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a3"><a href="GenerativeAPI.java.html#L71" class="el_method">sample(ApiEndPointRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">15</td><td class="ctr2" id="i0">15</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="GenerativeAPI.java.html#L35" class="el_method">GenerativeAPI(TokenProvider, OkHttpClient)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="GenerativeAPI.java.html#L56" class="el_method">buildRequestBody(ApiEndPointRequest)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">3</td><td class="ctr2" id="i2">3</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="GenerativeAPI.java.html#L105" class="el_method">sample(ApiEndPointRequest, Class)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="GenerativeAPI.java.html#L45" class="el_method">GenerativeAPI(TokenProvider)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="7" alt="7"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="GenerativeAPI.java.html#L28" class="el_method">static {...}</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.java.html
    deleted file mode 100644
    index 170cec88..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GenerativeAPI.java.html
    +++ /dev/null
    @@ -1,108 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GenerativeAPI.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">GenerativeAPI.java</span></div><h1>GenerativeAPI.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import java.io.IOException;
    -import java.util.Objects;
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.fasterxml.jackson.databind.ObjectMapper;
    -
    -import io.sentrius.sso.security.TokenProvider;
    -import io.sentrius.sso.genai.model.ApiEndPointRequest;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import lombok.extern.slf4j.Slf4j;
    -import okhttp3.MediaType;
    -import okhttp3.OkHttpClient;
    -import okhttp3.Request;
    -import okhttp3.RequestBody;
    -import okhttp3.Response;
    -
    -/**
    - * A GenerativeAPI class represents an API that provides methods for generating requests and samples.
    - * It allows users to build a request body by passing an ApiEndPointRequest object,
    - * and generate a sample using the same object.
    - * Users can also specify the type of the sample they want to generate by passing a Class object.
    - *
    - * @author [Marc Parisi]
    - * @version 1.0
    - * @since 09/03/2021
    - */
    -<span class="nc" id="L28">@Slf4j</span>
    -public class GenerativeAPI {
    -
    -    protected final TokenProvider authToken;
    -
    -    protected OkHttpClient client;
    -
    -<span class="nc" id="L35">    protected final ObjectMapper objectMapper = new ObjectMapper();</span>
    -
    -<span class="nc" id="L37">    public GenerativeAPI(TokenProvider authToken, OkHttpClient client) {</span>
    -<span class="nc" id="L38">        Objects.requireNonNull(authToken);</span>
    -<span class="nc" id="L39">        Objects.requireNonNull(client);</span>
    -<span class="nc" id="L40">        this.client = client;</span>
    -<span class="nc" id="L41">        this.authToken = authToken;</span>
    -<span class="nc" id="L42">    }</span>
    -
    -    public GenerativeAPI(TokenProvider authToken) {
    -<span class="nc" id="L45">        this(authToken, new OkHttpClient());</span>
    -<span class="nc" id="L46">    }</span>
    -
    -    /**
    -     * Builds the request body for an API endpoint request.
    -     *
    -     * @param request the API endpoint request
    -     * @return the request body as a string
    -     */
    -    String buildRequestBody(final ApiEndPointRequest request) {
    -        try {
    -<span class="nc" id="L56">            return objectMapper.writeValueAsString(request.create());</span>
    -<span class="nc" id="L57">        } catch (JsonProcessingException e) {</span>
    -<span class="nc" id="L58">            throw new RuntimeException(e);</span>
    -        }
    -    }
    -
    -    /**
    -     * ask for response message
    -     *
    -     * @param apiRequest
    -     *            Api Request object
    -     *
    -     * @return ChatCompletionResponseBody
    -     */
    -    public String sample(final ApiEndPointRequest apiRequest) throws HttpException {
    -<span class="nc" id="L71">        Objects.requireNonNull(apiRequest);</span>
    -<span class="nc" id="L72">        log.info(&quot;making request to {}&quot;, apiRequest.getEndpoint());</span>
    -<span class="nc" id="L73">        RequestBody body = RequestBody.create(buildRequestBody(apiRequest), MediaType.get(&quot;application/json; charset=utf-8&quot;));</span>
    -        Request
    -<span class="nc" id="L75">            request = new Request.Builder().url(apiRequest.getEndpoint()).header(&quot;Authorization&quot;, &quot;Bearer &quot; + authToken.getToken()).post(body).build();</span>
    -
    -<span class="nc" id="L77">        try (Response response = client.newCall(request).execute()) {</span>
    -<span class="nc bnc" id="L78" title="All 2 branches missed.">            if (!response.isSuccessful()) {</span>
    -<span class="nc bnc" id="L79" title="All 2 branches missed.">                if (response.body() == null) {</span>
    -<span class="nc" id="L80">                    log.error(&quot;Request failed: {}, please try again&quot;, response.message());</span>
    -<span class="nc" id="L81">                    throw new HttpException(response.code(), &quot;Request failed&quot;);</span>
    -                } else {
    -<span class="nc" id="L83">                    log.error(&quot;Request failed: {}, please try again&quot;, response.body().string());</span>
    -<span class="nc" id="L84">                    throw new HttpException(response.code(), response.body().string());</span>
    -                }
    -            } else {
    -<span class="nc" id="L87">                return response.body().string();</span>
    -            }
    -<span class="nc" id="L89">        } catch (IOException e) {</span>
    -<span class="nc" id="L90">            log.error(&quot;Request failed: {}&quot;, e.getMessage());</span>
    -<span class="nc" id="L91">            throw new HttpException(500, e.getMessage());</span>
    -        }
    -    }
    -
    -    /**
    -     * Samples data from a specified API endpoint request using the provided class type for the data
    -     *
    -     * @param apiRequest  the API endpoint request to sample from
    -     * @param clazz       the class type to parse the data into
    -     * @return            the sampled data parsed into the provided class type
    -     * @throws HttpException if there is an issue with the HTTP request or response
    -     * @throws JsonProcessingException if there is an issue parsing the JSON data
    -     */
    -    public &lt;T&gt; T sample(final ApiEndPointRequest apiRequest, Class&lt;T&gt; clazz) throws HttpException, JsonProcessingException {
    -<span class="nc" id="L105">        return (T) objectMapper.readValue(sample(apiRequest), clazz);</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration$GeneratorConfigurationBuilder.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration$GeneratorConfigurationBuilder.html
    deleted file mode 100644
    index c3d3958d..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration$GeneratorConfigurationBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GeneratorConfiguration.GeneratorConfigurationBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">GeneratorConfiguration.GeneratorConfigurationBuilder</span></div><h1>GeneratorConfiguration.GeneratorConfigurationBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">47 of 47</td><td class="ctr2">0%</td><td class="bar">4 of 4</td><td class="ctr2">0%</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="GeneratorConfiguration.java.html#L8" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="GeneratorConfiguration.java.html#L8" class="el_method">concurrentGenerations(int)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="GeneratorConfiguration.java.html#L8" class="el_method">maxTokens(int)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="43" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="GeneratorConfiguration.java.html#L8" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="GeneratorConfiguration.java.html#L8" class="el_method">GeneratorConfiguration.GeneratorConfigurationBuilder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.html
    deleted file mode 100644
    index 0472322f..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GeneratorConfiguration</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">GeneratorConfiguration</span></div><h1>GeneratorConfiguration</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">104 of 104</td><td class="ctr2">0%</td><td class="bar">10 of 10</td><td class="ctr2">0%</td><td class="ctr1">18</td><td class="ctr2">18</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a4"><a href="GeneratorConfiguration.java.html#L7" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="35" alt="35"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">6</td><td class="ctr2" id="g0">6</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="GeneratorConfiguration.java.html#L7" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a6"><a href="GeneratorConfiguration.java.html#L9" class="el_method">GeneratorConfiguration(int, int)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="GeneratorConfiguration.java.html#L10" class="el_method">GeneratorConfiguration()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a12"><a href="GeneratorConfiguration.java.html#L7" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="GeneratorConfiguration.java.html#L8" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="GeneratorConfiguration.java.html#L7" class="el_method">setConcurrentGenerations(int)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a11"><a href="GeneratorConfiguration.java.html#L7" class="el_method">setMaxTokens(int)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="GeneratorConfiguration.java.html#L17" class="el_method">getConcurrentGenerations()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a8"><a href="GeneratorConfiguration.java.html#L20" class="el_method">getMaxTokens()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a3"><a href="GeneratorConfiguration.java.html#L7" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a0"><a href="GeneratorConfiguration.java.html#L8" class="el_method">$default$concurrentGenerations()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a1"><a href="GeneratorConfiguration.java.html#L8" class="el_method">$default$maxTokens()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="2" alt="2"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.java.html
    deleted file mode 100644
    index 743b7df0..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/GeneratorConfiguration.java.html
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>GeneratorConfiguration.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">GeneratorConfiguration.java</span></div><h1>GeneratorConfiguration.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -
    -<span class="nc bnc" id="L7" title="All 10 branches missed.">@Data</span>
    -<span class="nc bnc" id="L8" title="All 4 branches missed.">@Builder</span>
    -<span class="nc" id="L9">@AllArgsConstructor</span>
    -<span class="nc" id="L10">@NoArgsConstructor</span>
    -/**
    - * Generator configuration object.
    - */
    -public class GeneratorConfiguration {
    -
    -    @Builder.Default
    -<span class="nc" id="L17">    protected int concurrentGenerations = 1;</span>
    -
    -    @Builder.Default
    -<span class="nc" id="L20">    protected int maxTokens = 4096;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.html
    deleted file mode 100644
    index a3bcde83..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMCommandCategorizer</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">LLMCommandCategorizer</span></div><h1>LLMCommandCategorizer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">75 of 75</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">15</td><td class="ctr2">15</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="LLMCommandCategorizer.java.html#L40" class="el_method">generate(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="56" alt="56"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">10</td><td class="ctr2" id="i0">10</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="LLMCommandCategorizer.java.html#L59" class="el_method">generateInput(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a2"><a href="LLMCommandCategorizer.java.html#L30" class="el_method">LLMCommandCategorizer(TokenProvider, GenerativeAPI, GeneratorConfiguration)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="LLMCommandCategorizer.java.html#L26" class="el_method">static {...}</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.java.html
    deleted file mode 100644
    index 513af7c9..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/LLMCommandCategorizer.java.html
    +++ /dev/null
    @@ -1,87 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMCommandCategorizer.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">LLMCommandCategorizer.java</span></div><h1>LLMCommandCategorizer.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.fasterxml.jackson.databind.node.ObjectNode;
    -import io.sentrius.sso.core.dto.CommandCategoryDTO;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.genai.model.endpoints.ChatApiEndpointRequest;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import io.sentrius.sso.security.TokenProvider;
    -import lombok.extern.slf4j.Slf4j;
    -
    -/**
    - * The ComplianceScorer class contains methods for generating compliance scores.
    - * The generate() method returns a double that represents the compliance score.
    - *
    - * This class can be used to efficiently score compliance in various domains, including but not limited to
    - * healthcare, finance, and government regulations.
    - *
    - * It is recommended to initialize the ComplianceScorer with relevant settings and parameters for a specific
    - * compliance scenario. The generate() method can then be called repeatedly on incoming data to obtain
    - * compliance scores in real-time.
    - *
    - * Note: This class does not handle data storage, retrieval or manipulation. It is only intended for
    - * calculating compliance scores based on input data.
    - */
    -<span class="nc" id="L26">@Slf4j</span>
    -public class LLMCommandCategorizer extends DataGenerator&lt;String, CommandCategoryDTO&gt; {
    -
    -    public LLMCommandCategorizer(TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config) {
    -<span class="nc" id="L30">        super(token, generator, config);</span>
    -<span class="nc" id="L31">    }</span>
    -
    -    /**
    -     * Parses queries from the response.
    -     *
    -     * @return List of queries.
    -     */
    -    @Override
    -    public CommandCategoryDTO generate(String on) throws HttpException, JsonProcessingException {
    -<span class="nc" id="L40">        var ipt = generateInput(on);</span>
    -<span class="nc" id="L41">        log.info(&quot;Input: {}&quot;, ipt);</span>
    -<span class="nc" id="L42">        ChatApiEndpointRequest request = ChatApiEndpointRequest.builder().userInput(ipt).build();</span>
    -<span class="nc" id="L43">        request.setTemperature(0.5f);</span>
    -<span class="nc" id="L44">        Response hello = api.sample(request, Response.class);</span>
    -<span class="nc" id="L45">        var resp = hello.concatenateResponses();</span>
    -<span class="nc" id="L46">        log.info(&quot;Response: {}&quot;, resp);</span>
    -<span class="nc" id="L47">        var objectNode = JsonUtil.MAPPER.readValue(resp, ObjectNode.class);</span>
    -<span class="nc" id="L48">        return CommandCategoryDTO.builder().categoryName(objectNode.get(&quot;category&quot;).asText()).pattern(objectNode.get(</span>
    -<span class="nc" id="L49">            &quot;pattern&quot;).asText()).priority(objectNode.get(&quot;priority&quot;).asInt()).build();</span>
    -    }
    -
    -    /**
    -     * Generates input for the generative AI endpoint.
    -     *
    -     * @return Question to be asked to the generative AI endpoint.
    -     */
    -    @Override
    -    public String generateInput(String on) {
    -<span class="nc" id="L59">        return &quot;&quot;&quot;</span>
    -        Categorize the following command with a generalized pattern, defined as a **regex**, that captures the intent and considers risk factors. Include specific arguments or paths in the regex only if they significantly impact the risk level. If no regex is predefined for the command, generate one that appropriately generalizes the command's behavior while retaining any risk-relevant components.
    -         
    -         For example:
    -         - 'cat /etc/passwd' is risky due to sensitive user data, so it should be included as-is with the regex '^cat /etc/passwd$'.
    -         - 'cat /etc/hosts' has low risk, so it should be generalized to '^cat /etc/.*$' to cover all files in the `/etc` directory.
    -         - 'sudo rm -rf /important_dir' should include '/important_dir' if it's sensitive, but otherwise generalized to '^sudo rm -rf .*'.
    -         
    -         Command: &quot;%s&quot;
    -         
    -         **Categories to choose from:**
    -         - PRIVILEGED: Commands that require elevated permissions or pose a risk if misused.
    -         - DESTRUCTIVE: Commands that can delete or alter critical files or system configurations.
    -         - INFORMATIONAL: Commands that retrieve information without altering the system state.
    -         - GENERAL: Commands that do not fit into the above categories.
    -         
    -         Respond in **JSON format** as follows:
    -         {
    -             &quot;category&quot;: &quot;&lt;Category Name&gt;&quot;,
    -             &quot;priority&quot;: &lt;Numerical Priority&gt;,
    -             &quot;pattern&quot;: &quot;&lt;Generalized regex Pattern&gt;&quot;,
    -             &quot;rationale&quot;: &quot;&lt;Explain why this category and regex were chosen&gt;&quot;
    -         }
    -            
    -<span class="nc" id="L83">    &quot;&quot;&quot;.formatted(on);</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.html
    deleted file mode 100644
    index 56767f35..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITwoPartyMonitor</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">OpenAITwoPartyMonitor</span></div><h1>OpenAITwoPartyMonitor</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">131 of 131</td><td class="ctr2">0%</td><td class="bar">6 of 6</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a0"><a href="OpenAITwoPartyMonitor.java.html#L41" class="el_method">generate(TwoPartyRequest)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="92" alt="92"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h0">16</td><td class="ctr2" id="i0">16</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="OpenAITwoPartyMonitor.java.html#L63" class="el_method">generateUserInput(TwoPartyRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="24" alt="24"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">3</td><td class="ctr2" id="g0">3</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="OpenAITwoPartyMonitor.java.html#L23" class="el_method">OpenAITwoPartyMonitor(TokenProvider, GenerativeAPI, GeneratorConfiguration, TerminalLogConfiguration)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="OpenAITwoPartyMonitor.java.html#L33" class="el_method">generateInput(TwoPartyRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">2</td><td class="ctr2" id="i3">2</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="OpenAITwoPartyMonitor.java.html#L17" class="el_method">static {...}</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.java.html
    deleted file mode 100644
    index 8f979f13..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/OpenAITwoPartyMonitor.java.html
    +++ /dev/null
    @@ -1,84 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>OpenAITwoPartyMonitor.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">OpenAITwoPartyMonitor.java</span></div><h1>OpenAITwoPartyMonitor.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.core.JsonProcessingException;
    -import com.fasterxml.jackson.databind.node.ObjectNode;
    -import io.sentrius.sso.security.TokenProvider;
    -import io.sentrius.sso.core.model.LLMResponse;
    -import io.sentrius.sso.core.utils.JsonUtil;
    -import io.sentrius.sso.integrations.exceptions.HttpException;
    -import io.sentrius.sso.genai.model.TwoPartyRequest;
    -import io.sentrius.sso.genai.model.endpoints.ChatApiEndpointRequest;
    -import lombok.extern.slf4j.Slf4j;
    -import org.thymeleaf.util.StringUtils;
    -
    -/**
    - * Query compliance scorer with user defined rules to be provided to OpenAI
    - */
    -<span class="nc" id="L17">@Slf4j</span>
    -public class OpenAITwoPartyMonitor extends DataGenerator&lt;TwoPartyRequest, LLMResponse&gt; {
    -
    -    public OpenAITwoPartyMonitor(
    -        TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config,
    -        TerminalLogConfiguration complianceConfig) {
    -<span class="nc" id="L23">        super(token, generator, config);</span>
    -<span class="nc" id="L24">    }</span>
    -
    -    /**
    -     * Generates input for the generative AI endpoint.
    -     *
    -     * @return Question to be asked to the generative AI endpoint.
    -     */
    -    @Override
    -    public String generateInput(TwoPartyRequest on) {
    -<span class="nc" id="L33">        String queryStr = on.getSystemInput(); //&quot; Here is the user's objective: &quot; + on.getUserObjective() + &quot;.&quot;;</span>
    -
    -
    -<span class="nc" id="L36">        return queryStr;</span>
    -    }
    -
    -    public LLMResponse generate(TwoPartyRequest on) throws HttpException, JsonProcessingException {
    -        ChatApiEndpointRequest request =
    -<span class="nc" id="L41">            ChatApiEndpointRequest.builder().userInput(generateUserInput( on)).systemInput(generateInput(on)).build();</span>
    -<span class="nc" id="L42">        log.info(&quot;Generating compliance score for: &quot; + on);</span>
    -<span class="nc" id="L43">        request.setTemperature(0.8f);</span>
    -<span class="nc" id="L44">        Response hello = api.sample(request, Response.class);</span>
    -        try{
    -<span class="nc" id="L46">            var resp = hello.concatenateResponses();</span>
    -<span class="nc" id="L47">            var objectNode = JsonUtil.MAPPER.readValue(resp, ObjectNode.class);</span>
    -<span class="nc" id="L48">            var dbl = Double.valueOf(objectNode.get(&quot;score&quot;).asText());</span>
    -<span class="nc" id="L49">            log.info(&quot;score would be {}&quot;, resp);</span>
    -<span class="nc" id="L50">            log.info(&quot;question would be {}&quot;, objectNode.get(&quot;question&quot;).asText());</span>
    -<span class="nc" id="L51">            var bldr = LLMResponse.builder();</span>
    -<span class="nc bnc" id="L52" title="All 2 branches missed.">            if (objectNode.has(&quot;question&quot;)){</span>
    -<span class="nc" id="L53">                bldr.question(objectNode.get(&quot;question&quot;).asText());</span>
    -            }
    -<span class="nc" id="L55">            return bldr.score(dbl).response(objectNode.get(&quot;explanation&quot;).asText()).build();</span>
    -<span class="nc" id="L56">        } catch (Exception e) {</span>
    -<span class="nc" id="L57">            log.info(&quot;Error parsing compliance score: &quot; + hello.concatenateResponses());</span>
    -<span class="nc" id="L58">            return LLMResponse.builder().score(0.0).response(&quot;Error parsing compliance score&quot;).build();</span>
    -        }
    -    }
    -
    -    private String generateUserInput(TwoPartyRequest userInput) {
    -<span class="nc" id="L63">        String queryStr = &quot;&quot;;</span>
    -<span class="nc bnc" id="L64" title="All 4 branches missed.">        if (!StringUtils.isEmpty(userInput.getPreviousPrompt()) &amp;&amp; !StringUtils.isEmpty(userInput.getPromptResponse())) {</span>
    -<span class="nc" id="L65">            queryStr += &quot;You previously asked the user of their session: &quot; + userInput.getPreviousPrompt() + &quot;. This&quot; +</span>
    -            &quot; &quot; +
    -<span class="nc" id="L67">            &quot;was their response: &quot; + userInput.getPromptResponse() + &quot;. Can you incorporate this information into &quot; +</span>
    -            &quot;your risk assessment and confidence score? If they are avoiding your question don't re-ask, just raise &quot; +
    -                &quot;your risk score.&quot;;
    -        }
    -<span class="nc" id="L71">        queryStr +=  &quot;Can you give me a confidence score from 0 to 1, to two decimal places, on whether the next 10 &quot; +</span>
    -            &quot;terminal log &quot; +
    -            &quot;output&quot; +
    -            &quot; from&quot; +
    -        &quot; a single terminal session are exhibiting risky behavior, where 0 is normal and 1 would be a session you&quot; +
    -            &quot; acting as a human would ask to stop. Provide the score, an explanation of why, and a question to ask &quot; +
    -            &quot;the user, but only if needed, in JSON with the fields score, explanation, and question. Here is the &quot; +
    -            &quot;user's last ten &quot; +
    -<span class="nc" id="L79">            &quot;commands: &quot; + userInput.getUserInput() + &quot;.&quot;;</span>
    -<span class="nc" id="L80">        return queryStr;</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    deleted file mode 100644
    index 7a41df40..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Choice</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Choice</span></div><h1>Response.Choice</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">196 of 196</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">32</td><td class="ctr2">32</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L49" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Response.java.html#L49" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="Response.java.html#L49" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a9"><a href="Response.java.html#L49" class="el_method">setIndex(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="Response.java.html#L49" class="el_method">setMessage(Message)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="Response.java.html#L49" class="el_method">setFinishReason(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="Response.java.html#L49" class="el_method">setLogprobs(Integer)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="Response.java.html#L49" class="el_method">Response.Choice()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="Response.java.html#L53" class="el_method">getIndex()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="Response.java.html#L56" class="el_method">getMessage()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="Response.java.html#L59" class="el_method">getFinishReason()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="Response.java.html#L62" class="el_method">getLogprobs()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a0"><a href="Response.java.html#L49" class="el_method">canEqual(Object)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    deleted file mode 100644
    index 3aaa1536..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.ResponseBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.ResponseBuilder</span></div><h1>Response.ResponseBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">83 of 83</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="Response.java.html#L18" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Response.java.html#L18" class="el_method">id(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="Response.java.html#L18" class="el_method">object(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L18" class="el_method">created(Long)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Response.java.html#L18" class="el_method">model(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Response.java.html#L18" class="el_method">choices(List)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Response.java.html#L18" class="el_method">usage(Response.Usage)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="Response.java.html#L18" class="el_method">serviceTier(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a8"><a href="Response.java.html#L18" class="el_method">systemFingerprint(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="Response.java.html#L18" class="el_method">Response.ResponseBuilder()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    deleted file mode 100644
    index c74a4479..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Usage</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Usage</span></div><h1>Response.Usage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">155 of 155</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L70" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="Response.java.html#L70" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="Response.java.html#L70" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="Response.java.html#L70" class="el_method">setPromptTokens(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="Response.java.html#L70" class="el_method">setCompletionTokens(Integer)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="Response.java.html#L70" class="el_method">setTotalTokens(Integer)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="Response.java.html#L70" class="el_method">Response.Usage()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="Response.java.html#L75" class="el_method">getPromptTokens()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="Response.java.html#L78" class="el_method">getCompletionTokens()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="Response.java.html#L81" class="el_method">getTotalTokens()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="Response.java.html#L70" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.html
    deleted file mode 100644
    index f33dd3c3..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response</span></div><h1>Response</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">401 of 401</td><td class="ctr2">0%</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="ctr1">60</td><td class="ctr2">60</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">25</td><td class="ctr2">25</td></tr></tfoot><tbody><tr><td id="a3"><a href="Response.java.html#L17" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="157" alt="157"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="54" alt="54"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">28</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a12"><a href="Response.java.html#L17" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="118" alt="118"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="35" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">9</td><td class="ctr2" id="g1">9</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a15"><a href="Response.java.html#L20" class="el_method">Response(String, String, Long, String, List, Response.Usage, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="27" alt="27"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a24"><a href="Response.java.html#L17" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="20" alt="20"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L93" class="el_method">concatenateResponses()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a18"><a href="Response.java.html#L17" class="el_method">setId(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="Response.java.html#L17" class="el_method">setObject(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a17"><a href="Response.java.html#L17" class="el_method">setCreated(Long)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a19"><a href="Response.java.html#L17" class="el_method">setModel(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a16"><a href="Response.java.html#L17" class="el_method">setChoices(List)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a23"><a href="Response.java.html#L17" class="el_method">setUsage(Response.Usage)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a21"><a href="Response.java.html#L17" class="el_method">setServiceTier(String)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a22"><a href="Response.java.html#L17" class="el_method">setSystemFingerprint(String)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="Response.java.html#L93" class="el_method">lambda$concatenateResponses$0(Response.Choice)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a6"><a href="Response.java.html#L24" class="el_method">getId()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="Response.java.html#L27" class="el_method">getObject()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a5"><a href="Response.java.html#L30" class="el_method">getCreated()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a7"><a href="Response.java.html#L33" class="el_method">getModel()</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a href="Response.java.html#L36" class="el_method">getChoices()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a11"><a href="Response.java.html#L39" class="el_method">getUsage()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a9"><a href="Response.java.html#L42" class="el_method">getServiceTier()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a10"><a href="Response.java.html#L85" class="el_method">getSystemFingerprint()</a></td><td class="bar" id="b22"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a1"><a href="Response.java.html#L17" class="el_method">canEqual(Object)</a></td><td class="bar" id="b23"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a14"><a href="Response.java.html#L19" class="el_method">Response()</a></td><td class="bar" id="b24"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    deleted file mode 100644
    index 1c3ae00c..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    +++ /dev/null
    @@ -1,96 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">Response.java</span></div><h1>Response.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import java.util.List;
    -import java.util.stream.Collectors;
    -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    -import com.fasterxml.jackson.annotation.JsonProperty;
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -
    -/**
    - * Response class is responsible for collecting and storing user responses. It provides a string
    - * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    - * responses and the 'concatenateResponses' method to combine them into a single string.
    - */
    -<span class="nc bnc" id="L17" title="All 70 branches missed.">@Data</span>
    -<span class="nc" id="L18">@Builder</span>
    -<span class="nc" id="L19">@NoArgsConstructor</span>
    -<span class="nc" id="L20">@AllArgsConstructor</span>
    -public class Response {
    -
    -    @JsonProperty(value = &quot;id&quot;)
    -<span class="nc" id="L24">    public String id;</span>
    -
    -    @JsonProperty(value = &quot;object&quot;)
    -<span class="nc" id="L27">    public String object;</span>
    -
    -    @JsonProperty(value = &quot;created&quot;)
    -<span class="nc" id="L30">    public Long created;</span>
    -
    -    @JsonProperty(value = &quot;model&quot;)
    -<span class="nc" id="L33">    public String model;</span>
    -
    -    @JsonProperty(value = &quot;choices&quot;)
    -<span class="nc" id="L36">    public List&lt;Choice&gt; choices;</span>
    -
    -    @JsonProperty(value = &quot;usage&quot;)
    -<span class="nc" id="L39">    public Usage usage;</span>
    -
    -    @JsonProperty(value = &quot;service_tier&quot;, required = false)
    -<span class="nc" id="L42">    public String serviceTier;</span>
    -
    -    /**
    -     * Response class is responsible for collecting and storing user responses. It provides a string
    -     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    -     * responses and the 'concatenateResponses' method to combine them into a single string.
    -     */
    -<span class="nc bnc" id="L49" title="All 38 branches missed.">    @Data</span>
    -    public static class Choice {
    -
    -        @JsonProperty(value = &quot;index&quot;)
    -<span class="nc" id="L53">        public Integer index;</span>
    -
    -        @JsonProperty(value = &quot;message&quot;)
    -<span class="nc" id="L56">        public Message message;</span>
    -
    -        @JsonProperty(value = &quot;finish_reason&quot;)
    -<span class="nc" id="L59">        public String finishReason;</span>
    -
    -        @JsonProperty(value = &quot;logprobs&quot;)
    -<span class="nc" id="L62">        public Integer logprobs;</span>
    -    }
    -
    -    /**
    -     * Response class is responsible for collecting and storing user responses. It provides a string
    -     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    -     * responses and the 'concatenateResponses' method to combine them into a single string.
    -     */
    -<span class="nc bnc" id="L70" title="All 30 branches missed.">    @Data</span>
    -    @JsonIgnoreProperties(ignoreUnknown = true)
    -    public static class Usage {
    -
    -        @JsonProperty(value = &quot;prompt_tokens&quot;)
    -<span class="nc" id="L75">        public Integer promptTokens;</span>
    -
    -        @JsonProperty(value = &quot;completion_tokens&quot;)
    -<span class="nc" id="L78">        public Integer completionTokens;</span>
    -
    -        @JsonProperty(value = &quot;total_tokens&quot;)
    -<span class="nc" id="L81">        public Integer totalTokens;</span>
    -    }
    -
    -    @JsonProperty(value = &quot;system_fingerprint&quot;)
    -<span class="nc" id="L85">    String systemFingerprint;</span>
    -
    -    /**
    -     * This method concatenates all responses in a Response object and returns a string.
    -     *
    -     * @return      a string that contains all responses in a Response object
    -     */
    -    public String concatenateResponses() {
    -<span class="nc" id="L93">        return getChoices().stream().map(x -&gt; x.getMessage().getContent()).collect(Collectors.joining());</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.html
    deleted file mode 100644
    index 35536e0e..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalComplianceScorer</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">TerminalComplianceScorer</span></div><h1>TerminalComplianceScorer</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="TerminalComplianceScorer.java.html#L23" class="el_method">generateInput(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="29" alt="29"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="TerminalComplianceScorer.java.html#L13" class="el_method">TerminalComplianceScorer(TokenProvider, GenerativeAPI, GeneratorConfiguration, TerminalLogConfiguration)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="28" height="10" title="7" alt="7"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.java.html
    deleted file mode 100644
    index fec957ce..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalComplianceScorer.java.html
    +++ /dev/null
    @@ -1,38 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalComplianceScorer.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">TerminalComplianceScorer.java</span></div><h1>TerminalComplianceScorer.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import io.sentrius.sso.security.TokenProvider;
    -
    -/**
    - * Query compliance scorer with user defined rules to be provided to OpenAI
    - */
    -public class TerminalComplianceScorer extends ComplianceScorer {
    -
    -    public TerminalComplianceScorer(
    -        TokenProvider token, GenerativeAPI generator, GeneratorConfiguration config,
    -        TerminalLogConfiguration complianceConfig) {
    -<span class="nc" id="L13">        super(token, generator, config, complianceConfig);</span>
    -<span class="nc" id="L14">    }</span>
    -
    -    /**
    -     * Generates input for the generative AI endpoint.
    -     *
    -     * @return Question to be asked to the generative AI endpoint.
    -     */
    -    @Override
    -    public String generateInput(String on) {
    -<span class="nc" id="L23">        String queryStr = &quot;This is a mission critical system with admins performing break glass activities through &quot; +</span>
    -            &quot;ssh.&quot;;
    -
    -<span class="nc" id="L26">        TerminalLogConfiguration queryComplianceConfiguration = (TerminalLogConfiguration) complianceConfig;</span>
    -<span class="nc bnc" id="L27" title="All 2 branches missed.">        for (var rule : queryComplianceConfiguration.getRules())</span>
    -<span class="nc" id="L28">            queryStr += rule.getRule() + &quot;,&quot;;</span>
    -
    -<span class="nc" id="L30">        queryStr += &quot;. Can you give me a confidence score from 0 to 1 on whether the next 10 terminal log output from&quot; +</span>
    -            &quot; a single terminal session are exhibiting risky behavior: &quot;
    -            + on + &quot;;  Please only provide the score. &quot;;
    -
    -<span class="nc" id="L34">        return queryStr;</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder.html
    deleted file mode 100644
    index 7fe69725..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalLogConfiguration.TerminalLogConfigurationBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">TerminalLogConfiguration.TerminalLogConfigurationBuilder</span></div><h1>TerminalLogConfiguration.TerminalLogConfigurationBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">15 of 15</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">terminalLogs(String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">TerminalLogConfiguration.TerminalLogConfigurationBuilder()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl.html
    deleted file mode 100644
    index a0a5c23f..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalLogConfiguration.TerminalLogConfigurationBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">TerminalLogConfiguration.TerminalLogConfigurationBuilderImpl</span></div><h1>TerminalLogConfiguration.TerminalLogConfigurationBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.html
    deleted file mode 100644
    index b44ab3a1..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalLogConfiguration</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">TerminalLogConfiguration</span></div><h1>TerminalLogConfiguration</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">93 of 93</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">10</td><td class="ctr2">10</td></tr></tfoot><tbody><tr><td id="a2"><a href="TerminalLogConfiguration.java.html#L24" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="TerminalLogConfiguration.java.html#L24" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a8"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">TerminalLogConfiguration(TerminalLogConfiguration.TerminalLogConfigurationBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="25" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="TerminalLogConfiguration.java.html#L26" class="el_method">TerminalLogConfiguration(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="TerminalLogConfiguration.java.html#L25" class="el_method">builder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="TerminalLogConfiguration.java.html#L24" class="el_method">setTerminalLogs(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="TerminalLogConfiguration.java.html#L24" class="el_method">toString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="TerminalLogConfiguration.java.html#L30" class="el_method">getTerminalLogs()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a1"><a href="TerminalLogConfiguration.java.html#L24" class="el_method">canEqual(Object)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a6"><a href="TerminalLogConfiguration.java.html#L27" class="el_method">TerminalLogConfiguration()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.java.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.java.html
    deleted file mode 100644
    index 1533d399..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/TerminalLogConfiguration.java.html
    +++ /dev/null
    @@ -1,32 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TerminalLogConfiguration.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">TerminalLogConfiguration.java</span></div><h1>TerminalLogConfiguration.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import lombok.AllArgsConstructor;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * This class represents a QueryComplianceConfiguration feature that provides methods for retrieving the current
    - * compliance configuration settings.
    - *
    - * The methods available in this class include:
    - *
    - * - getComplianceConfiguration(): Get the current compliance configuration settings.
    - *
    - * - setComplianceConfiguration(ComplianceConfig config): Set the compliance configuration settings for the current
    - * query. This method takes a single argument of type ComplianceConfig, which represents the desired settings to be
    - * applied to the query.
    - *
    - * By default, the compliance configuration settings are set to the system defaults. Use the
    - * setComplianceConfiguration() method to configure specific settings for your query. The getComplianceConfiguration()
    - * method can be called to return the currently configured settings.
    - */
    -<span class="nc bnc" id="L24" title="All 14 branches missed.">@Data</span>
    -<span class="nc" id="L25">@SuperBuilder</span>
    -<span class="nc" id="L26">@AllArgsConstructor</span>
    -<span class="nc" id="L27">@NoArgsConstructor</span>
    -public class TerminalLogConfiguration extends ComplianceConfiguration {
    -
    -<span class="nc" id="L30">    String terminalLogs;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.html
    deleted file mode 100644
    index db2ba3c7..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,795 of 1,795</td><td class="ctr2">0%</td><td class="bar">200 of 200</td><td class="ctr2">0%</td><td class="ctr1">234</td><td class="ctr2">234</td><td class="ctr1">157</td><td class="ctr2">157</td><td class="ctr1">134</td><td class="ctr2">134</td><td class="ctr1">19</td><td class="ctr2">19</td></tr></tfoot><tbody><tr><td id="a11"><a href="Response.html" class="el_class">Response</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="401" alt="401"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">60</td><td class="ctr2" id="g0">60</td><td class="ctr1" id="h4">13</td><td class="ctr2" id="i4">13</td><td class="ctr1" id="j0">25</td><td class="ctr2" id="k0">25</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a12"><a href="Response$Choice.html" class="el_class">Response.Choice</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="196" alt="196"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="38" alt="38"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h8">5</td><td class="ctr2" id="i8">5</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">13</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a14"><a href="Response$Usage.html" class="el_class">Response.Usage</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="155" alt="155"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="30" alt="30"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">26</td><td class="ctr2" id="g2">26</td><td class="ctr1" id="h12">4</td><td class="ctr2" id="i12">4</td><td class="ctr1" id="j3">11</td><td class="ctr2" id="k3">11</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a6"><a href="GenerativeAPI.html" class="el_class">GenerativeAPI</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="41" height="10" title="140" alt="140"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f7">8</td><td class="ctr2" id="g7">8</td><td class="ctr1" id="h0">29</td><td class="ctr2" id="i0">29</td><td class="ctr1" id="j7">6</td><td class="ctr2" id="k7">6</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a10"><a href="OpenAITwoPartyMonitor.html" class="el_class">OpenAITwoPartyMonitor</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="39" height="10" title="131" alt="131"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f8">8</td><td class="ctr2" id="g8">8</td><td class="ctr1" id="h1">28</td><td class="ctr2" id="i1">28</td><td class="ctr1" id="j8">5</td><td class="ctr2" id="k8">5</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a0"><a href="ChatConversation.html" class="el_class">ChatConversation</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="35" height="10" title="118" alt="118"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f9">7</td><td class="ctr2" id="g9">7</td><td class="ctr1" id="h2">21</td><td class="ctr2" id="i2">21</td><td class="ctr1" id="j10">4</td><td class="ctr2" id="k10">4</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a1"><a href="ComplianceConfiguration.html" class="el_class">ComplianceConfiguration</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="107" alt="107"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="16" alt="16"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f3">19</td><td class="ctr2" id="g3">19</td><td class="ctr1" id="h9">5</td><td class="ctr2" id="i9">5</td><td class="ctr1" id="j4">11</td><td class="ctr2" id="k4">11</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a7"><a href="GeneratorConfiguration.html" class="el_class">GeneratorConfiguration</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="104" alt="104"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="10" alt="10"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f4">18</td><td class="ctr2" id="g4">18</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j2">13</td><td class="ctr2" id="k2">13</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a16"><a href="TerminalLogConfiguration.html" class="el_class">TerminalLogConfiguration</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="93" alt="93"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="14" alt="14"/></td><td class="ctr2" id="e8">0%</td><td class="ctr1" id="f5">17</td><td class="ctr2" id="g5">17</td><td class="ctr1" id="h10">5</td><td class="ctr2" id="i10">5</td><td class="ctr1" id="j6">10</td><td class="ctr2" id="k6">10</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a13"><a href="Response$ResponseBuilder.html" class="el_class">Response.ResponseBuilder</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="83" alt="83"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f6">11</td><td class="ctr2" id="g6">11</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j5">11</td><td class="ctr2" id="k5">11</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a9"><a href="LLMCommandCategorizer.html" class="el_class">LLMCommandCategorizer</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="75" alt="75"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f11">4</td><td class="ctr2" id="g11">4</td><td class="ctr1" id="h3">15</td><td class="ctr2" id="i3">15</td><td class="ctr1" id="j11">4</td><td class="ctr2" id="k11">4</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a4"><a href="ComplianceScorer.html" class="el_class">ComplianceScorer</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="51" alt="51"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f12">3</td><td class="ctr2" id="g12">3</td><td class="ctr1" id="h5">13</td><td class="ctr2" id="i5">13</td><td class="ctr1" id="j12">3</td><td class="ctr2" id="k12">3</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a8"><a href="GeneratorConfiguration$GeneratorConfigurationBuilder.html" class="el_class">GeneratorConfiguration.GeneratorConfigurationBuilder</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="47" alt="47"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d9"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="e9">0%</td><td class="ctr1" id="f10">7</td><td class="ctr2" id="g10">7</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j9">5</td><td class="ctr2" id="k9">5</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr><tr><td id="a15"><a href="TerminalComplianceScorer.html" class="el_class">TerminalComplianceScorer</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="36" alt="36"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="e10">0%</td><td class="ctr1" id="f13">3</td><td class="ctr2" id="g13">3</td><td class="ctr1" id="h6">8</td><td class="ctr2" id="i6">8</td><td class="ctr1" id="j15">2</td><td class="ctr2" id="k15">2</td><td class="ctr1" id="l13">1</td><td class="ctr2" id="m13">1</td></tr><tr><td id="a2"><a href="ComplianceConfiguration$ComplianceConfigurationBuilder.html" class="el_class">ComplianceConfiguration.ComplianceConfigurationBuilder</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="17" alt="17"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">3</td><td class="ctr2" id="g14">3</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j13">3</td><td class="ctr2" id="k13">3</td><td class="ctr1" id="l14">1</td><td class="ctr2" id="m14">1</td></tr><tr><td id="a17"><a href="TerminalLogConfiguration$TerminalLogConfigurationBuilder.html" class="el_class">TerminalLogConfiguration.TerminalLogConfigurationBuilder</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="15" alt="15"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">3</td><td class="ctr2" id="g15">3</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j14">3</td><td class="ctr2" id="k14">3</td><td class="ctr1" id="l15">1</td><td class="ctr2" id="m15">1</td></tr><tr><td id="a5"><a href="DataGenerator.html" class="el_class">DataGenerator</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="12" alt="12"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h11">5</td><td class="ctr2" id="i11">5</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td><td class="ctr1" id="l16">1</td><td class="ctr2" id="m16">1</td></tr><tr><td id="a18"><a href="TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl.html" class="el_class">TerminalLogConfiguration.TerminalLogConfigurationBuilderImpl</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f16">2</td><td class="ctr2" id="g16">2</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j16">2</td><td class="ctr2" id="k16">2</td><td class="ctr1" id="l17">1</td><td class="ctr2" id="m17">1</td></tr><tr><td id="a3"><a href="ComplianceConfiguration$ComplianceConfigurationBuilderImpl.html" class="el_class">ComplianceConfiguration.ComplianceConfigurationBuilderImpl</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f17">2</td><td class="ctr2" id="g17">2</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j17">2</td><td class="ctr2" id="k17">2</td><td class="ctr1" id="l18">1</td><td class="ctr2" id="m18">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.source.html b/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    deleted file mode 100644
    index c79677f2..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,795 of 1,795</td><td class="ctr2">0%</td><td class="bar">200 of 200</td><td class="ctr2">0%</td><td class="ctr1">234</td><td class="ctr2">234</td><td class="ctr1">157</td><td class="ctr2">157</td><td class="ctr1">134</td><td class="ctr2">134</td><td class="ctr1">19</td><td class="ctr2">19</td></tr></tfoot><tbody><tr><td id="a8"><a href="Response.java.html" class="el_source">Response.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="835" alt="835"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="138" alt="138"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">129</td><td class="ctr2" id="g0">129</td><td class="ctr1" id="h2">22</td><td class="ctr2" id="i2">22</td><td class="ctr1" id="j0">60</td><td class="ctr2" id="k0">60</td><td class="ctr1" id="l0">4</td><td class="ctr2" id="m0">4</td></tr><tr><td id="a5"><a href="GeneratorConfiguration.java.html" class="el_source">GeneratorConfiguration.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="21" height="10" title="151" alt="151"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">25</td><td class="ctr2" id="g1">25</td><td class="ctr1" id="h7">6</td><td class="ctr2" id="i7">6</td><td class="ctr1" id="j1">18</td><td class="ctr2" id="k1">18</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr><tr><td id="a4"><a href="GenerativeAPI.java.html" class="el_source">GenerativeAPI.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="140" alt="140"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f4">8</td><td class="ctr2" id="g4">8</td><td class="ctr1" id="h0">29</td><td class="ctr2" id="i0">29</td><td class="ctr1" id="j4">6</td><td class="ctr2" id="k4">6</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a1"><a href="ComplianceConfiguration.java.html" class="el_source">ComplianceConfiguration.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="131" alt="131"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="16" alt="16"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">24</td><td class="ctr2" id="g2">24</td><td class="ctr1" id="h8">5</td><td class="ctr2" id="i8">5</td><td class="ctr1" id="j2">16</td><td class="ctr2" id="k2">16</td><td class="ctr1" id="l1">3</td><td class="ctr2" id="m1">3</td></tr><tr><td id="a7"><a href="OpenAITwoPartyMonitor.java.html" class="el_source">OpenAITwoPartyMonitor.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="131" alt="131"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f5">8</td><td class="ctr2" id="g5">8</td><td class="ctr1" id="h1">28</td><td class="ctr2" id="i1">28</td><td class="ctr1" id="j5">5</td><td class="ctr2" id="k5">5</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a0"><a href="ChatConversation.java.html" class="el_source">ChatConversation.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="118" alt="118"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="6" alt="6"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f6">7</td><td class="ctr2" id="g6">7</td><td class="ctr1" id="h3">21</td><td class="ctr2" id="i3">21</td><td class="ctr1" id="j6">4</td><td class="ctr2" id="k6">4</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a10"><a href="TerminalLogConfiguration.java.html" class="el_source">TerminalLogConfiguration.java</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="115" alt="115"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="14" alt="14"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f3">22</td><td class="ctr2" id="g3">22</td><td class="ctr1" id="h9">5</td><td class="ctr2" id="i9">5</td><td class="ctr1" id="j3">15</td><td class="ctr2" id="k3">15</td><td class="ctr1" id="l2">3</td><td class="ctr2" id="m2">3</td></tr><tr><td id="a6"><a href="LLMCommandCategorizer.java.html" class="el_source">LLMCommandCategorizer.java</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="75" alt="75"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f7">4</td><td class="ctr2" id="g7">4</td><td class="ctr1" id="h4">15</td><td class="ctr2" id="i4">15</td><td class="ctr1" id="j7">4</td><td class="ctr2" id="k7">4</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a2"><a href="ComplianceScorer.java.html" class="el_source">ComplianceScorer.java</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="51" alt="51"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">3</td><td class="ctr2" id="g8">3</td><td class="ctr1" id="h5">13</td><td class="ctr2" id="i5">13</td><td class="ctr1" id="j8">3</td><td class="ctr2" id="k8">3</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a9"><a href="TerminalComplianceScorer.java.html" class="el_source">TerminalComplianceScorer.java</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="36" alt="36"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f9">3</td><td class="ctr2" id="g9">3</td><td class="ctr1" id="h6">8</td><td class="ctr2" id="i6">8</td><td class="ctr1" id="j9">2</td><td class="ctr2" id="k9">2</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a3"><a href="DataGenerator.java.html" class="el_source">DataGenerator.java</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="12" alt="12"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">5</td><td class="ctr2" id="i10">5</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchfc.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchfc.gif
    deleted file mode 100644
    index 989b46d30469b56b014758f846ee6c5abfda16aa..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;xhkjB6;lY!w31H*rY|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-NwhSNb
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchnc.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchnc.gif
    deleted file mode 100644
    index 1933e07c376bb71bdd9aac91cf858da3fcdb0f1c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;xxz`$^Zf#E#^!~cec|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-N9U38B
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchpc.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/branchpc.gif
    deleted file mode 100644
    index cbf711b7030929b733f22f7a0cf3dbf61fe7868f..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;v*A(Y{H7sIRF44*zR{6_+cKUo;L7}yzf7=QqzmVsHJqKe^n
    j0tb8h9POxsbMM_@X>m$mi>nCYN#As;!%lJz1A{dHmlPuc
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/bundle.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/bundle.gif
    deleted file mode 100644
    index fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 709
    zcmZ?wbhEHb6krfwxXQrrpW*-7BK;<J$sad5=B26sxKQ!q!Hgdl8q(~HUL2e9<Hd#-
    z7dn1?IPw4g|HIv8zrOAI@nFG^8xwkB-G027acOnKpKtdcpWnHq-sr)BinT@BA8t%o
    znxj(b?=UZ3c5RMIe~{#!dZYLEkL_tSI^1f;Km(xolZ6pvtPY3(`H6w8*rB1oLr1Fr
    zgz}>o8CDEUD?$vun5^UNelT%D!ODh<DT^W#oSIlz7qWFr6j-<`INnfgQuR3aJbW7`
    zN4%4`K$`$#XID3aq+mZI+oZ{pxEUFwnVA`9&7C{VNtTt7ed)5L3!LN`S=X*xyV99u
    u^Omii+jqD*GFUt3=ar=9mFR|47NlA!WacKOr|PF?rg3q(j|Mjlf*SzSChrLV
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/class.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/class.gif
    deleted file mode 100644
    index eb348fb0d498d75976150047b1b5c2fefc9dc220..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 586
    zcmZ?wbhEHb6krfwI2Or}v!c<s$=9se-=Q<YsXNN8KQ3fOR@Cf*m^p=Yn<q4Gopkom
    z6_qkOy&5;;MsLfufQUJ{vGWR(7nLtMxlXsnMX%OXzt+v54k+vCJt@I!LR|T}_8Twn
    z8a23^wRl;#``dR0_3fQy*Wqv15n$II;MN!J-X9S(Eh&3>RsX(Ohwq+z^!{nkw1lu(
    zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k<wUj$8y`}qA+!h+12O)Zt{8e4bt
    z^z51Z;rqwPnTZ)o@)H-NC(KKmcWmLES9jAFW#uj_C|_66u(_dnV^!t4^7b9Ajhky9
    zzJD-rU(e=C8}{7Xx$oBQ`NwB1I6iy#jqQi->_2wz@P-Sk{|^LE{K>+|z);Vi!vF-J
    zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc>
    zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd
    zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU
    Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/down.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/down.gif
    deleted file mode 100644
    index 440a14db74e76c2b6e854eacac1c44414b166271..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ>Z%p}jXB
    Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(}
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/greenbar.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/greenbar.gif
    deleted file mode 100644
    index 0ba65672530ee09f086821a26156836d0c91bd74..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0
    eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/group.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/group.gif
    deleted file mode 100644
    index a4ea580d278fb727e4ae692838877fa63c4becf9..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 351
    zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86
    zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw
    z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO
    z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47?
    zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@<H~=ly~!2^|49-&cqxtw`7?
    z#Ky|j%)-vX)?mu7-NU2OKVbs5sj!|NpR$sovf|v?yiO9jg7Wfm3i1lF3JOBbqGFPg
    YGSX7gGMmL+MfU97=X>Cwn<IlY03tk+6951J
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/method.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/method.gif
    deleted file mode 100644
    index 7d24707ee82f54aa9fb10d1d9050013cbf161a7a..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 193
    zcmV;y06zamNk%w1VGsZi0K@<Q1As^cfk_>VRxXubL!4|)qjO}gg>klxZ?TGXw~#-V
    zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<;
    ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx
    vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/package.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/package.gif
    deleted file mode 100644
    index 131c28da405493661e3253ef79a68bd273039295..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 227
    zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c
    zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3*
    zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7
    z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx
    Mi%z;upCW@b03m@=3jhEB
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.css b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.css
    deleted file mode 100644
    index be5166e0..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.css
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -/* Pretty printing styles. Used with prettify.js. */
    -
    -.str { color: #2A00FF; }
    -.kwd { color: #7F0055; font-weight:bold; }
    -.com { color: #3F5FBF; }
    -.typ { color: #606; }
    -.lit { color: #066; }
    -.pun { color: #660; }
    -.pln { color: #000; }
    -.tag { color: #008; }
    -.atn { color: #606; }
    -.atv { color: #080; }
    -.dec { color: #606; }
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.js b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.js
    deleted file mode 100644
    index b2766fe0..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/prettify.js
    +++ /dev/null
    @@ -1,1510 +0,0 @@
    -// Copyright (C) 2006 Google Inc.
    -//
    -// Licensed under the Apache License, Version 2.0 (the "License");
    -// you may not use this file except in compliance with the License.
    -// You may obtain a copy of the License at
    -//
    -//      http://www.apache.org/licenses/LICENSE-2.0
    -//
    -// Unless required by applicable law or agreed to in writing, software
    -// distributed under the License is distributed on an "AS IS" BASIS,
    -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -// See the License for the specific language governing permissions and
    -// limitations under the License.
    -
    -
    -/**
    - * @fileoverview
    - * some functions for browser-side pretty printing of code contained in html.
    - * <p>
    - *
    - * For a fairly comprehensive set of languages see the
    - * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    - * file that came with this source.  At a minimum, the lexer should work on a
    - * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    - * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    - * and a subset of Perl, but, because of commenting conventions, doesn't work on
    - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    - * <p>
    - * Usage: <ol>
    - * <li> include this source file in an html page via
    - *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    - * <li> define style rules.  See the example page for examples.
    - * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    - *    {@code class=prettyprint.}
    - *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    - *    printer needs to do more substantial DOM manipulations to support that, so
    - *    some css styles may not be preserved.
    - * </ol>
    - * That's it.  I wanted to keep the API as simple as possible, so there's no
    - * need to specify which language the code is in, but if you wish, you can add
    - * another class to the {@code <pre>} or {@code <code>} element to specify the
    - * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    - * starts with "lang-" followed by a file extension, specifies the file type.
    - * See the "lang-*.js" files in this directory for code that implements
    - * per-language file handlers.
    - * <p>
    - * Change log:<br>
    - * cbeust, 2006/08/22
    - * <blockquote>
    - *   Java annotations (start with "@") are now captured as literals ("lit")
    - * </blockquote>
    - * @requires console
    - */
    -
    -// JSLint declarations
    -/*global console, document, navigator, setTimeout, window */
    -
    -/**
    - * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    - * UI events.
    - * If set to {@code false}, {@code prettyPrint()} is synchronous.
    - */
    -window['PR_SHOULD_USE_CONTINUATION'] = true;
    -
    -/** the number of characters between tab columns */
    -window['PR_TAB_WIDTH'] = 8;
    -
    -/** Walks the DOM returning a properly escaped version of innerHTML.
    -  * @param {Node} node
    -  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    -  */
    -window['PR_normalizedHtml']
    -
    -/** Contains functions for creating and registering new language handlers.
    -  * @type {Object}
    -  */
    -  = window['PR']
    -
    -/** Pretty print a chunk of code.
    -  *
    -  * @param {string} sourceCodeHtml code as html
    -  * @return {string} code as html, but prettier
    -  */
    -  = window['prettyPrintOne']
    -/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    -  * {@code class=prettyprint} and prettify them.
    -  * @param {Function?} opt_whenDone if specified, called when the last entry
    -  *     has been finished.
    -  */
    -  = window['prettyPrint'] = void 0;
    -
    -/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    -window['_pr_isIE6'] = function () {
    -  var ieVersion = navigator && navigator.userAgent &&
    -      navigator.userAgent.match(/\bMSIE ([678])\./);
    -  ieVersion = ieVersion ? +ieVersion[1] : false;
    -  window['_pr_isIE6'] = function () { return ieVersion; };
    -  return ieVersion;
    -};
    -
    -
    -(function () {
    -  // Keyword lists for various languages.
    -  var FLOW_CONTROL_KEYWORDS =
    -      "break continue do else for if return while ";
    -  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    -      "double enum extern float goto int long register short signed sizeof " +
    -      "static struct switch typedef union unsigned void volatile ";
    -  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    -      "new operator private protected public this throw true try typeof ";
    -  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    -      "concept concept_map const_cast constexpr decltype " +
    -      "dynamic_cast explicit export friend inline late_check " +
    -      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    -      "template typeid typename using virtual wchar_t where ";
    -  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    -      "abstract boolean byte extends final finally implements import " +
    -      "instanceof null native package strictfp super synchronized throws " +
    -      "transient ";
    -  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    -      "as base by checked decimal delegate descending event " +
    -      "fixed foreach from group implicit in interface internal into is lock " +
    -      "object out override orderby params partial readonly ref sbyte sealed " +
    -      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    -  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    -      "debugger eval export function get null set undefined var with " +
    -      "Infinity NaN ";
    -  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    -      "goto if import last local my next no our print package redo require " +
    -      "sub undef unless until use wantarray while BEGIN END ";
    -  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    -      "elif except exec finally from global import in is lambda " +
    -      "nonlocal not or pass print raise try with yield " +
    -      "False True None ";
    -  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    -      " defined elsif end ensure false in module next nil not or redo rescue " +
    -      "retry self super then true undef unless until when yield BEGIN END ";
    -  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    -      "function in local set then until ";
    -  var ALL_KEYWORDS = (
    -      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    -      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    -
    -  // token style names.  correspond to css classes
    -  /** token style for a string literal */
    -  var PR_STRING = 'str';
    -  /** token style for a keyword */
    -  var PR_KEYWORD = 'kwd';
    -  /** token style for a comment */
    -  var PR_COMMENT = 'com';
    -  /** token style for a type */
    -  var PR_TYPE = 'typ';
    -  /** token style for a literal value.  e.g. 1, null, true. */
    -  var PR_LITERAL = 'lit';
    -  /** token style for a punctuation string. */
    -  var PR_PUNCTUATION = 'pun';
    -  /** token style for a punctuation string. */
    -  var PR_PLAIN = 'pln';
    -
    -  /** token style for an sgml tag. */
    -  var PR_TAG = 'tag';
    -  /** token style for a markup declaration such as a DOCTYPE. */
    -  var PR_DECLARATION = 'dec';
    -  /** token style for embedded source. */
    -  var PR_SOURCE = 'src';
    -  /** token style for an sgml attribute name. */
    -  var PR_ATTRIB_NAME = 'atn';
    -  /** token style for an sgml attribute value. */
    -  var PR_ATTRIB_VALUE = 'atv';
    -
    -  /**
    -   * A class that indicates a section of markup that is not code, e.g. to allow
    -   * embedding of line numbers within code listings.
    -   */
    -  var PR_NOCODE = 'nocode';
    -
    -  /** A set of tokens that can precede a regular expression literal in
    -    * javascript.
    -    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    -    * list, but I've removed ones that might be problematic when seen in
    -    * languages that don't support regular expression literals.
    -    *
    -    * <p>Specifically, I've removed any keywords that can't precede a regexp
    -    * literal in a syntactically legal javascript program, and I've removed the
    -    * "in" keyword since it's not a keyword in many languages, and might be used
    -    * as a count of inches.
    -    *
    -    * <p>The link a above does not accurately describe EcmaScript rules since
    -    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    -    * very well in practice.
    -    *
    -    * @private
    -    */
    -  var REGEXP_PRECEDER_PATTERN = function () {
    -      var preceders = [
    -          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    -          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    -          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    -          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    -          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    -          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    -          "||=", "~" /* handles =~ and !~ */,
    -          "break", "case", "continue", "delete",
    -          "do", "else", "finally", "instanceof",
    -          "return", "throw", "try", "typeof"
    -          ];
    -      var pattern = '(?:^^|[+-]';
    -      for (var i = 0; i < preceders.length; ++i) {
    -        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    -      }
    -      pattern += ')\\s*';  // matches at end, and matches empty string
    -      return pattern;
    -      // CAVEAT: this does not properly handle the case where a regular
    -      // expression immediately follows another since a regular expression may
    -      // have flags for case-sensitivity and the like.  Having regexp tokens
    -      // adjacent is not valid in any language I'm aware of, so I'm punting.
    -      // TODO: maybe style special characters inside a regexp as punctuation.
    -    }();
    -
    -  // Define regexps here so that the interpreter doesn't have to create an
    -  // object each time the function containing them is called.
    -  // The language spec requires a new object created even if you don't access
    -  // the $1 members.
    -  var pr_amp = /&/g;
    -  var pr_lt = /</g;
    -  var pr_gt = />/g;
    -  var pr_quot = /\"/g;
    -  /** like textToHtml but escapes double quotes to be attribute safe. */
    -  function attribToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;')
    -        .replace(pr_quot, '&quot;');
    -  }
    -
    -  /** escapest html special characters to html. */
    -  function textToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;');
    -  }
    -
    -
    -  var pr_ltEnt = /&lt;/g;
    -  var pr_gtEnt = /&gt;/g;
    -  var pr_aposEnt = /&apos;/g;
    -  var pr_quotEnt = /&quot;/g;
    -  var pr_ampEnt = /&amp;/g;
    -  var pr_nbspEnt = /&nbsp;/g;
    -  /** unescapes html to plain text. */
    -  function htmlToText(html) {
    -    var pos = html.indexOf('&');
    -    if (pos < 0) { return html; }
    -    // Handle numeric entities specially.  We can't use functional substitution
    -    // since that doesn't work in older versions of Safari.
    -    // These should be rare since most browsers convert them to normal chars.
    -    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    -      var end = html.indexOf(';', pos);
    -      if (end >= 0) {
    -        var num = html.substring(pos + 3, end);
    -        var radix = 10;
    -        if (num && num.charAt(0) === 'x') {
    -          num = num.substring(1);
    -          radix = 16;
    -        }
    -        var codePoint = parseInt(num, radix);
    -        if (!isNaN(codePoint)) {
    -          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    -                  html.substring(end + 1));
    -        }
    -      }
    -    }
    -
    -    return html.replace(pr_ltEnt, '<')
    -        .replace(pr_gtEnt, '>')
    -        .replace(pr_aposEnt, "'")
    -        .replace(pr_quotEnt, '"')
    -        .replace(pr_nbspEnt, ' ')
    -        .replace(pr_ampEnt, '&');
    -  }
    -
    -  /** is the given node's innerHTML normally unescaped? */
    -  function isRawContent(node) {
    -    return 'XMP' === node.tagName;
    -  }
    -
    -  var newlineRe = /[\r\n]/g;
    -  /**
    -   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    -   */
    -  function isPreformatted(node, content) {
    -    // PRE means preformatted, and is a very common case, so don't create
    -    // unnecessary computed style objects.
    -    if ('PRE' === node.tagName) { return true; }
    -    if (!newlineRe.test(content)) { return true; }  // Don't care
    -    var whitespace = '';
    -    // For disconnected nodes, IE has no currentStyle.
    -    if (node.currentStyle) {
    -      whitespace = node.currentStyle.whiteSpace;
    -    } else if (window.getComputedStyle) {
    -      // Firefox makes a best guess if node is disconnected whereas Safari
    -      // returns the empty string.
    -      whitespace = window.getComputedStyle(node, null).whiteSpace;
    -    }
    -    return !whitespace || whitespace === 'pre';
    -  }
    -
    -  function normalizedHtml(node, out, opt_sortAttrs) {
    -    switch (node.nodeType) {
    -      case 1:  // an element
    -        var name = node.tagName.toLowerCase();
    -
    -        out.push('<', name);
    -        var attrs = node.attributes;
    -        var n = attrs.length;
    -        if (n) {
    -          if (opt_sortAttrs) {
    -            var sortedAttrs = [];
    -            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    -            sortedAttrs.sort(function (a, b) {
    -                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    -              });
    -            attrs = sortedAttrs;
    -          }
    -          for (var i = 0; i < n; ++i) {
    -            var attr = attrs[i];
    -            if (!attr.specified) { continue; }
    -            out.push(' ', attr.name.toLowerCase(),
    -                     '="', attribToHtml(attr.value), '"');
    -          }
    -        }
    -        out.push('>');
    -        for (var child = node.firstChild; child; child = child.nextSibling) {
    -          normalizedHtml(child, out, opt_sortAttrs);
    -        }
    -        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    -          out.push('<\/', name, '>');
    -        }
    -        break;
    -      case 3: case 4: // text
    -        out.push(textToHtml(node.nodeValue));
    -        break;
    -    }
    -  }
    -
    -  /**
    -   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    -   * matches the union o the sets o strings matched d by the input RegExp.
    -   * Since it matches globally, if the input strings have a start-of-input
    -   * anchor (/^.../), it is ignored for the purposes of unioning.
    -   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    -   * @return {RegExp} a global regex.
    -   */
    -  function combinePrefixPatterns(regexs) {
    -    var capturedGroupIndex = 0;
    -
    -    var needToFoldCase = false;
    -    var ignoreCase = false;
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.ignoreCase) {
    -        ignoreCase = true;
    -      } else if (/[a-z]/i.test(regex.source.replace(
    -                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    -        needToFoldCase = true;
    -        ignoreCase = false;
    -        break;
    -      }
    -    }
    -
    -    function decodeEscape(charsetPart) {
    -      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    -      switch (charsetPart.charAt(1)) {
    -        case 'b': return 8;
    -        case 't': return 9;
    -        case 'n': return 0xa;
    -        case 'v': return 0xb;
    -        case 'f': return 0xc;
    -        case 'r': return 0xd;
    -        case 'u': case 'x':
    -          return parseInt(charsetPart.substring(2), 16)
    -              || charsetPart.charCodeAt(1);
    -        case '0': case '1': case '2': case '3': case '4':
    -        case '5': case '6': case '7':
    -          return parseInt(charsetPart.substring(1), 8);
    -        default: return charsetPart.charCodeAt(1);
    -      }
    -    }
    -
    -    function encodeEscape(charCode) {
    -      if (charCode < 0x20) {
    -        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    -      }
    -      var ch = String.fromCharCode(charCode);
    -      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    -        ch = '\\' + ch;
    -      }
    -      return ch;
    -    }
    -
    -    function caseFoldCharset(charSet) {
    -      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    -          new RegExp(
    -              '\\\\u[0-9A-Fa-f]{4}'
    -              + '|\\\\x[0-9A-Fa-f]{2}'
    -              + '|\\\\[0-3][0-7]{0,2}'
    -              + '|\\\\[0-7]{1,2}'
    -              + '|\\\\[\\s\\S]'
    -              + '|-'
    -              + '|[^-\\\\]',
    -              'g'));
    -      var groups = [];
    -      var ranges = [];
    -      var inverse = charsetParts[0] === '^';
    -      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    -        var p = charsetParts[i];
    -        switch (p) {
    -          case '\\B': case '\\b':
    -          case '\\D': case '\\d':
    -          case '\\S': case '\\s':
    -          case '\\W': case '\\w':
    -            groups.push(p);
    -            continue;
    -        }
    -        var start = decodeEscape(p);
    -        var end;
    -        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    -          end = decodeEscape(charsetParts[i + 2]);
    -          i += 2;
    -        } else {
    -          end = start;
    -        }
    -        ranges.push([start, end]);
    -        // If the range might intersect letters, then expand it.
    -        if (!(end < 65 || start > 122)) {
    -          if (!(end < 65 || start > 90)) {
    -            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    -          }
    -          if (!(end < 97 || start > 122)) {
    -            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    -          }
    -        }
    -      }
    -
    -      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    -      // -> [[1, 12], [14, 14], [16, 17]]
    -      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    -      var consolidatedRanges = [];
    -      var lastRange = [NaN, NaN];
    -      for (var i = 0; i < ranges.length; ++i) {
    -        var range = ranges[i];
    -        if (range[0] <= lastRange[1] + 1) {
    -          lastRange[1] = Math.max(lastRange[1], range[1]);
    -        } else {
    -          consolidatedRanges.push(lastRange = range);
    -        }
    -      }
    -
    -      var out = ['['];
    -      if (inverse) { out.push('^'); }
    -      out.push.apply(out, groups);
    -      for (var i = 0; i < consolidatedRanges.length; ++i) {
    -        var range = consolidatedRanges[i];
    -        out.push(encodeEscape(range[0]));
    -        if (range[1] > range[0]) {
    -          if (range[1] + 1 > range[0]) { out.push('-'); }
    -          out.push(encodeEscape(range[1]));
    -        }
    -      }
    -      out.push(']');
    -      return out.join('');
    -    }
    -
    -    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    -      // Split into character sets, escape sequences, punctuation strings
    -      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    -      // include any of the above.
    -      var parts = regex.source.match(
    -          new RegExp(
    -              '(?:'
    -              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    -              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    -              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    -              + '|\\\\[0-9]+'  // a back-reference or octal escape
    -              + '|\\\\[^ux0-9]'  // other escape sequence
    -              + '|\\(\\?[:!=]'  // start of a non-capturing group
    -              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    -              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    -              + ')',
    -              'g'));
    -      var n = parts.length;
    -
    -      // Maps captured group numbers to the number they will occupy in
    -      // the output or to -1 if that has not been determined, or to
    -      // undefined if they need not be capturing in the output.
    -      var capturedGroups = [];
    -
    -      // Walk over and identify back references to build the capturedGroups
    -      // mapping.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          // groups are 1-indexed, so max group index is count of '('
    -          ++groupIndex;
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            capturedGroups[decimalValue] = -1;
    -          }
    -        }
    -      }
    -
    -      // Renumber groups and reduce capturing groups to non-capturing groups
    -      // where possible.
    -      for (var i = 1; i < capturedGroups.length; ++i) {
    -        if (-1 === capturedGroups[i]) {
    -          capturedGroups[i] = ++capturedGroupIndex;
    -        }
    -      }
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          ++groupIndex;
    -          if (capturedGroups[groupIndex] === undefined) {
    -            parts[i] = '(?:';
    -          }
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            parts[i] = '\\' + capturedGroups[groupIndex];
    -          }
    -        }
    -      }
    -
    -      // Remove any prefix anchors so that the output will match anywhere.
    -      // ^^ really does mean an anchored match though.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    -      }
    -
    -      // Expand letters to groupts to handle mixing of case-sensitive and
    -      // case-insensitive patterns if necessary.
    -      if (regex.ignoreCase && needToFoldCase) {
    -        for (var i = 0; i < n; ++i) {
    -          var p = parts[i];
    -          var ch0 = p.charAt(0);
    -          if (p.length >= 2 && ch0 === '[') {
    -            parts[i] = caseFoldCharset(p);
    -          } else if (ch0 !== '\\') {
    -            // TODO: handle letters in numeric escapes.
    -            parts[i] = p.replace(
    -                /[a-zA-Z]/g,
    -                function (ch) {
    -                  var cc = ch.charCodeAt(0);
    -                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    -                });
    -          }
    -        }
    -      }
    -
    -      return parts.join('');
    -    }
    -
    -    var rewritten = [];
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    -      rewritten.push(
    -          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    -    }
    -
    -    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    -  }
    -
    -  var PR_innerHtmlWorks = null;
    -  function getInnerHtml(node) {
    -    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    -    // an html description of well formed XML and the containing tag is a PRE
    -    // tag, so we detect that case and emulate innerHTML.
    -    if (null === PR_innerHtmlWorks) {
    -      var testNode = document.createElement('PRE');
    -      testNode.appendChild(
    -          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    -      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    -    }
    -
    -    if (PR_innerHtmlWorks) {
    -      var content = node.innerHTML;
    -      // XMP tags contain unescaped entities so require special handling.
    -      if (isRawContent(node)) {
    -        content = textToHtml(content);
    -      } else if (!isPreformatted(node, content)) {
    -        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    -            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    -      }
    -      return content;
    -    }
    -
    -    var out = [];
    -    for (var child = node.firstChild; child; child = child.nextSibling) {
    -      normalizedHtml(child, out);
    -    }
    -    return out.join('');
    -  }
    -
    -  /** returns a function that expand tabs to spaces.  This function can be fed
    -    * successive chunks of text, and will maintain its own internal state to
    -    * keep track of how tabs are expanded.
    -    * @return {function (string) : string} a function that takes
    -    *   plain text and return the text with tabs expanded.
    -    * @private
    -    */
    -  function makeTabExpander(tabWidth) {
    -    var SPACES = '                ';
    -    var charInLine = 0;
    -
    -    return function (plainText) {
    -      // walk over each character looking for tabs and newlines.
    -      // On tabs, expand them.  On newlines, reset charInLine.
    -      // Otherwise increment charInLine
    -      var out = null;
    -      var pos = 0;
    -      for (var i = 0, n = plainText.length; i < n; ++i) {
    -        var ch = plainText.charAt(i);
    -
    -        switch (ch) {
    -          case '\t':
    -            if (!out) { out = []; }
    -            out.push(plainText.substring(pos, i));
    -            // calculate how much space we need in front of this part
    -            // nSpaces is the amount of padding -- the number of spaces needed
    -            // to move us to the next column, where columns occur at factors of
    -            // tabWidth.
    -            var nSpaces = tabWidth - (charInLine % tabWidth);
    -            charInLine += nSpaces;
    -            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    -              out.push(SPACES.substring(0, nSpaces));
    -            }
    -            pos = i + 1;
    -            break;
    -          case '\n':
    -            charInLine = 0;
    -            break;
    -          default:
    -            ++charInLine;
    -        }
    -      }
    -      if (!out) { return plainText; }
    -      out.push(plainText.substring(pos));
    -      return out.join('');
    -    };
    -  }
    -
    -  var pr_chunkPattern = new RegExp(
    -      '[^<]+'  // A run of characters other than '<'
    -      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    -      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    -      // a probable tag that should not be highlighted
    -      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    -      + '|<',  // A '<' that does not begin a larger chunk
    -      'g');
    -  var pr_commentPrefix = /^<\!--/;
    -  var pr_cdataPrefix = /^<!\[CDATA\[/;
    -  var pr_brPrefix = /^<br\b/i;
    -  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    -
    -  /** split markup into chunks of html tags (style null) and
    -    * plain text (style {@link #PR_PLAIN}), converting tags which are
    -    * significant for tokenization (<br>) into their textual equivalent.
    -    *
    -    * @param {string} s html where whitespace is considered significant.
    -    * @return {Object} source code and extracted tags.
    -    * @private
    -    */
    -  function extractTags(s) {
    -    // since the pattern has the 'g' modifier and defines no capturing groups,
    -    // this will return a list of all chunks which we then classify and wrap as
    -    // PR_Tokens
    -    var matches = s.match(pr_chunkPattern);
    -    var sourceBuf = [];
    -    var sourceBufLen = 0;
    -    var extractedTags = [];
    -    if (matches) {
    -      for (var i = 0, n = matches.length; i < n; ++i) {
    -        var match = matches[i];
    -        if (match.length > 1 && match.charAt(0) === '<') {
    -          if (pr_commentPrefix.test(match)) { continue; }
    -          if (pr_cdataPrefix.test(match)) {
    -            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    -            sourceBuf.push(match.substring(9, match.length - 3));
    -            sourceBufLen += match.length - 12;
    -          } else if (pr_brPrefix.test(match)) {
    -            // <br> tags are lexically significant so convert them to text.
    -            // This is undone later.
    -            sourceBuf.push('\n');
    -            ++sourceBufLen;
    -          } else {
    -            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    -              // A <span class="nocode"> will start a section that should be
    -              // ignored.  Continue walking the list until we see a matching end
    -              // tag.
    -              var name = match.match(pr_tagNameRe)[2];
    -              var depth = 1;
    -              var j;
    -              end_tag_loop:
    -              for (j = i + 1; j < n; ++j) {
    -                var name2 = matches[j].match(pr_tagNameRe);
    -                if (name2 && name2[2] === name) {
    -                  if (name2[1] === '/') {
    -                    if (--depth === 0) { break end_tag_loop; }
    -                  } else {
    -                    ++depth;
    -                  }
    -                }
    -              }
    -              if (j < n) {
    -                extractedTags.push(
    -                    sourceBufLen, matches.slice(i, j + 1).join(''));
    -                i = j;
    -              } else {  // Ignore unclosed sections.
    -                extractedTags.push(sourceBufLen, match);
    -              }
    -            } else {
    -              extractedTags.push(sourceBufLen, match);
    -            }
    -          }
    -        } else {
    -          var literalText = htmlToText(match);
    -          sourceBuf.push(literalText);
    -          sourceBufLen += literalText.length;
    -        }
    -      }
    -    }
    -    return { source: sourceBuf.join(''), tags: extractedTags };
    -  }
    -
    -  /** True if the given tag contains a class attribute with the nocode class. */
    -  function isNoCodeTag(tag) {
    -    return !!tag
    -        // First canonicalize the representation of attributes
    -        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    -                 ' $1="$2$3$4"')
    -        // Then look for the attribute we want.
    -        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    -  }
    -
    -  /**
    -   * Apply the given language handler to sourceCode and add the resulting
    -   * decorations to out.
    -   * @param {number} basePos the index of sourceCode within the chunk of source
    -   *    whose decorations are already present on out.
    -   */
    -  function appendDecorations(basePos, sourceCode, langHandler, out) {
    -    if (!sourceCode) { return; }
    -    var job = {
    -      source: sourceCode,
    -      basePos: basePos
    -    };
    -    langHandler(job);
    -    out.push.apply(out, job.decorations);
    -  }
    -
    -  /** Given triples of [style, pattern, context] returns a lexing function,
    -    * The lexing function interprets the patterns to find token boundaries and
    -    * returns a decoration list of the form
    -    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    -    * where index_n is an index into the sourceCode, and style_n is a style
    -    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    -    * all characters in sourceCode[index_n-1:index_n].
    -    *
    -    * The stylePatterns is a list whose elements have the form
    -    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    -    *
    -    * Style is a style constant like PR_PLAIN, or can be a string of the
    -    * form 'lang-FOO', where FOO is a language extension describing the
    -    * language of the portion of the token in $1 after pattern executes.
    -    * E.g., if style is 'lang-lisp', and group 1 contains the text
    -    * '(hello (world))', then that portion of the token will be passed to the
    -    * registered lisp handler for formatting.
    -    * The text before and after group 1 will be restyled using this decorator
    -    * so decorators should take care that this doesn't result in infinite
    -    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    -    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    -    * '<script>foo()<\/script>', which would cause the current decorator to
    -    * be called with '<script>' which would not match the same rule since
    -    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    -    * the generic tag rule.  The handler registered for the 'js' extension would
    -    * then be called with 'foo()', and finally, the current decorator would
    -    * be called with '<\/script>' which would not match the original rule and
    -    * so the generic tag rule would identify it as a tag.
    -    *
    -    * Pattern must only match prefixes, and if it matches a prefix, then that
    -    * match is considered a token with the same style.
    -    *
    -    * Context is applied to the last non-whitespace, non-comment token
    -    * recognized.
    -    *
    -    * Shortcut is an optional string of characters, any of which, if the first
    -    * character, gurantee that this pattern and only this pattern matches.
    -    *
    -    * @param {Array} shortcutStylePatterns patterns that always start with
    -    *   a known character.  Must have a shortcut string.
    -    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    -    *   order if the shortcut ones fail.  May have shortcuts.
    -    *
    -    * @return {function (Object)} a
    -    *   function that takes source code and returns a list of decorations.
    -    */
    -  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    -    var shortcuts = {};
    -    var tokenizer;
    -    (function () {
    -      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    -      var allRegexs = [];
    -      var regexKeys = {};
    -      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    -        var patternParts = allPatterns[i];
    -        var shortcutChars = patternParts[3];
    -        if (shortcutChars) {
    -          for (var c = shortcutChars.length; --c >= 0;) {
    -            shortcuts[shortcutChars.charAt(c)] = patternParts;
    -          }
    -        }
    -        var regex = patternParts[1];
    -        var k = '' + regex;
    -        if (!regexKeys.hasOwnProperty(k)) {
    -          allRegexs.push(regex);
    -          regexKeys[k] = null;
    -        }
    -      }
    -      allRegexs.push(/[\0-\uffff]/);
    -      tokenizer = combinePrefixPatterns(allRegexs);
    -    })();
    -
    -    var nPatterns = fallthroughStylePatterns.length;
    -    var notWs = /\S/;
    -
    -    /**
    -     * Lexes job.source and produces an output array job.decorations of style
    -     * classes preceded by the position at which they start in job.source in
    -     * order.
    -     *
    -     * @param {Object} job an object like {@code
    -     *    source: {string} sourceText plain text,
    -     *    basePos: {int} position of job.source in the larger chunk of
    -     *        sourceCode.
    -     * }
    -     */
    -    var decorate = function (job) {
    -      var sourceCode = job.source, basePos = job.basePos;
    -      /** Even entries are positions in source in ascending order.  Odd enties
    -        * are style markers (e.g., PR_COMMENT) that run from that position until
    -        * the end.
    -        * @type {Array.<number|string>}
    -        */
    -      var decorations = [basePos, PR_PLAIN];
    -      var pos = 0;  // index into sourceCode
    -      var tokens = sourceCode.match(tokenizer) || [];
    -      var styleCache = {};
    -
    -      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    -        var token = tokens[ti];
    -        var style = styleCache[token];
    -        var match = void 0;
    -
    -        var isEmbedded;
    -        if (typeof style === 'string') {
    -          isEmbedded = false;
    -        } else {
    -          var patternParts = shortcuts[token.charAt(0)];
    -          if (patternParts) {
    -            match = token.match(patternParts[1]);
    -            style = patternParts[0];
    -          } else {
    -            for (var i = 0; i < nPatterns; ++i) {
    -              patternParts = fallthroughStylePatterns[i];
    -              match = token.match(patternParts[1]);
    -              if (match) {
    -                style = patternParts[0];
    -                break;
    -              }
    -            }
    -
    -            if (!match) {  // make sure that we make progress
    -              style = PR_PLAIN;
    -            }
    -          }
    -
    -          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    -          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    -            isEmbedded = false;
    -            style = PR_SOURCE;
    -          }
    -
    -          if (!isEmbedded) { styleCache[token] = style; }
    -        }
    -
    -        var tokenStart = pos;
    -        pos += token.length;
    -
    -        if (!isEmbedded) {
    -          decorations.push(basePos + tokenStart, style);
    -        } else {  // Treat group 1 as an embedded block of source code.
    -          var embeddedSource = match[1];
    -          var embeddedSourceStart = token.indexOf(embeddedSource);
    -          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    -          if (match[2]) {
    -            // If embeddedSource can be blank, then it would match at the
    -            // beginning which would cause us to infinitely recurse on the
    -            // entire token, so we catch the right context in match[2].
    -            embeddedSourceEnd = token.length - match[2].length;
    -            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    -          }
    -          var lang = style.substring(5);
    -          // Decorate the left of the embedded source
    -          appendDecorations(
    -              basePos + tokenStart,
    -              token.substring(0, embeddedSourceStart),
    -              decorate, decorations);
    -          // Decorate the embedded source
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceStart,
    -              embeddedSource,
    -              langHandlerForExtension(lang, embeddedSource),
    -              decorations);
    -          // Decorate the right of the embedded section
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceEnd,
    -              token.substring(embeddedSourceEnd),
    -              decorate, decorations);
    -        }
    -      }
    -      job.decorations = decorations;
    -    };
    -    return decorate;
    -  }
    -
    -  /** returns a function that produces a list of decorations from source text.
    -    *
    -    * This code treats ", ', and ` as string delimiters, and \ as a string
    -    * escape.  It does not recognize perl's qq() style strings.
    -    * It has no special handling for double delimiter escapes as in basic, or
    -    * the tripled delimiters used in python, but should work on those regardless
    -    * although in those cases a single string literal may be broken up into
    -    * multiple adjacent string literals.
    -    *
    -    * It recognizes C, C++, and shell style comments.
    -    *
    -    * @param {Object} options a set of optional parameters.
    -    * @return {function (Object)} a function that examines the source code
    -    *     in the input job and builds the decoration list.
    -    */
    -  function sourceDecorator(options) {
    -    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    -    if (options['tripleQuotedStrings']) {
    -      // '''multi-line-string''', 'single-line-string', and double-quoted
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    -           null, '\'"']);
    -    } else if (options['multiLineStrings']) {
    -      // 'multi-line-string', "multi-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    -           null, '\'"`']);
    -    } else {
    -      // 'single-line-string', "single-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,
    -           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    -           null, '"\'']);
    -    }
    -    if (options['verbatimStrings']) {
    -      // verbatim-string-literal production from the C# grammar.  See issue 93.
    -      fallthroughStylePatterns.push(
    -          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    -    }
    -    if (options['hashComments']) {
    -      if (options['cStyleComments']) {
    -        // Stop C preprocessor declarations at an unclosed open comment
    -        shortcutStylePatterns.push(
    -            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    -             null, '#']);
    -        fallthroughStylePatterns.push(
    -            [PR_STRING,
    -             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    -             null]);
    -      } else {
    -        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    -      }
    -    }
    -    if (options['cStyleComments']) {
    -      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    -      fallthroughStylePatterns.push(
    -          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    -    }
    -    if (options['regexLiterals']) {
    -      var REGEX_LITERAL = (
    -          // A regular expression literal starts with a slash that is
    -          // not followed by * or / so that it is not confused with
    -          // comments.
    -          '/(?=[^/*])'
    -          // and then contains any number of raw characters,
    -          + '(?:[^/\\x5B\\x5C]'
    -          // escape sequences (\x5C),
    -          +    '|\\x5C[\\s\\S]'
    -          // or non-nesting character sets (\x5B\x5D);
    -          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    -          // finally closed by a /.
    -          + '/');
    -      fallthroughStylePatterns.push(
    -          ['lang-regex',
    -           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    -           ]);
    -    }
    -
    -    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    -    if (keywords.length) {
    -      fallthroughStylePatterns.push(
    -          [PR_KEYWORD,
    -           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    -    }
    -
    -    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    -    fallthroughStylePatterns.push(
    -        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    -        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    -        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_LITERAL,
    -         new RegExp(
    -             '^(?:'
    -             // A hex number
    -             + '0x[a-f0-9]+'
    -             // or an octal or decimal number,
    -             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    -             // possibly in scientific notation
    -             + '(?:e[+\\-]?\\d+)?'
    -             + ')'
    -             // with an optional modifier like UL for unsigned long
    -             + '[a-z]*', 'i'),
    -         null, '0123456789'],
    -        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    -
    -    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    -  }
    -
    -  var decorateSource = sourceDecorator({
    -        'keywords': ALL_KEYWORDS,
    -        'hashComments': true,
    -        'cStyleComments': true,
    -        'multiLineStrings': true,
    -        'regexLiterals': true
    -      });
    -
    -  /** Breaks {@code job.source} around style boundaries in
    -    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    -    * and leaves the result in {@code job.prettyPrintedHtml}.
    -    * @param {Object} job like {
    -    *    source: {string} source as plain text,
    -    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    -    *                   html preceded by their position in {@code job.source}
    -    *                   in order
    -    *    decorations: {Array.<number|string} an array of style classes preceded
    -    *                 by the position at which they start in job.source in order
    -    * }
    -    * @private
    -    */
    -  function recombineTagsAndDecorations(job) {
    -    var sourceText = job.source;
    -    var extractedTags = job.extractedTags;
    -    var decorations = job.decorations;
    -
    -    var html = [];
    -    // index past the last char in sourceText written to html
    -    var outputIdx = 0;
    -
    -    var openDecoration = null;
    -    var currentDecoration = null;
    -    var tagPos = 0;  // index into extractedTags
    -    var decPos = 0;  // index into decorations
    -    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    -
    -    var adjacentSpaceRe = /([\r\n ]) /g;
    -    var startOrSpaceRe = /(^| ) /gm;
    -    var newlineRe = /\r\n?|\n/g;
    -    var trailingSpaceRe = /[ \r\n]$/;
    -    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    -
    -    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    -    var isIE678 = window['_pr_isIE6']();
    -    var lineBreakHtml = (
    -        isIE678
    -        ? (job.sourceNode.tagName === 'PRE'
    -           // Use line feeds instead of <br>s so that copying and pasting works
    -           // on IE.
    -           // Doing this on other browsers breaks lots of stuff since \r\n is
    -           // treated as two newlines on Firefox.
    -           ? (isIE678 === 6 ? '&#160;\r\n' :
    -              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    -           // IE collapses multiple adjacent <br>s into 1 line break.
    -           // Prefix every newline with '&#160;' to prevent such behavior.
    -           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    -           : '&#160;<br />')
    -        : '<br />');
    -
    -    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    -    // number of the first line.
    -    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    -    var lineBreaker;
    -    if (numberLines) {
    -      var lineBreaks = [];
    -      for (var i = 0; i < 10; ++i) {
    -        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    -      }
    -      var lineNum = numberLines[1] && numberLines[1].length
    -          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    -      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    -      if (lineNum) {
    -        html.push(' value="', lineNum + 1, '"');
    -      }
    -      html.push('>');
    -      lineBreaker = function () {
    -        var lb = lineBreaks[++lineNum % 10];
    -        // If a decoration is open, we need to close it before closing a list-item
    -        // and reopen it on the other side of the list item.
    -        return openDecoration
    -            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    -      };
    -    } else {
    -      lineBreaker = lineBreakHtml;
    -    }
    -
    -    // A helper function that is responsible for opening sections of decoration
    -    // and outputing properly escaped chunks of source
    -    function emitTextUpTo(sourceIdx) {
    -      if (sourceIdx > outputIdx) {
    -        if (openDecoration && openDecoration !== currentDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        if (!openDecoration && currentDecoration) {
    -          openDecoration = currentDecoration;
    -          html.push('<span class="', openDecoration, '">');
    -        }
    -        // This interacts badly with some wikis which introduces paragraph tags
    -        // into pre blocks for some strange reason.
    -        // It's necessary for IE though which seems to lose the preformattedness
    -        // of <pre> tags when their innerHTML is assigned.
    -        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    -        // and it serves to undo the conversion of <br>s to newlines done in
    -        // chunkify.
    -        var htmlChunk = textToHtml(
    -            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    -            .replace(lastWasSpace
    -                     ? startOrSpaceRe
    -                     : adjacentSpaceRe, '$1&#160;');
    -        // Keep track of whether we need to escape space at the beginning of the
    -        // next chunk.
    -        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    -        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    -        outputIdx = sourceIdx;
    -      }
    -    }
    -
    -    while (true) {
    -      // Determine if we're going to consume a tag this time around.  Otherwise
    -      // we consume a decoration or exit.
    -      var outputTag;
    -      if (tagPos < extractedTags.length) {
    -        if (decPos < decorations.length) {
    -          // Pick one giving preference to extractedTags since we shouldn't open
    -          // a new style that we're going to have to immediately close in order
    -          // to output a tag.
    -          outputTag = extractedTags[tagPos] <= decorations[decPos];
    -        } else {
    -          outputTag = true;
    -        }
    -      } else {
    -        outputTag = false;
    -      }
    -      // Consume either a decoration or a tag or exit.
    -      if (outputTag) {
    -        emitTextUpTo(extractedTags[tagPos]);
    -        if (openDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        html.push(extractedTags[tagPos + 1]);
    -        tagPos += 2;
    -      } else if (decPos < decorations.length) {
    -        emitTextUpTo(decorations[decPos]);
    -        currentDecoration = decorations[decPos + 1];
    -        decPos += 2;
    -      } else {
    -        break;
    -      }
    -    }
    -    emitTextUpTo(sourceText.length);
    -    if (openDecoration) {
    -      html.push('</span>');
    -    }
    -    if (numberLines) { html.push('</li></ol>'); }
    -    job.prettyPrintedHtml = html.join('');
    -  }
    -
    -  /** Maps language-specific file extensions to handlers. */
    -  var langHandlerRegistry = {};
    -  /** Register a language handler for the given file extensions.
    -    * @param {function (Object)} handler a function from source code to a list
    -    *      of decorations.  Takes a single argument job which describes the
    -    *      state of the computation.   The single parameter has the form
    -    *      {@code {
    -    *        source: {string} as plain text.
    -    *        decorations: {Array.<number|string>} an array of style classes
    -    *                     preceded by the position at which they start in
    -    *                     job.source in order.
    -    *                     The language handler should assigned this field.
    -    *        basePos: {int} the position of source in the larger source chunk.
    -    *                 All positions in the output decorations array are relative
    -    *                 to the larger source chunk.
    -    *      } }
    -    * @param {Array.<string>} fileExtensions
    -    */
    -  function registerLangHandler(handler, fileExtensions) {
    -    for (var i = fileExtensions.length; --i >= 0;) {
    -      var ext = fileExtensions[i];
    -      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    -        langHandlerRegistry[ext] = handler;
    -      } else if ('console' in window) {
    -        console['warn']('cannot override language handler %s', ext);
    -      }
    -    }
    -  }
    -  function langHandlerForExtension(extension, source) {
    -    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    -      // Treat it as markup if the first non whitespace character is a < and
    -      // the last non-whitespace character is a >.
    -      extension = /^\s*</.test(source)
    -          ? 'default-markup'
    -          : 'default-code';
    -    }
    -    return langHandlerRegistry[extension];
    -  }
    -  registerLangHandler(decorateSource, ['default-code']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [],
    -          [
    -           [PR_PLAIN,       /^[^<?]+/],
    -           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    -           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    -           // Unescaped content in an unknown language
    -           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    -           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    -           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    -           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    -           // Unescaped content in javascript.  (Or possibly vbscript).
    -           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    -           // Contains unescaped stylesheet content
    -           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    -           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    -          ]),
    -      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [
    -           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    -           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    -           ],
    -          [
    -           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    -           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    -           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    -           [PR_PUNCTUATION,  /^[=<>\/]+/],
    -           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    -           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    -           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    -           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    -           ]),
    -      ['in.tag']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CPP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true
    -        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': 'null true false'
    -        }), ['json']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CSHARP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true,
    -          'verbatimStrings': true
    -        }), ['cs']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JAVA_KEYWORDS,
    -          'cStyleComments': true
    -        }), ['java']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': SH_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true
    -        }), ['bsh', 'csh', 'sh']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PYTHON_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'tripleQuotedStrings': true
    -        }), ['cv', 'py']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PERL_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['perl', 'pl', 'pm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': RUBY_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['rb']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JSCRIPT_KEYWORDS,
    -          'cStyleComments': true,
    -          'regexLiterals': true
    -        }), ['js']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    -
    -  function applyDecorator(job) {
    -    var sourceCodeHtml = job.sourceCodeHtml;
    -    var opt_langExtension = job.langExtension;
    -
    -    // Prepopulate output in case processing fails with an exception.
    -    job.prettyPrintedHtml = sourceCodeHtml;
    -
    -    try {
    -      // Extract tags, and convert the source code to plain text.
    -      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    -      /** Plain text. @type {string} */
    -      var source = sourceAndExtractedTags.source;
    -      job.source = source;
    -      job.basePos = 0;
    -
    -      /** Even entries are positions in source in ascending order.  Odd entries
    -        * are tags that were extracted at that position.
    -        * @type {Array.<number|string>}
    -        */
    -      job.extractedTags = sourceAndExtractedTags.tags;
    -
    -      // Apply the appropriate language handler
    -      langHandlerForExtension(opt_langExtension, source)(job);
    -      // Integrate the decorations and tags back into the source code to produce
    -      // a decorated html string which is left in job.prettyPrintedHtml.
    -      recombineTagsAndDecorations(job);
    -    } catch (e) {
    -      if ('console' in window) {
    -        console['log'](e && e['stack'] ? e['stack'] : e);
    -      }
    -    }
    -  }
    -
    -  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    -    var job = {
    -      sourceCodeHtml: sourceCodeHtml,
    -      langExtension: opt_langExtension
    -    };
    -    applyDecorator(job);
    -    return job.prettyPrintedHtml;
    -  }
    -
    -  function prettyPrint(opt_whenDone) {
    -    function byTagName(tn) { return document.getElementsByTagName(tn); }
    -    // fetch a list of nodes to rewrite
    -    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    -    var elements = [];
    -    for (var i = 0; i < codeSegments.length; ++i) {
    -      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    -        elements.push(codeSegments[i][j]);
    -      }
    -    }
    -    codeSegments = null;
    -
    -    var clock = Date;
    -    if (!clock['now']) {
    -      clock = { 'now': function () { return (new Date).getTime(); } };
    -    }
    -
    -    // The loop is broken into a series of continuations to make sure that we
    -    // don't make the browser unresponsive when rewriting a large page.
    -    var k = 0;
    -    var prettyPrintingJob;
    -
    -    function doWork() {
    -      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    -                     clock.now() + 250 /* ms */ :
    -                     Infinity);
    -      for (; k < elements.length && clock.now() < endTime; k++) {
    -        var cs = elements[k];
    -        // [JACOCO] 'prettyprint' -> 'source'
    -        if (cs.className && cs.className.indexOf('source') >= 0) {
    -          // If the classes includes a language extensions, use it.
    -          // Language extensions can be specified like
    -          //     <pre class="prettyprint lang-cpp">
    -          // the language extension "cpp" is used to find a language handler as
    -          // passed to PR_registerLangHandler.
    -          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    -          if (langExtension) { langExtension = langExtension[1]; }
    -
    -          // make sure this is not nested in an already prettified element
    -          var nested = false;
    -          for (var p = cs.parentNode; p; p = p.parentNode) {
    -            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    -                 p.tagName === 'xmp') &&
    -                // [JACOCO] 'prettyprint' -> 'source'
    -                p.className && p.className.indexOf('source') >= 0) {
    -              nested = true;
    -              break;
    -            }
    -          }
    -          if (!nested) {
    -            // fetch the content as a snippet of properly escaped HTML.
    -            // Firefox adds newlines at the end.
    -            var content = getInnerHtml(cs);
    -            content = content.replace(/(?:\r\n?|\n)$/, '');
    -
    -            // do the pretty printing
    -            prettyPrintingJob = {
    -              sourceCodeHtml: content,
    -              langExtension: langExtension,
    -              sourceNode: cs
    -            };
    -            applyDecorator(prettyPrintingJob);
    -            replaceWithPrettyPrintedHtml();
    -          }
    -        }
    -      }
    -      if (k < elements.length) {
    -        // finish up in a continuation
    -        setTimeout(doWork, 250);
    -      } else if (opt_whenDone) {
    -        opt_whenDone();
    -      }
    -    }
    -
    -    function replaceWithPrettyPrintedHtml() {
    -      var newContent = prettyPrintingJob.prettyPrintedHtml;
    -      if (!newContent) { return; }
    -      var cs = prettyPrintingJob.sourceNode;
    -
    -      // push the prettified html back into the tag.
    -      if (!isRawContent(cs)) {
    -        // just replace the old html with the new
    -        cs.innerHTML = newContent;
    -      } else {
    -        // we need to change the tag to a <pre> since <xmp>s do not allow
    -        // embedded tags such as the span tags used to attach styles to
    -        // sections of source code.
    -        var pre = document.createElement('PRE');
    -        for (var i = 0; i < cs.attributes.length; ++i) {
    -          var a = cs.attributes[i];
    -          if (a.specified) {
    -            var aname = a.name.toLowerCase();
    -            if (aname === 'class') {
    -              pre.className = a.value;  // For IE 6
    -            } else {
    -              pre.setAttribute(a.name, a.value);
    -            }
    -          }
    -        }
    -        pre.innerHTML = newContent;
    -
    -        // remove the old
    -        cs.parentNode.replaceChild(pre, cs);
    -        cs = pre;
    -      }
    -    }
    -
    -    doWork();
    -  }
    -
    -  window['PR_normalizedHtml'] = normalizedHtml;
    -  window['prettyPrintOne'] = prettyPrintOne;
    -  window['prettyPrint'] = prettyPrint;
    -  window['PR'] = {
    -        'combinePrefixPatterns': combinePrefixPatterns,
    -        'createSimpleLexer': createSimpleLexer,
    -        'registerLangHandler': registerLangHandler,
    -        'sourceDecorator': sourceDecorator,
    -        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    -        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    -        'PR_COMMENT': PR_COMMENT,
    -        'PR_DECLARATION': PR_DECLARATION,
    -        'PR_KEYWORD': PR_KEYWORD,
    -        'PR_LITERAL': PR_LITERAL,
    -        'PR_NOCODE': PR_NOCODE,
    -        'PR_PLAIN': PR_PLAIN,
    -        'PR_PUNCTUATION': PR_PUNCTUATION,
    -        'PR_SOURCE': PR_SOURCE,
    -        'PR_STRING': PR_STRING,
    -        'PR_TAG': PR_TAG,
    -        'PR_TYPE': PR_TYPE
    -      };
    -})();
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/redbar.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/redbar.gif
    deleted file mode 100644
    index c2f71469ba995289439d86ea39b1b33edb03388c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+AD{pP&D~tn7aso&R25|6^nS*Vg{;>G{84!T)8;{;yfXu$BQ0
    fDgI<(<YM4w&|v@qkQodt90ol_LPjnP91PX~3&9+X
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.css b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.css
    deleted file mode 100644
    index dd936bca..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.css
    +++ /dev/null
    @@ -1,243 +0,0 @@
    -body, td {
    -  font-family:sans-serif;
    -  font-size:10pt;
    -}
    -
    -h1 {
    -  font-weight:bold;
    -  font-size:18pt;
    -}
    -
    -.breadcrumb {
    -  border:#d6d3ce 1px solid;
    -  padding:2px 4px 2px 4px;
    -}
    -
    -.breadcrumb .info {
    -  float:right;
    -}
    -
    -.breadcrumb .info a {
    -  margin-left:8px;
    -}
    -
    -.el_report {
    -  padding-left:18px;
    -  background-image:url(report.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_group {
    -  padding-left:18px;
    -  background-image:url(group.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_bundle {
    -  padding-left:18px;
    -  background-image:url(bundle.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_package {
    -  padding-left:18px;
    -  background-image:url(package.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_class {
    -  padding-left:18px;
    -  background-image:url(class.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_source {
    -  padding-left:18px;
    -  background-image:url(source.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_method {
    -  padding-left:18px;
    -  background-image:url(method.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_session {
    -  padding-left:18px;
    -  background-image:url(session.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -pre.source {
    -  border:#d6d3ce 1px solid;
    -  font-family:monospace;
    -}
    -
    -pre.source ol {
    -  margin-bottom: 0px;
    -  margin-top: 0px;
    -}
    -
    -pre.source li {
    -  border-left: 1px solid #D6D3CE;
    -  color: #A0A0A0;
    -  padding-left: 0px;
    -}
    -
    -pre.source span.fc {
    -  background-color:#ccffcc;
    -}
    -
    -pre.source span.nc {
    -  background-color:#ffaaaa;
    -}
    -
    -pre.source span.pc {
    -  background-color:#ffffcc;
    -}
    -
    -pre.source span.bfc {
    -  background-image: url(branchfc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bfc:hover {
    -  background-color:#80ff80;
    -}
    -
    -pre.source span.bnc {
    -  background-image: url(branchnc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bnc:hover {
    -  background-color:#ff8080;
    -}
    -
    -pre.source span.bpc {
    -  background-image: url(branchpc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bpc:hover {
    -  background-color:#ffff80;
    -}
    -
    -table.coverage {
    -  empty-cells:show;
    -  border-collapse:collapse;
    -}
    -
    -table.coverage thead {
    -  background-color:#e0e0e0;
    -}
    -
    -table.coverage thead td {
    -  white-space:nowrap;
    -  padding:2px 14px 0px 6px;
    -  border-bottom:#b0b0b0 1px solid;
    -}
    -
    -table.coverage thead td.bar {
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr1 {
    -  text-align:right;
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr2 {
    -  text-align:right;
    -  padding-left:2px;
    -}
    -
    -table.coverage thead td.sortable {
    -  cursor:pointer;
    -  background-image:url(sort.gif);
    -  background-position:right center;
    -  background-repeat:no-repeat;
    -}
    -
    -table.coverage thead td.up {
    -  background-image:url(up.gif);
    -}
    -
    -table.coverage thead td.down {
    -  background-image:url(down.gif);
    -}
    -
    -table.coverage tbody td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -  border-bottom:#d6d3ce 1px solid;
    -}
    -
    -table.coverage tbody tr:hover {
    -  background: #f0f0d0 !important;
    -}
    -
    -table.coverage tbody td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -table.coverage tfoot td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -}
    -
    -table.coverage tfoot td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -.footer {
    -  margin-top:20px;
    -  border-top:#d6d3ce 1px solid;
    -  padding-top:2px;
    -  font-size:8pt;
    -  color:#a0a0a0;
    -}
    -
    -.footer a {
    -  color:#a0a0a0;
    -}
    -
    -.right {
    -  float:right;
    -}
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/report.gif
    deleted file mode 100644
    index 8547be50bf3e97e725920927b5aa4cdb031f4823..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 363
    zcmZ?wbhEHb6krfwSZc{In}J~s1H&!`1_uX+xVSjMb&S>db~X8S)dhAn1$OlXwvB~0
    zO@%hC#Wq5_7&^+V`^qgRRa;E2HJ?*&DsqWoev|2fCetO&CQDmPR<;_iXfs~ZZnVC`
    za8s8-+pK*(^AAm4c5K#~(^ocST-lU)byMc8y)_R`^xu2&{oaco_g{R!|Ki8Pmp>lA
    z{_*VHkC*R%zWMa)!{^_hzyAL8?f2(zzrTL}{q@K1Z$Ey2|M}<VuRs5>0mYvzj9d)%
    z3_1)z0P+(9TgQR<1s*zF)+bahX*_u_??Pbv&V#KE^V2&`bhGjjR;*MxC8EFO_3_}<
    zH?w9WrJ7AX`tJM8r525X{~8+WorLsRL^?W{nR=L*odosT`KItOGtTI963}JgV_m??
    z%&>&9-=1G*^3>@wm-A|~FmK+nbvd`DhNhP0UUhXIS1vYAPL5-o?Ce}VXI&i`tO1G(
    BvdRDe
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/session.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/session.gif
    deleted file mode 100644
    index 0151bad8a001e5cc5cc7723a608185f746b7f8c1..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 213
    zcmZ?wbhEHb6krfwXc1xPS$gU4xw~t2pG#?5#^Be>V3WrXI-S9<hrzA(|Nr^_@5k?-
    zZ~y=IhyVNSXZ04}pKqV%t9oe5k~tY+Ar=Pzi2#Z}Sr{1@<Qa4rfB<AC18dL&^}dwM
    zX_r*ys<8N;e6mS?i^dP8jVmAd@U^}&$uv>xc~m$hYN?d{@xrG~CzZCfhpBIRC}Q>I
    kiQ?_Ai=3VZEOFW9fBwaksdwMK(Err)E%VcVRYeAC06w^MK>z>%
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.gif
    deleted file mode 100644
    index 6757c2c32b57d768f3c12c4ae99a28bc32c9cbd7..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 58
    zcmZ?wbhEHb<YC}qXkcX6uwldh|Nj+#vM_QnFf!;c00|xjP6h@h!JfpGjC*fB>i!bx
    N`t(%z_h<$NYXI&b5{m!;
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.js b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.js
    deleted file mode 100644
    index 9dcb0e8b..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/sort.js
    +++ /dev/null
    @@ -1,148 +0,0 @@
    -/*******************************************************************************
    - * Copyright (c) 2009, 2024 Mountainminds GmbH & Co. KG and Contributors
    - * This program and the accompanying materials are made available under
    - * the terms of the Eclipse Public License 2.0 which is available at
    - * http://www.eclipse.org/legal/epl-2.0
    - *
    - * SPDX-License-Identifier: EPL-2.0
    - *
    - * Contributors:
    - *    Marc R. Hoffmann - initial API and implementation
    - *
    - *******************************************************************************/
    -
    -(function () {
    -
    -  /**
    -   * Sets the initial sorting derived from the hash.
    -   *
    -   * @param linkelementids
    -   *          list of element ids to search for links to add sort inidcator
    -   *          hash links
    -   */
    -  function initialSort(linkelementids) {
    -    window.linkelementids = linkelementids;
    -    var hash = window.location.hash;
    -    if (hash) {
    -      var m = hash.match(/up-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, true);
    -        }
    -        return;
    -      }
    -      var m = hash.match(/dn-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, false);
    -        }
    -        return
    -      }
    -    }
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header dependening on the current sort state.
    -   */
    -  function toggleSort(header) {
    -    var sortup = header.className.indexOf('down ') == 0;
    -    sortColumn(header, sortup);
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header in the given direction.
    -   */
    -  function sortColumn(header, sortup) {
    -    var table = header.parentNode.parentNode.parentNode;
    -    var body = table.tBodies[0];
    -    var colidx = getNodePosition(header);
    -
    -    resetSortedStyle(table);
    -
    -    var rows = body.rows;
    -    var sortedrows = [];
    -    for (var i = 0; i < rows.length; i++) {
    -      r = rows[i];
    -      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    -    }
    -
    -    var hash;
    -
    -    if (sortup) {
    -      for (var i = sortedrows.length - 1; i >= 0; i--) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'up ' + header.className;
    -      hash = 'up-' + header.id;
    -    } else {
    -      for (var i = 0; i < sortedrows.length; i++) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'down ' + header.className;
    -      hash = 'dn-' + header.id;
    -    }
    -
    -    setHash(hash);
    -  }
    -
    -  /**
    -   * Adds the sort indicator as a hash to the document URL and all links.
    -   */
    -  function setHash(hash) {
    -    window.document.location.hash = hash;
    -    ids = window.linkelementids;
    -    for (var i = 0; i < ids.length; i++) {
    -        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    -    }
    -  }
    -
    -  /**
    -   * Extend all links within the given tag with the given hash.
    -   */
    -  function setHashOnAllLinks(tag, hash) {
    -    links = tag.getElementsByTagName("a");
    -    for (var i = 0; i < links.length; i++) {
    -        var a = links[i];
    -        var href = a.href;
    -        var hashpos = href.indexOf("#");
    -        if (hashpos != -1) {
    -            href = href.substring(0, hashpos);
    -        }
    -        a.href = href + "#" + hash;
    -    }
    -  }
    -
    -  /**
    -   * Calculates the position of a element within its parent.
    -   */
    -  function getNodePosition(element) {
    -    var pos = -1;
    -    while (element) {
    -      element = element.previousSibling;
    -      pos++;
    -    }
    -    return pos;
    -  }
    -
    -  /**
    -   * Remove the sorting indicator style from all headers.
    -   */
    -  function resetSortedStyle(table) {
    -    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    -      if (c.className) {
    -        if (c.className.indexOf('down ') == 0) {
    -          c.className = c.className.slice(5);
    -        }
    -        if (c.className.indexOf('up ') == 0) {
    -          c.className = c.className.slice(3);
    -        }
    -      }
    -    }
    -  }
    -
    -  window['initialSort'] = initialSort;
    -  window['toggleSort'] = toggleSort;
    -
    -})();
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/source.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/source.gif
    deleted file mode 100644
    index b226e41c5276581db33d71525298ef572cc5d7ce..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 354
    zcmZ?wbhEHb6krfwxXQrr`Rnf=KmWY@^y|~t-#>r-`SJ62+pK*(^ACOa@_X{KW3$$r
    zUbOlAiXE5N?74dH#gDtszu$lH{mGl3&)@xg`{~!`Z@=#VMPB~6_u~7*S3h2T`1$R}
    z?`Q9Re)#(P)3@JWfBgRb^LKTLe^s%6bxA;7sb4jaQ5?`-<<ng5TVLWgvEHM%)~l!1
    zYi_IS^d`3r{dQ}59F})EE$?<()ZzT#ME{lvwpTV~T-lU)Yj4ffO_~4y|7XAeia%Kx
    z85k@XbU-p7KQXY?ADC0%p(B)eLgkXi62W-^(!DQ#v2a~Gz-z9%&!+3h!38t#X02Ds
    zad;WPFvUVOY)YY2k84HG1kp%gVW!3wVI5ap$%?8ZHc4GqO=+PiQzvV>Y72H(vk7Xs
    us!1$fvP8{QU92ZrK%7tARasP&f6JDw8m_8J3W|I7DyXXX9C3DJum%7=h^`F)
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/up.gif b/sentrius-llm-dataplane/target/site/jacoco/jacoco-resources/up.gif
    deleted file mode 100644
    index 58ed21660ec467736a4d2af17d91341f7cfb556c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ=;nroA^G
    Ub$^Kz-Nct)ygK&ScM%3_0PmU?SpWb4
    
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco-sessions.html b/sentrius-llm-dataplane/target/site/jacoco/jacoco-sessions.html
    deleted file mode 100644
    index 452548b5..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco-sessions.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">sentrius-llm-dataplane</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">pop-os-200c1a11</span></td><td>May 2, 2025, 1:59:01 PM</td><td>May 2, 2025, 1:59:02 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>50e0945fec76b333</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BaseProviderFactory</span></td><td><code>da939a0152866a4b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BiProperty</span></td><td><code>ed0281592f3976b4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Command</span></td><td><code>52d7b732759793ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Constants</span></td><td><code>8f58b0da27218c74</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.DumpErrorSingleton</span></td><td><code>ea25742803c9e73f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkedProcessEventType</span></td><td><code>4f32ae2d4e670365</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingReporterFactory</span></td><td><code>be06f83accc5a8aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingRunListener</span></td><td><code>c34d0a9f28f66585</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.MasterProcessCommand</span></td><td><code>fc8c116a509256d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Shutdown</span></td><td><code>47a37ed2a684ef1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.cli.CommandLineOption</span></td><td><code>5825f848ee2abcd7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.provider.AbstractProvider</span></td><td><code>0fea65ed91d7c12a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture</span></td><td><code>7ee3451cf95e2f70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>804935f758ebaea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>a81300d2d50decb6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ReporterConfiguration</span></td><td><code>bf4075c0385296c2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.RunMode</span></td><td><code>70edc0a9dea60143</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder</span></td><td><code>c6f3b2781f9ac881</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.BufferedStream</span></td><td><code>11f69a75bc1c7211</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento</span></td><td><code>e504a9e8cfc028af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Segment</span></td><td><code>773004ac6cd115ef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.StreamReadStatus</span></td><td><code>8d5ee1d510b5c935</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamEncoder</span></td><td><code>9547668418a858ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.SegmentType</span></td><td><code>77b0d78ed3ddd126</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.suite.RunResult</span></td><td><code>0eef4ae883b6fcaa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.DirectoryScannerParameters</span></td><td><code>529e83b831c47f72</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.IncludedExcludedPatterns</span></td><td><code>e12220ce508068df</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest</span></td><td><code>119a5faa0ae08a91</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.ClassMatcher</span></td><td><code>cb9dd1b6069a872b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.MethodMatcher</span></td><td><code>1d5196f3dfcebd52</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.Type</span></td><td><code>6f46eedd1917ca66</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.RunOrderParameters</span></td><td><code>f74f6b3eb9f1a132</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestArtifactInfo</span></td><td><code>6d162cddde2db959</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestListResolver</span></td><td><code>0f4645f0d7fd02c8</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestRequest</span></td><td><code>1cb2946d8f0dc9e4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.CloseableIterator</span></td><td><code>01846c357efacb7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultRunOrderCalculator</span></td><td><code>21a42ec0f6d63b8e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultScanResult</span></td><td><code>01695a339c66ab8d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.ReflectionUtils</span></td><td><code>7f9a430ae144c985</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.RunOrder</span></td><td><code>93376844e6d709d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun</span></td><td><code>db4e8195893ece6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun.ClassesIterator</span></td><td><code>543f26bfbdd04ce0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel</span></td><td><code>6826ce793980b64e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel</span></td><td><code>484afcc5593fbc9a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels</span></td><td><code>eb60281181a1dc33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.3</span></td><td><code>605144c3f67338aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.4</span></td><td><code>4834cf9402eabd28</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory</span></td><td><code>b2161e778265b95d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>e3fb668fa8792230</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DumpFileUtils</span></td><td><code>9cc0f89ffb46ba32</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>f8b4034fe9c934d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>d2b4a565d2c195cc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>c511fbfeb1f35c23</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>d05af49602124353</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>d14c58928ac6aa7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>8bc1181d0c5af474</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>72a8e2906ddc1c93</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>f6a6b02be2fb0964</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>c8ce6ed3be8ec9bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>68f2dae15ae26cc2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>fc217f2c1d87c099</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>2afb302f7c81f991</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>850ef2748b5ef5e6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>9577114e02a5bdef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.8</span></td><td><code>3c8febd047cd2b0c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>c83e3af27d5d3c47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedNodeArg</span></td><td><code>9dbb0ff22dfc1303</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>f83a9169197e13b1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessCheckerType</span></td><td><code>e554be35191ff5a7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>1e4e30276db2e62e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>ec2cd1e39ec4278e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>70176a3dd903d57a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>a843c08e9b5c79ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>355d20d53741b604</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory</span></td><td><code>67a1c051e3809086</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.1</span></td><td><code>cc936f6c85f9235a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.2</span></td><td><code>a1fa70e4af42c555</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.CommandChannelDecoder</span></td><td><code>6684e6bad0b7c71e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder</span></td><td><code>b69d9287bf010b1a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory</span></td><td><code>3b29862697f79d34</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory</span></td><td><code>8c14c673718fba9e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder</span></td><td><code>a23a4082e2bbd1ed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder.1</span></td><td><code>950700970edca54a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.EventEncoder</span></td><td><code>7c894cb22c8c16ca</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>958f7eb4311b3c2f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.LazyLauncher</span></td><td><code>a3841276826f155c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>0d7041faa0298e70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>db2b13639af3176e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassMethodIndexer</span></td><td><code>0e8f3008aec84fcb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.JavaVersion</span></td><td><code>a902b52c460c0348</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.StringUtils</span></td><td><code>4628d7808116e372</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemProperties</span></td><td><code>6b2fea785d2a2915</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemUtils</span></td><td><code>2518da556699ab1e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.function.Suppliers</span></td><td><code>6cb739fdbd96d7c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.math.NumberUtils</span></td><td><code>99f301ade68669b7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.StringUtils</span></td><td><code>abd8480c7152bf46</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils</span></td><td><code>011b23cd829ec86c</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>35e14124a607c6e0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>f54a3d73ed88c765</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>e2ae6d11698760d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>7e7fdcd1b43926e2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>3264494f5452162d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>bab380425dca8d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>518e1c643c30f164</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>92d1cbb782871d54</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>4b5e361d03d8e2d8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>95abf612d36312bc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>2747cc3e148c57d9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>01a66e5fdf0989e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>dbd6c4e35e0c9807</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>8192a76b48a09183</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>0493a46e2481b698</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>943e016148cf5f16</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>1c057f4243f10c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>340dbe384622c6a6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>373ab803cd4c3f71</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>5b959cc55c1f4f91</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>4134835721917de5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>cb8d6d2ffc57432f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>671448bb3682a8b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>53d31c5fa4778cc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>db07bccfb8a7df73</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>8a0a6571eef022fb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>8974ffb77e1cf465</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>50163587b45842fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>b39a5e63227384a5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>0766343b70481496</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.AutoCloseExtension</span></td><td><code>b0c206c116575b65</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>ae3c30ff8f7ce050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>2445286ad5728ba3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry.Entry</span></td><td><code>2c27256a5e9eeb22</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>134b5213d4cb80ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>797b378613d1c2c3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1977e7bd25ea66b8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>24002b8886de1936</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>62b73ea4d52632c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>de05466420699f92</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>d1970dd64ce22fa4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>2135634bf7e7ad88</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Success</span></td><td><code>88f304668c6ff14e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>7b57f78fc724ac54</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>835c9a026ac4df32</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>1da637c10cbda39c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>41a8b61339cf4862</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>484cfeb1dc3b6e93</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>23726102aeb1c0ca</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>6cb29bed5c13bb1d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.LruCache</span></td><td><code>fd8ff40dff05b112</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>99362b29a037afdc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>f1c34b50fa11302d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>ecf76570811abc50</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>372dfca6fa74c1ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>2ffa834710d16849</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>cecade1862d00032</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>ed62b01b8b763511</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>22e0c8566a0701f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>73f93afa543ca74a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>83d3937d6c2e4880</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>c8d2fba4bb555492</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>1b4753bc794e8388</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>02b8934961bdea6f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>22866b13273482bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a5f736d88185f693</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>8530bdf90ae8fa6b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>29479a0ae9db2840</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>9e54a6b249ea167a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>a5ee26b408b26ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>03b0ccd7b69c9fc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>455c5b5eb27d1f81</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a6b2f6753eef3ff0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8b2cda0d30b056d5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>17948dfe4c8d10c0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>4ba3237c7e6b18d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>fde8e703faa64574</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>4937cdb1a041a120</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>151f6fae99911199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>0ad8786b2f016b1a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>29666059b7fb2614</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1b0484c56b030686</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>458b4a4e46b6b868</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>3c16d4dff276f57a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>bd8402e1232e1a40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ba500d6ba9a79953</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>fa0dc5b65de1b0a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>705f9e9f579aeab0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>599b10c51fe35ea3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>a78f13d5e60b7d08</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>99cdeecddb4ca68b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>3f2ca9c1749a3d5a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>42796aad70055913</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>c8bf7d7bb2e19471</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>c4c004e32fc81aac</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>9048d6cd4a8e05d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>f68790b28827581e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c9f34e2fe83d5caa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>732ad1771b71d292</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>512f5438a4d56505</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>f0bfd18cc662d7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>a891c129fd2a01df</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>fb95e61bdaf5378c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>158ca2dfb82179f2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>c9df2add13bcb88f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>f767a377012b98ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>088911f06a0807a1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>d946f222ae757dc1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>694596eba9b0c85e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f2d1545415335fda</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>fef478667b042ad5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>f4faaefa1c9341ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>8321b18dbabfecb3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>04623991ddcc58da</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>e6360c7333fc842d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>95dfc056bdb1d2d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>b4cd1fb6724efdef</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>e040225d1f67e564</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>bcc6e4bee671ccad</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>aa7b08954aea78f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>61bd4de41739236f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>cdc9b7e4e1a576e0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>e4e806767310de9f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>67a547a561eee0f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>552f6c5833b8f8bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>6e65b7c784b87efc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>53cf37d963f8b58c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>b0288378227ce052</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>d91ab455a4c89f9b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>ce2dcedb783e6f56</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>452edacea5001e83</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>0736e6add61b3334</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>0d0d72b6e503c372</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>64729ce9bd729578</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>4b25c1714dc335ec</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>ba76828012d853d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>52b5b9d7814ff3b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.1</span></td><td><code>f83ebdedced2e399</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>886f3c723ddb9556</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>0d89b6f56eb4db06</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>fb76ce235ae5247b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>9833a129382c2ccc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>79c2095302f261bb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>7fe9373f303770d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>3840931f19c9d795</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>730ad6d2d5641536</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>08e28076c727f8e6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>771f386239bb3682</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>f6f65efcfd071c8e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>0f855b867dc3eac4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>aaf56096b3079d53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>0a9a375bd99ca30a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>408046ed24478736</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>bf2a372dcc5e43f7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>46b8848a888d4d59</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansApplicationListener</span></td><td><code>e038b74293c709e4</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansTestExecutionListener</span></td><td><code>89df4f04e39e1522</code></td></tr><tr><td><span class="el_class">org.springframework.util.Assert</span></td><td><code>2e1248d2d1526e84</code></td></tr><tr><td><span class="el_class">org.springframework.util.ClassUtils</span></td><td><code>ca4ab8b63048e08b</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap</span></td><td><code>722cd58749bce5da</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceManager</span></td><td><code>35eb6b9c1f2eedb5</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceType</span></td><td><code>5b823be241865c2f</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.Segment</span></td><td><code>5daee5d71f2a6fe2</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco.csv b/sentrius-llm-dataplane/target/site/jacoco/jacoco.csv
    deleted file mode 100644
    index e89dd7bf..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco.csv
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    -sentrius-llm-dataplane,io.sentrius.sso.core.services.openai.categorization,CommandTrie,179,0,18,0,36,0,16,0,7,0
    -sentrius-llm-dataplane,io.sentrius.sso.core.services.openai.categorization,CommandCategorizer,172,0,6,0,45,0,11,0,8,0
    -sentrius-llm-dataplane,io.sentrius.sso.core.services.openai.categorization,TrieNode,14,0,0,0,4,0,1,0,1,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,OpenAITwoPartyMonitor,131,0,6,0,28,0,8,0,5,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,Response,401,0,70,0,13,0,60,0,25,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,LLMCommandCategorizer,75,0,0,0,15,0,4,0,4,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,TerminalLogConfiguration,93,0,14,0,5,0,17,0,10,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,TerminalLogConfiguration.TerminalLogConfigurationBuilder,15,0,0,0,1,0,3,0,3,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,ChatConversation,118,0,6,0,21,0,7,0,4,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,ComplianceScorer,51,0,0,0,13,0,3,0,3,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,ComplianceConfiguration.ComplianceConfigurationBuilder,17,0,0,0,1,0,3,0,3,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,Response.Choice,196,0,38,0,5,0,32,0,13,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,GeneratorConfiguration.GeneratorConfigurationBuilder,47,0,4,0,1,0,7,0,5,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,DataGenerator,12,0,0,0,5,0,1,0,1,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,ComplianceConfiguration,107,0,16,0,5,0,19,0,11,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,TerminalLogConfiguration.TerminalLogConfigurationBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,Response.Usage,155,0,30,0,4,0,26,0,11,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,Response.ResponseBuilder,83,0,0,0,1,0,11,0,11,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,GenerativeAPI,140,0,4,0,29,0,8,0,6,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,ComplianceConfiguration.ComplianceConfigurationBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,GeneratorConfiguration,104,0,10,0,6,0,18,0,13,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai,TerminalComplianceScorer,36,0,2,0,8,0,3,0,2,0
    -sentrius-llm-dataplane,io.sentrius.sso.core.services.openai,OpenAITerminalService,161,0,14,0,33,0,13,0,6,0
    -sentrius-llm-dataplane,io.sentrius.sso.core.services.openai,OpenAITwoPartyMonitorService,153,0,12,0,33,0,12,0,6,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai.spring.ai,AgentCommunicationMemoryStore,107,0,8,0,26,0,9,0,5,0
    -sentrius-llm-dataplane,io.sentrius.sso.automation.auditing.rules,OpenAISessionRule,196,0,14,0,53,0,19,0,12,0
    -sentrius-llm-dataplane,io.sentrius.sso.automation.auditing.rules,TwoPartyAIMonitor,541,0,62,0,114,0,44,0,13,0
    -sentrius-llm-dataplane,io.sentrius.sso.genai.suggestions,TerminalSuggestors,131,0,6,0,28,0,8,0,5,0
    diff --git a/sentrius-llm-dataplane/target/site/jacoco/jacoco.xml b/sentrius-llm-dataplane/target/site/jacoco/jacoco.xml
    deleted file mode 100644
    index 4d833c62..00000000
    --- a/sentrius-llm-dataplane/target/site/jacoco/jacoco.xml
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="sentrius-llm-dataplane"><sessioninfo id="pop-os-200c1a11" start="1746208741612" dump="1746208742092"/><package name="io/sentrius/sso/core/services/openai/categorization"><class name="io/sentrius/sso/core/services/openai/categorization/CommandTrie" sourcefilename="CommandTrie.java"><method name="&lt;init&gt;" desc="()V" line="7"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="normalizePath" desc="(Ljava/lang/String;)Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="insert" desc="(Ljava/lang/String;Lio/sentrius/sso/core/model/categorization/CommandCategory;)V" line="15"><counter type="INSTRUCTION" missed="53" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="search" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/model/categorization/CommandCategory;" line="32"><counter type="INSTRUCTION" missed="41" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="searchByPrefix" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/model/categorization/CommandCategory;" line="44"><counter type="INSTRUCTION" missed="64" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$insert$0" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/services/openai/categorization/TrieNode;" line="19"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="179" covered="0"/><counter type="BRANCH" missed="18" covered="0"/><counter type="LINE" missed="36" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/core/services/openai/categorization/CommandCategorizer" sourcefilename="CommandCategorizer.java"><method name="fetchFromDatabase" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/model/categorization/CommandCategory;" line="44"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="categorizeCommand" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/dto/CommandCategoryDTO;" line="53"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getDBCommandCategory" desc="(Ljava/lang/String;)Ljava/util/List;" line="57"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isValidRegex" desc="(Ljava/lang/String;)Z" line="63"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="categorizeWithRulesOrML" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/dto/CommandCategoryDTO;" line="73"><counter type="INSTRUCTION" missed="103" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="addCommandCategory" desc="(Ljava/lang/String;Lio/sentrius/sso/core/dto/CommandCategoryDTO;)V" line="118"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/core/services/security/IntegrationSecurityTokenService;Lio/sentrius/sso/core/repository/CommandCategoryRepository;)V" line="28"><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="172" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="45" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/core/services/openai/categorization/TrieNode" sourcefilename="TrieNode.java"><method name="&lt;init&gt;" desc="()V" line="7"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="CommandCategorizer.java"><line nr="26" mi="4" ci="0" mb="0" cb="0"/><line nr="28" mi="9" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="37" mi="3" ci="0" mb="0" cb="0"/><line nr="38" mi="1" ci="0" mb="0" cb="0"/><line nr="39" mi="2" ci="0" mb="0" cb="0"/><line nr="44" mi="5" ci="0" mb="0" cb="0"/><line nr="45" mi="4" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><line nr="47" mi="2" ci="0" mb="0" cb="0"/><line nr="53" mi="8" ci="0" mb="0" cb="0"/><line nr="57" mi="5" ci="0" mb="0" cb="0"/><line nr="63" mi="3" ci="0" mb="0" cb="0"/><line nr="64" mi="2" ci="0" mb="0" cb="0"/><line nr="65" mi="1" ci="0" mb="0" cb="0"/><line nr="66" mi="2" ci="0" mb="0" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="2" ci="0" mb="2" cb="0"/><line nr="75" mi="5" ci="0" mb="0" cb="0"/><line nr="76" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="10" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="2" cb="0"/><line nr="82" mi="3" ci="0" mb="0" cb="0"/><line nr="83" mi="2" ci="0" mb="0" cb="0"/><line nr="85" mi="7" ci="0" mb="0" cb="0"/><line nr="87" mi="1" ci="0" mb="0" cb="0"/><line nr="88" mi="5" ci="0" mb="0" cb="0"/><line nr="89" mi="1" ci="0" mb="0" cb="0"/><line nr="91" mi="9" ci="0" mb="0" cb="0"/><line nr="93" mi="11" ci="0" mb="0" cb="0"/><line nr="96" mi="4" ci="0" mb="0" cb="0"/><line nr="98" mi="5" ci="0" mb="2" cb="0"/><line nr="99" mi="5" ci="0" mb="0" cb="0"/><line nr="101" mi="4" ci="0" mb="0" cb="0"/><line nr="102" mi="2" ci="0" mb="0" cb="0"/><line nr="103" mi="1" ci="0" mb="0" cb="0"/><line nr="104" mi="2" ci="0" mb="0" cb="0"/><line nr="105" mi="4" ci="0" mb="0" cb="0"/><line nr="108" mi="1" ci="0" mb="0" cb="0"/><line nr="109" mi="3" ci="0" mb="0" cb="0"/><line nr="112" mi="3" ci="0" mb="0" cb="0"/><line nr="114" mi="3" ci="0" mb="0" cb="0"/><line nr="118" mi="6" ci="0" mb="0" cb="0"/><line nr="119" mi="5" ci="0" mb="0" cb="0"/><line nr="120" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="172" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="45" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="CommandTrie.java"><line nr="6" mi="4" ci="0" mb="0" cb="0"/><line nr="7" mi="2" ci="0" mb="0" cb="0"/><line nr="8" mi="6" ci="0" mb="0" cb="0"/><line nr="11" mi="5" ci="0" mb="0" cb="0"/><line nr="15" mi="4" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="16" ci="0" mb="2" cb="0"/><line nr="18" mi="4" ci="0" mb="0" cb="0"/><line nr="19" mi="11" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="5" ci="0" mb="2" cb="0"/><line nr="23" mi="4" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="29" mi="1" ci="0" mb="0" cb="0"/><line nr="32" mi="4" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="34" mi="16" ci="0" mb="2" cb="0"/><line nr="35" mi="6" ci="0" mb="0" cb="0"/><line nr="36" mi="2" ci="0" mb="2" cb="0"/><line nr="37" mi="2" ci="0" mb="0" cb="0"/><line nr="40" mi="8" ci="0" mb="2" cb="0"/><line nr="44" mi="4" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="2" ci="0" mb="0" cb="0"/><line nr="48" mi="16" ci="0" mb="2" cb="0"/><line nr="49" mi="4" ci="0" mb="0" cb="0"/><line nr="50" mi="4" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="2" cb="0"/><line nr="54" mi="6" ci="0" mb="0" cb="0"/><line nr="55" mi="3" ci="0" mb="2" cb="0"/><line nr="56" mi="4" ci="0" mb="0" cb="0"/><line nr="60" mi="3" ci="0" mb="2" cb="0"/><line nr="61" mi="4" ci="0" mb="0" cb="0"/><line nr="62" mi="4" ci="0" mb="0" cb="0"/><line nr="68" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="179" covered="0"/><counter type="BRANCH" missed="18" covered="0"/><counter type="LINE" missed="36" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="TrieNode.java"><line nr="7" mi="2" ci="0" mb="0" cb="0"/><line nr="8" mi="5" ci="0" mb="0" cb="0"/><line nr="10" mi="3" ci="0" mb="0" cb="0"/><line nr="11" mi="4" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="365" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="85" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="3" covered="0"/></package><package name="io/sentrius/sso/genai"><class name="io/sentrius/sso/genai/OpenAITwoPartyMonitor" sourcefilename="OpenAITwoPartyMonitor.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;Lio/sentrius/sso/genai/TerminalLogConfiguration;)V" line="23"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateInput" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generate" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Lio/sentrius/sso/core/model/LLMResponse;" line="41"><counter type="INSTRUCTION" missed="92" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateUserInput" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Ljava/lang/String;" line="63"><counter type="INSTRUCTION" missed="24" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="28" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response" sourcefilename="Response.java"><method name="concatenateResponses" desc="()Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getId" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getObject" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreated" desc="()Ljava/lang/Long;" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChoices" desc="()Ljava/util/List;" line="36"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUsage" desc="()Lio/sentrius/sso/genai/Response$Usage;" line="39"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getServiceTier" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemFingerprint" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setId" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setObject" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreated" desc="(Ljava/lang/Long;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChoices" desc="(Ljava/util/List;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUsage" desc="(Lio/sentrius/sso/genai/Response$Usage;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setServiceTier" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemFingerprint" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="157" covered="0"/><counter type="BRANCH" missed="54" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="17"><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lio/sentrius/sso/genai/Response$Usage;Ljava/lang/String;Ljava/lang/String;)V" line="20"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$concatenateResponses$0" desc="(Lio/sentrius/sso/genai/Response$Choice;)Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="401" covered="0"/><counter type="BRANCH" missed="70" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="60" covered="0"/><counter type="METHOD" missed="25" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/LLMCommandCategorizer" sourcefilename="LLMCommandCategorizer.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;)V" line="30"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generate" desc="(Ljava/lang/String;)Lio/sentrius/sso/core/dto/CommandCategoryDTO;" line="40"><counter type="INSTRUCTION" missed="56" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateInput" desc="(Ljava/lang/String;)Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="75" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/TerminalLogConfiguration" sourcefilename="TerminalLogConfiguration.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder;)V" line="25"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder;" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalLogs" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalLogs" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="24"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="93" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="17" covered="0"/><counter type="METHOD" missed="10" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder" sourcefilename="TerminalLogConfiguration.java"><method name="&lt;init&gt;" desc="()V" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalLogs" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/ChatConversation" sourcefilename="ChatConversation.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;)V" line="21"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateInput" desc="(Lio/sentrius/sso/genai/model/Conversation;)Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generate" desc="(Lio/sentrius/sso/genai/model/Conversation;)Lio/sentrius/sso/genai/model/LLMResponse;" line="34"><counter type="INSTRUCTION" missed="105" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="17" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="16"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="21" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/ComplianceScorer" sourcefilename="ComplianceScorer.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;Lio/sentrius/sso/genai/ComplianceConfiguration;)V" line="29"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generate" desc="(Ljava/lang/String;)Ljava/lang/Double;" line="40"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="23"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="51" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilder" sourcefilename="ComplianceConfiguration.java"><method name="&lt;init&gt;" desc="()V" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="rules" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilder;" line="30"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Choice" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getIndex" desc="()Ljava/lang/Integer;" line="53"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessage" desc="()Lio/sentrius/sso/genai/Message;" line="56"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFinishReason" desc="()Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogprobs" desc="()Ljava/lang/Integer;" line="62"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setIndex" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessage" desc="(Lio/sentrius/sso/genai/Message;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFinishReason" desc="(Ljava/lang/String;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogprobs" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="49"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="49"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="32" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/GeneratorConfiguration$GeneratorConfigurationBuilder" sourcefilename="GeneratorConfiguration.java"><method name="&lt;init&gt;" desc="()V" line="8"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="concurrentGenerations" desc="(I)Lio/sentrius/sso/genai/GeneratorConfiguration$GeneratorConfigurationBuilder;" line="8"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(I)Lio/sentrius/sso/genai/GeneratorConfiguration$GeneratorConfigurationBuilder;" line="8"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/GeneratorConfiguration;" line="8"><counter type="INSTRUCTION" missed="22" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="8"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="47" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/DataGenerator" sourcefilename="DataGenerator.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;)V" line="14"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/ComplianceConfiguration" sourcefilename="ComplianceConfiguration.java"><method name="$default$rules" desc="()Ljava/util/List;" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilder;)V" line="30"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilder;" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRules" desc="()Ljava/util/List;" line="36"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRules" desc="(Ljava/util/List;)V" line="29"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="29"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="29"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="29"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="29"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;)V" line="31"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="32"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="107" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl" sourcefilename="TerminalLogConfiguration.java"><method name="self" desc="()Lio/sentrius/sso/genai/TerminalLogConfiguration$TerminalLogConfigurationBuilderImpl;" line="25"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/TerminalLogConfiguration;" line="25"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Usage" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptTokens" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCompletionTokens" desc="()Ljava/lang/Integer;" line="78"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTotalTokens" desc="()Ljava/lang/Integer;" line="81"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPromptTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCompletionTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTotalTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="70"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="70"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="155" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="26" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$ResponseBuilder" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="id" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="object" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="created" desc="(Ljava/lang/Long;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="choices" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="usage" desc="(Lio/sentrius/sso/genai/Response$Usage;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="serviceTier" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemFingerprint" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Response;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="83" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/GenerativeAPI" sourcefilename="GenerativeAPI.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lokhttp3/OkHttpClient;)V" line="35"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;)V" line="45"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="buildRequestBody" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;)Ljava/lang/String;" line="56"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="sample" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;)Ljava/lang/String;" line="71"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="sample" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;Ljava/lang/Class;)Ljava/lang/Object;" line="105"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="28"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="140" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl" sourcefilename="ComplianceConfiguration.java"><method name="self" desc="()Lio/sentrius/sso/genai/ComplianceConfiguration$ComplianceConfigurationBuilderImpl;" line="30"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/ComplianceConfiguration;" line="30"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/GeneratorConfiguration" sourcefilename="GeneratorConfiguration.java"><method name="$default$concurrentGenerations" desc="()I" line="8"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$maxTokens" desc="()I" line="8"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/GeneratorConfiguration$GeneratorConfigurationBuilder;" line="8"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getConcurrentGenerations" desc="()I" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()I" line="20"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setConcurrentGenerations" desc="(I)V" line="7"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(I)V" line="7"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="7"><counter type="INSTRUCTION" missed="35" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="7"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="7"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="7"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(II)V" line="9"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="10"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="104" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="18" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/TerminalComplianceScorer" sourcefilename="TerminalComplianceScorer.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;Lio/sentrius/sso/genai/TerminalLogConfiguration;)V" line="13"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateInput" desc="(Ljava/lang/String;)Ljava/lang/String;" line="23"><counter type="INSTRUCTION" missed="29" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ComplianceConfiguration.java"><line nr="29" mi="70" ci="0" mb="14" cb="0"/><line nr="30" mi="46" ci="0" mb="2" cb="0"/><line nr="31" mi="6" ci="0" mb="0" cb="0"/><line nr="32" mi="6" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="24" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="TerminalLogConfiguration.java"><line nr="24" mi="69" ci="0" mb="14" cb="0"/><line nr="25" mi="34" ci="0" mb="0" cb="0"/><line nr="26" mi="6" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="115" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="22" covered="0"/><counter type="METHOD" missed="15" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="TerminalComplianceScorer.java"><line nr="13" mi="6" ci="0" mb="0" cb="0"/><line nr="14" mi="1" ci="0" mb="0" cb="0"/><line nr="23" mi="2" ci="0" mb="0" cb="0"/><line nr="26" mi="4" ci="0" mb="0" cb="0"/><line nr="27" mi="11" ci="0" mb="2" cb="0"/><line nr="28" mi="6" ci="0" mb="0" cb="0"/><line nr="30" mi="4" ci="0" mb="0" cb="0"/><line nr="34" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="GeneratorConfiguration.java"><line nr="7" mi="72" ci="0" mb="10" cb="0"/><line nr="8" mi="55" ci="0" mb="4" cb="0"/><line nr="9" mi="9" ci="0" mb="0" cb="0"/><line nr="10" mi="9" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="151" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="25" covered="0"/><counter type="METHOD" missed="18" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="LLMCommandCategorizer.java"><line nr="26" mi="4" ci="0" mb="0" cb="0"/><line nr="30" mi="5" ci="0" mb="0" cb="0"/><line nr="31" mi="1" ci="0" mb="0" cb="0"/><line nr="40" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="6" ci="0" mb="0" cb="0"/><line nr="43" mi="4" ci="0" mb="0" cb="0"/><line nr="44" mi="7" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="4" ci="0" mb="0" cb="0"/><line nr="47" mi="6" ci="0" mb="0" cb="0"/><line nr="48" mi="13" ci="0" mb="0" cb="0"/><line nr="49" mi="5" ci="0" mb="0" cb="0"/><line nr="59" mi="8" ci="0" mb="0" cb="0"/><line nr="83" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="75" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="DataGenerator.java"><line nr="14" mi="2" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="ComplianceScorer.java"><line nr="23" mi="4" ci="0" mb="0" cb="0"/><line nr="29" mi="5" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="31" mi="1" ci="0" mb="0" cb="0"/><line nr="40" mi="8" ci="0" mb="0" cb="0"/><line nr="41" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="4" ci="0" mb="0" cb="0"/><line nr="43" mi="7" ci="0" mb="0" cb="0"/><line nr="45" mi="4" ci="0" mb="0" cb="0"/><line nr="46" mi="2" ci="0" mb="0" cb="0"/><line nr="47" mi="1" ci="0" mb="0" cb="0"/><line nr="48" mi="5" ci="0" mb="0" cb="0"/><line nr="49" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="51" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="GenerativeAPI.java"><line nr="28" mi="4" ci="0" mb="0" cb="0"/><line nr="35" mi="5" ci="0" mb="0" cb="0"/><line nr="37" mi="2" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><line nr="41" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="1" ci="0" mb="0" cb="0"/><line nr="45" mi="6" ci="0" mb="0" cb="0"/><line nr="46" mi="1" ci="0" mb="0" cb="0"/><line nr="56" mi="6" ci="0" mb="0" cb="0"/><line nr="57" mi="1" ci="0" mb="0" cb="0"/><line nr="58" mi="5" ci="0" mb="0" cb="0"/><line nr="71" mi="3" ci="0" mb="0" cb="0"/><line nr="72" mi="5" ci="0" mb="0" cb="0"/><line nr="73" mi="7" ci="0" mb="0" cb="0"/><line nr="75" mi="16" ci="0" mb="0" cb="0"/><line nr="77" mi="6" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="2" cb="0"/><line nr="79" mi="3" ci="0" mb="2" cb="0"/><line nr="80" mi="5" ci="0" mb="0" cb="0"/><line nr="81" mi="7" ci="0" mb="0" cb="0"/><line nr="83" mi="6" ci="0" mb="0" cb="0"/><line nr="84" mi="9" ci="0" mb="0" cb="0"/><line nr="87" mi="6" ci="0" mb="0" cb="0"/><line nr="89" mi="1" ci="0" mb="0" cb="0"/><line nr="90" mi="5" ci="0" mb="0" cb="0"/><line nr="91" mi="7" ci="0" mb="0" cb="0"/><line nr="105" mi="8" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="140" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="OpenAITwoPartyMonitor.java"><line nr="17" mi="4" ci="0" mb="0" cb="0"/><line nr="23" mi="5" ci="0" mb="0" cb="0"/><line nr="24" mi="1" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="2" ci="0" mb="0" cb="0"/><line nr="41" mi="13" ci="0" mb="0" cb="0"/><line nr="42" mi="5" ci="0" mb="0" cb="0"/><line nr="43" mi="4" ci="0" mb="0" cb="0"/><line nr="44" mi="7" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><line nr="47" mi="6" ci="0" mb="0" cb="0"/><line nr="48" mi="6" ci="0" mb="0" cb="0"/><line nr="49" mi="4" ci="0" mb="0" cb="0"/><line nr="50" mi="7" ci="0" mb="0" cb="0"/><line nr="51" mi="2" ci="0" mb="0" cb="0"/><line nr="52" mi="4" ci="0" mb="2" cb="0"/><line nr="53" mi="7" ci="0" mb="0" cb="0"/><line nr="55" mi="10" ci="0" mb="0" cb="0"/><line nr="56" mi="1" ci="0" mb="0" cb="0"/><line nr="57" mi="5" ci="0" mb="0" cb="0"/><line nr="58" mi="8" ci="0" mb="0" cb="0"/><line nr="63" mi="2" ci="0" mb="0" cb="0"/><line nr="64" mi="8" ci="0" mb="4" cb="0"/><line nr="65" mi="4" ci="0" mb="0" cb="0"/><line nr="67" mi="3" ci="0" mb="0" cb="0"/><line nr="71" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="3" ci="0" mb="0" cb="0"/><line nr="80" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="28" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="ChatConversation.java"><line nr="16" mi="4" ci="0" mb="0" cb="0"/><line nr="21" mi="5" ci="0" mb="0" cb="0"/><line nr="22" mi="1" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="34" mi="9" ci="0" mb="0" cb="0"/><line nr="35" mi="4" ci="0" mb="0" cb="0"/><line nr="36" mi="4" ci="0" mb="0" cb="0"/><line nr="37" mi="5" ci="0" mb="0" cb="0"/><line nr="38" mi="4" ci="0" mb="0" cb="0"/><line nr="39" mi="7" ci="0" mb="0" cb="0"/><line nr="41" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="6" ci="0" mb="0" cb="0"/><line nr="43" mi="11" ci="0" mb="2" cb="0"/><line nr="44" mi="11" ci="0" mb="2" cb="0"/><line nr="46" mi="4" ci="0" mb="0" cb="0"/><line nr="47" mi="3" ci="0" mb="2" cb="0"/><line nr="48" mi="12" ci="0" mb="0" cb="0"/><line nr="50" mi="9" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="5" ci="0" mb="0" cb="0"/><line nr="53" mi="7" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="21" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="Response.java"><line nr="17" mi="330" ci="0" mb="70" cb="0"/><line nr="18" mi="87" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="27" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="184" ci="0" mb="38" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="3" ci="0" mb="0" cb="0"/><line nr="70" mi="146" ci="0" mb="30" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="93" mi="13" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="835" covered="0"/><counter type="BRANCH" missed="138" covered="0"/><counter type="LINE" missed="22" covered="0"/><counter type="COMPLEXITY" missed="129" covered="0"/><counter type="METHOD" missed="60" covered="0"/><counter type="CLASS" missed="4" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1795" covered="0"/><counter type="BRANCH" missed="200" covered="0"/><counter type="LINE" missed="157" covered="0"/><counter type="COMPLEXITY" missed="234" covered="0"/><counter type="METHOD" missed="134" covered="0"/><counter type="CLASS" missed="19" covered="0"/></package><package name="io/sentrius/sso/core/services/openai"><class name="io/sentrius/sso/core/services/openai/OpenAITerminalService" sourcefilename="OpenAITerminalService.java"><method name="getName" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isEnabled" desc="()Z" line="36"><counter type="INSTRUCTION" missed="95" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="analyzeTerminalLogs" desc="(Ljava/lang/String;)Ljava/util/concurrent/CompletableFuture;" line="66"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/core/services/security/IntegrationSecurityTokenService;)V" line="21"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$analyzeTerminalLogs$0" desc="(Ljava/lang/String;)Ljava/lang/Boolean;" line="68"><counter type="INSTRUCTION" missed="43" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="20"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="161" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="33" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/core/services/openai/OpenAITwoPartyMonitorService" sourcefilename="OpenAITwoPartyMonitorService.java"><method name="getName" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isEnabled" desc="()Z" line="38"><counter type="INSTRUCTION" missed="95" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="analyzeTerminalLogs" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Ljava/util/concurrent/CompletableFuture;" line="68"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/core/services/security/IntegrationSecurityTokenService;)V" line="23"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="3" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$analyzeTerminalLogs$0" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Lio/sentrius/sso/core/model/LLMResponse;" line="70"><counter type="INSTRUCTION" missed="35" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="153" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="33" covered="0"/><counter type="COMPLEXITY" missed="12" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="OpenAITwoPartyMonitorService.java"><line nr="22" mi="4" ci="0" mb="0" cb="0"/><line nr="23" mi="6" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="2" ci="0" mb="0" cb="0"/><line nr="38" mi="4" ci="0" mb="2" cb="0"/><line nr="39" mi="4" ci="0" mb="0" cb="0"/><line nr="40" mi="4" ci="0" mb="2" cb="0"/><line nr="41" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="11" ci="0" mb="0" cb="0"/><line nr="43" mi="3" ci="0" mb="2" cb="0"/><line nr="44" mi="3" ci="0" mb="0" cb="0"/><line nr="45" mi="4" ci="0" mb="0" cb="0"/><line nr="47" mi="2" ci="0" mb="0" cb="0"/><line nr="49" mi="8" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="52" mi="5" ci="0" mb="0" cb="0"/><line nr="53" mi="1" ci="0" mb="0" cb="0"/><line nr="55" mi="9" ci="0" mb="0" cb="0"/><line nr="56" mi="8" ci="0" mb="0" cb="0"/><line nr="57" mi="6" ci="0" mb="0" cb="0"/><line nr="60" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="9" ci="0" mb="2" cb="0"/><line nr="63" mi="7" ci="0" mb="2" cb="0"/><line nr="68" mi="5" ci="0" mb="0" cb="0"/><line nr="70" mi="10" ci="0" mb="2" cb="0"/><line nr="72" mi="5" ci="0" mb="0" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="2" ci="0" mb="0" cb="0"/><line nr="76" mi="1" ci="0" mb="0" cb="0"/><line nr="77" mi="4" ci="0" mb="0" cb="0"/><line nr="78" mi="2" ci="0" mb="0" cb="0"/><line nr="79" mi="6" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="153" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="33" covered="0"/><counter type="COMPLEXITY" missed="12" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="OpenAITerminalService.java"><line nr="20" mi="4" ci="0" mb="0" cb="0"/><line nr="21" mi="6" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="31" mi="2" ci="0" mb="0" cb="0"/><line nr="36" mi="4" ci="0" mb="2" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="38" mi="4" ci="0" mb="2" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="11" ci="0" mb="0" cb="0"/><line nr="41" mi="3" ci="0" mb="2" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="43" mi="4" ci="0" mb="0" cb="0"/><line nr="45" mi="2" ci="0" mb="0" cb="0"/><line nr="47" mi="8" ci="0" mb="0" cb="0"/><line nr="49" mi="1" ci="0" mb="0" cb="0"/><line nr="50" mi="5" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="53" mi="9" ci="0" mb="0" cb="0"/><line nr="54" mi="8" ci="0" mb="0" cb="0"/><line nr="55" mi="6" ci="0" mb="0" cb="0"/><line nr="58" mi="3" ci="0" mb="0" cb="0"/><line nr="60" mi="9" ci="0" mb="2" cb="0"/><line nr="61" mi="7" ci="0" mb="2" cb="0"/><line nr="66" mi="5" ci="0" mb="0" cb="0"/><line nr="68" mi="10" ci="0" mb="2" cb="0"/><line nr="70" mi="6" ci="0" mb="0" cb="0"/><line nr="71" mi="5" ci="0" mb="0" cb="0"/><line nr="73" mi="9" ci="0" mb="2" cb="0"/><line nr="74" mi="1" ci="0" mb="0" cb="0"/><line nr="75" mi="4" ci="0" mb="0" cb="0"/><line nr="76" mi="2" ci="0" mb="0" cb="0"/><line nr="77" mi="6" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="161" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="33" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="314" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="66" covered="0"/><counter type="COMPLEXITY" missed="25" covered="0"/><counter type="METHOD" missed="12" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="io/sentrius/sso/genai/spring/ai"><class name="io/sentrius/sso/genai/spring/ai/AgentCommunicationMemoryStore" sourcefilename="AgentCommunicationMemoryStore.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/core/services/agents/AgentService;)V" line="21"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="add" desc="(Ljava/lang/String;Ljava/util/List;)V" line="29"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="get" desc="(Ljava/lang/String;I)Ljava/util/List;" line="39"><counter type="INSTRUCTION" missed="63" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="clear" desc="(Ljava/lang/String;)V" line="64"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="16"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="107" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="AgentCommunicationMemoryStore.java"><line nr="16" mi="4" ci="0" mb="0" cb="0"/><line nr="21" mi="5" ci="0" mb="0" cb="0"/><line nr="23" mi="2" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="25" mi="1" ci="0" mb="0" cb="0"/><line nr="29" mi="5" ci="0" mb="2" cb="0"/><line nr="30" mi="4" ci="0" mb="0" cb="0"/><line nr="31" mi="9" ci="0" mb="0" cb="0"/><line nr="34" mi="4" ci="0" mb="0" cb="0"/><line nr="36" mi="1" ci="0" mb="0" cb="0"/><line nr="39" mi="5" ci="0" mb="2" cb="0"/><line nr="40" mi="6" ci="0" mb="0" cb="0"/><line nr="43" mi="6" ci="0" mb="0" cb="0"/><line nr="44" mi="4" ci="0" mb="0" cb="0"/><line nr="46" mi="10" ci="0" mb="2" cb="0"/><line nr="47" mi="5" ci="0" mb="2" cb="0"/><line nr="49" mi="7" ci="0" mb="0" cb="0"/><line nr="51" mi="4" ci="0" mb="0" cb="0"/><line nr="52" mi="1" ci="0" mb="0" cb="0"/><line nr="53" mi="5" ci="0" mb="0" cb="0"/><line nr="54" mi="1" ci="0" mb="0" cb="0"/><line nr="56" mi="1" ci="0" mb="0" cb="0"/><line nr="59" mi="6" ci="0" mb="0" cb="0"/><line nr="60" mi="2" ci="0" mb="0" cb="0"/><line nr="64" mi="5" ci="0" mb="0" cb="0"/><line nr="65" mi="1" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="107" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="107" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="26" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><package name="io/sentrius/sso/automation/auditing/rules"><class name="io/sentrius/sso/automation/auditing/rules/OpenAISessionRule" sourcefilename="OpenAISessionRule.java"><method name="&lt;init&gt;" desc="()V" line="19"><counter type="INSTRUCTION" missed="17" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setConnectedSystem" desc="(Lio/sentrius/sso/core/model/ConnectedSystem;)V" line="39"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTrackingService" desc="(Lio/sentrius/sso/core/services/terminal/SessionTrackingService;)V" line="44"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="trigger" desc="(Ljava/lang/String;)Ljava/util/Optional;" line="49"><counter type="INSTRUCTION" missed="107" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="27" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="configure" desc="(Lio/sentrius/sso/core/config/SystemOptions;Ljava/lang/String;)Z" line="97"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="describeAction" desc="()Lio/sentrius/sso/automation/auditing/TriggerAction;" line="102"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="requiresSanitized" desc="()Z" line="107"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="onMessage" desc="(Lio/sentrius/sso/protobuf/Session$TerminalMessage;)Ljava/util/Optional;" line="113"><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isOnlySessionRule" desc="()Z" line="124"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="onFullCommand" desc="()Z" line="129"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$trigger$0" desc="(Ljava/lang/Boolean;)V" line="74"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="18"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="53" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="12" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/automation/auditing/rules/TwoPartyAIMonitor" sourcefilename="TwoPartyAIMonitor.java"><method name="&lt;init&gt;" desc="()V" line="21"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="10" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setConnectedSystem" desc="(Lio/sentrius/sso/core/model/ConnectedSystem;)V" line="45"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTrackingService" desc="(Lio/sentrius/sso/core/services/terminal/SessionTrackingService;)V" line="50"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="trigger" desc="(Ljava/lang/String;)Ljava/util/Optional;" line="55"><counter type="INSTRUCTION" missed="213" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="43" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="configure" desc="(Lio/sentrius/sso/core/config/SystemOptions;Ljava/lang/String;)Z" line="135"><counter type="INSTRUCTION" missed="24" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="describeAction" desc="()Lio/sentrius/sso/automation/auditing/TriggerAction;" line="145"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="requiresSanitized" desc="()Z" line="150"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="onMessage" desc="(Lio/sentrius/sso/protobuf/Session$TerminalMessage;)Ljava/util/Optional;" line="156"><counter type="INSTRUCTION" missed="149" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="30" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isOnlySessionRule" desc="()Z" line="222"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="onFullCommand" desc="()Z" line="227"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$onMessage$1" desc="(Lio/sentrius/sso/core/model/LLMResponse;)V" line="169"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$trigger$0" desc="(Lio/sentrius/sso/core/model/LLMResponse;)V" line="98"><counter type="INSTRUCTION" missed="46" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="8" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="20"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="541" covered="0"/><counter type="BRANCH" missed="62" covered="0"/><counter type="LINE" missed="114" covered="0"/><counter type="COMPLEXITY" missed="44" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="TwoPartyAIMonitor.java"><line nr="20" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="2" ci="0" mb="0" cb="0"/><line nr="25" mi="4" ci="0" mb="0" cb="0"/><line nr="29" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="31" mi="3" ci="0" mb="0" cb="0"/><line nr="32" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="5" ci="0" mb="0" cb="0"/><line nr="38" mi="6" ci="0" mb="0" cb="0"/><line nr="39" mi="6" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><line nr="41" mi="4" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="1" ci="0" mb="0" cb="0"/><line nr="50" mi="3" ci="0" mb="0" cb="0"/><line nr="51" mi="1" ci="0" mb="0" cb="0"/><line nr="55" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="2" cb="0"/><line nr="57" mi="3" ci="0" mb="0" cb="0"/><line nr="59" mi="15" ci="0" mb="2" cb="0"/><line nr="60" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="6" ci="0" mb="0" cb="0"/><line nr="63" mi="3" ci="0" mb="2" cb="0"/><line nr="64" mi="3" ci="0" mb="0" cb="0"/><line nr="65" mi="6" ci="0" mb="0" cb="0"/><line nr="66" mi="3" ci="0" mb="0" cb="0"/><line nr="69" mi="8" ci="0" mb="2" cb="0"/><line nr="70" mi="4" ci="0" mb="0" cb="0"/><line nr="72" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="8" ci="0" mb="2" cb="0"/><line nr="76" mi="3" ci="0" mb="0" cb="0"/><line nr="77" mi="15" ci="0" mb="2" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="7" ci="0" mb="2" cb="0"/><line nr="82" mi="3" ci="0" mb="0" cb="0"/><line nr="84" mi="15" ci="0" mb="2" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="86" mi="3" ci="0" mb="0" cb="0"/><line nr="89" mi="3" ci="0" mb="0" cb="0"/><line nr="93" mi="5" ci="0" mb="0" cb="0"/><line nr="94" mi="4" ci="0" mb="0" cb="0"/><line nr="96" mi="2" ci="0" mb="0" cb="0"/><line nr="97" mi="9" ci="0" mb="0" cb="0"/><line nr="98" mi="4" ci="0" mb="0" cb="0"/><line nr="99" mi="2" ci="0" mb="2" cb="0"/><line nr="100" mi="12" ci="0" mb="2" cb="0"/><line nr="101" mi="5" ci="0" mb="0" cb="0"/><line nr="102" mi="12" ci="0" mb="6" cb="0"/><line nr="103" mi="6" ci="0" mb="0" cb="0"/><line nr="106" mi="4" ci="0" mb="0" cb="0"/><line nr="109" mi="1" ci="0" mb="0" cb="0"/><line nr="112" mi="3" ci="0" mb="0" cb="0"/><line nr="113" mi="1" ci="0" mb="0" cb="0"/><line nr="114" mi="3" ci="0" mb="0" cb="0"/><line nr="115" mi="2" ci="0" mb="0" cb="0"/><line nr="116" mi="5" ci="0" mb="0" cb="0"/><line nr="117" mi="1" ci="0" mb="0" cb="0"/><line nr="118" mi="2" ci="0" mb="0" cb="0"/><line nr="119" mi="5" ci="0" mb="0" cb="0"/><line nr="120" mi="1" ci="0" mb="0" cb="0"/><line nr="122" mi="4" ci="0" mb="2" cb="0"/><line nr="123" mi="13" ci="0" mb="2" cb="0"/><line nr="124" mi="4" ci="0" mb="0" cb="0"/><line nr="125" mi="9" ci="0" mb="0" cb="0"/><line nr="126" mi="3" ci="0" mb="0" cb="0"/><line nr="129" mi="6" ci="0" mb="0" cb="0"/><line nr="130" mi="3" ci="0" mb="0" cb="0"/><line nr="135" mi="6" ci="0" mb="0" cb="0"/><line nr="136" mi="6" ci="0" mb="0" cb="0"/><line nr="137" mi="5" ci="0" mb="0" cb="0"/><line nr="138" mi="5" ci="0" mb="0" cb="0"/><line nr="139" mi="2" ci="0" mb="0" cb="0"/><line nr="145" mi="2" ci="0" mb="0" cb="0"/><line nr="150" mi="2" ci="0" mb="0" cb="0"/><line nr="156" mi="4" ci="0" mb="2" cb="0"/><line nr="157" mi="3" ci="0" mb="0" cb="0"/><line nr="158" mi="6" ci="0" mb="0" cb="0"/><line nr="159" mi="3" ci="0" mb="2" cb="0"/><line nr="160" mi="3" ci="0" mb="0" cb="0"/><line nr="161" mi="6" ci="0" mb="0" cb="0"/><line nr="162" mi="3" ci="0" mb="0" cb="0"/><line nr="165" mi="5" ci="0" mb="0" cb="0"/><line nr="167" mi="2" ci="0" mb="0" cb="0"/><line nr="168" mi="15" ci="0" mb="0" cb="0"/><line nr="169" mi="4" ci="0" mb="0" cb="0"/><line nr="170" mi="2" ci="0" mb="2" cb="0"/><line nr="171" mi="11" ci="0" mb="2" cb="0"/><line nr="172" mi="5" ci="0" mb="0" cb="0"/><line nr="173" mi="15" ci="0" mb="8" cb="0"/><line nr="174" mi="6" ci="0" mb="0" cb="0"/><line nr="177" mi="4" ci="0" mb="0" cb="0"/><line nr="180" mi="1" ci="0" mb="0" cb="0"/><line nr="183" mi="3" ci="0" mb="0" cb="0"/><line nr="185" mi="8" ci="0" mb="4" cb="0"/><line nr="186" mi="12" ci="0" mb="4" cb="0"/><line nr="187" mi="4" ci="0" mb="0" cb="0"/><line nr="188" mi="4" ci="0" mb="0" cb="0"/><line nr="189" mi="9" ci="0" mb="0" cb="0"/><line nr="190" mi="3" ci="0" mb="0" cb="0"/><line nr="193" mi="1" ci="0" mb="0" cb="0"/><line nr="194" mi="5" ci="0" mb="0" cb="0"/><line nr="195" mi="1" ci="0" mb="0" cb="0"/><line nr="196" mi="5" ci="0" mb="0" cb="0"/><line nr="197" mi="1" ci="0" mb="0" cb="0"/><line nr="199" mi="12" ci="0" mb="6" cb="0"/><line nr="200" mi="4" ci="0" mb="2" cb="0"/><line nr="201" mi="6" ci="0" mb="0" cb="0"/><line nr="202" mi="3" ci="0" mb="0" cb="0"/><line nr="205" mi="6" ci="0" mb="0" cb="0"/><line nr="206" mi="3" ci="0" mb="0" cb="0"/><line nr="215" mi="6" ci="0" mb="0" cb="0"/><line nr="216" mi="3" ci="0" mb="0" cb="0"/><line nr="222" mi="2" ci="0" mb="0" cb="0"/><line nr="227" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="541" covered="0"/><counter type="BRANCH" missed="62" covered="0"/><counter type="LINE" missed="114" covered="0"/><counter type="COMPLEXITY" missed="44" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><sourcefile name="OpenAISessionRule.java"><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="2" ci="0" mb="0" cb="0"/><line nr="23" mi="4" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="3" ci="0" mb="0" cb="0"/><line nr="32" mi="5" ci="0" mb="0" cb="0"/><line nr="35" mi="4" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="1" ci="0" mb="0" cb="0"/><line nr="44" mi="3" ci="0" mb="0" cb="0"/><line nr="45" mi="1" ci="0" mb="0" cb="0"/><line nr="49" mi="6" ci="0" mb="0" cb="0"/><line nr="50" mi="3" ci="0" mb="2" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="52" mi="6" ci="0" mb="0" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="8" ci="0" mb="2" cb="0"/><line nr="57" mi="4" ci="0" mb="0" cb="0"/><line nr="59" mi="5" ci="0" mb="0" cb="0"/><line nr="62" mi="8" ci="0" mb="2" cb="0"/><line nr="63" mi="3" ci="0" mb="0" cb="0"/><line nr="64" mi="6" ci="0" mb="0" cb="0"/><line nr="65" mi="3" ci="0" mb="0" cb="0"/><line nr="69" mi="5" ci="0" mb="0" cb="0"/><line nr="70" mi="4" ci="0" mb="0" cb="0"/><line nr="72" mi="3" ci="0" mb="0" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="4" ci="0" mb="0" cb="0"/><line nr="75" mi="3" ci="0" mb="2" cb="0"/><line nr="76" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="1" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="82" mi="1" ci="0" mb="0" cb="0"/><line nr="83" mi="3" ci="0" mb="0" cb="0"/><line nr="84" mi="2" ci="0" mb="0" cb="0"/><line nr="85" mi="5" ci="0" mb="0" cb="0"/><line nr="86" mi="1" ci="0" mb="0" cb="0"/><line nr="87" mi="2" ci="0" mb="0" cb="0"/><line nr="88" mi="5" ci="0" mb="0" cb="0"/><line nr="89" mi="1" ci="0" mb="0" cb="0"/><line nr="91" mi="6" ci="0" mb="0" cb="0"/><line nr="92" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="2" ci="0" mb="0" cb="0"/><line nr="102" mi="2" ci="0" mb="0" cb="0"/><line nr="107" mi="2" ci="0" mb="0" cb="0"/><line nr="113" mi="6" ci="0" mb="0" cb="0"/><line nr="114" mi="12" ci="0" mb="6" cb="0"/><line nr="115" mi="6" ci="0" mb="0" cb="0"/><line nr="116" mi="3" ci="0" mb="0" cb="0"/><line nr="118" mi="6" ci="0" mb="0" cb="0"/><line nr="119" mi="3" ci="0" mb="0" cb="0"/><line nr="124" mi="2" ci="0" mb="0" cb="0"/><line nr="129" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="53" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="12" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="737" covered="0"/><counter type="BRANCH" missed="76" covered="0"/><counter type="LINE" missed="167" covered="0"/><counter type="COMPLEXITY" missed="63" covered="0"/><counter type="METHOD" missed="25" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="io/sentrius/sso/genai/suggestions"><class name="io/sentrius/sso/genai/suggestions/TerminalSuggestors" sourcefilename="TerminalSuggestors.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/security/TokenProvider;Lio/sentrius/sso/genai/GenerativeAPI;Lio/sentrius/sso/genai/GeneratorConfiguration;Lio/sentrius/sso/genai/TerminalLogConfiguration;)V" line="28"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateInput" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Ljava/lang/String;" line="38"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generate" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Lio/sentrius/sso/core/model/LLMResponse;" line="46"><counter type="INSTRUCTION" missed="92" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="16" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="generateUserInput" desc="(Lio/sentrius/sso/genai/model/TwoPartyRequest;)Ljava/lang/String;" line="68"><counter type="INSTRUCTION" missed="24" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;clinit&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="28" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="TerminalSuggestors.java"><line nr="22" mi="4" ci="0" mb="0" cb="0"/><line nr="28" mi="5" ci="0" mb="0" cb="0"/><line nr="29" mi="1" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="46" mi="13" ci="0" mb="0" cb="0"/><line nr="47" mi="5" ci="0" mb="0" cb="0"/><line nr="48" mi="4" ci="0" mb="0" cb="0"/><line nr="49" mi="7" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="52" mi="6" ci="0" mb="0" cb="0"/><line nr="53" mi="6" ci="0" mb="0" cb="0"/><line nr="54" mi="4" ci="0" mb="0" cb="0"/><line nr="55" mi="7" ci="0" mb="0" cb="0"/><line nr="56" mi="2" ci="0" mb="0" cb="0"/><line nr="57" mi="4" ci="0" mb="2" cb="0"/><line nr="58" mi="7" ci="0" mb="0" cb="0"/><line nr="60" mi="10" ci="0" mb="0" cb="0"/><line nr="61" mi="1" ci="0" mb="0" cb="0"/><line nr="62" mi="5" ci="0" mb="0" cb="0"/><line nr="63" mi="8" ci="0" mb="0" cb="0"/><line nr="68" mi="2" ci="0" mb="0" cb="0"/><line nr="69" mi="8" ci="0" mb="4" cb="0"/><line nr="70" mi="4" ci="0" mb="0" cb="0"/><line nr="72" mi="3" ci="0" mb="0" cb="0"/><line nr="76" mi="2" ci="0" mb="0" cb="0"/><line nr="84" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="2" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="28" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="131" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="28" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></package><counter type="INSTRUCTION" missed="3449" covered="0"/><counter type="BRANCH" missed="340" covered="0"/><counter type="LINE" missed="529" covered="0"/><counter type="COMPLEXITY" missed="367" covered="0"/><counter type="METHOD" missed="197" covered="0"/><counter type="CLASS" missed="28" covered="0"/></report>
    \ No newline at end of file
    
    From f8e19ffa8d66c9cbd38a58720bc03899f775ad2a Mon Sep 17 00:00:00 2001
    From: Marc Parisi <phrocker@apache.org>
    Date: Sat, 10 May 2025 08:17:22 -0400
    Subject: [PATCH 2/5] Incremental commit
    
    ---
     .../analysis/agents/agents/ChatAgent.java     |  4 +-
     .../agent/analysis/api/AgentController.java   |  1 +
     .../agent/config/AgentConfigOptions.java      |  1 +
     .../src/main/resources/chat-helper.properties |  3 +-
     .../api/AgentBootstrapController.java         | 57 +++++++++++++++++--
     api/src/main/resources/application.properties |  3 +
     api/src/main/resources/default-policy.yaml    | 53 +++++++++++++++++
     api/src/test/resources/default-policy.yaml    | 13 +----
     .../sentrius/sso/config/KeycloakManager.java  |  4 ++
     .../sso/core/dto/AgentRegistrationDTO.java    |  2 +
     .../services/security/KeycloakService.java    | 33 ++++++++++-
     .../sso/core/services/ATPLPolicyService.java  |  1 +
     12 files changed, 152 insertions(+), 23 deletions(-)
     create mode 100644 api/src/main/resources/default-policy.yaml
    
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    index 78600182..a7c410e1 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    @@ -86,7 +86,7 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
                 var encryptedSecret = agentRegistrationDTO.getClientSecret();
                 var decryptedSecret = agentKeyService.
                     decryptWithPrivateKey(encryptedSecret, keyPair.getPrivate());
    -            keycloakService.createKeycloakClient(agentRegistrationDTO.getAgentName(),
    +            keycloakService.createKeycloakClient(agentConfigOptions.getName(),
                     decryptedSecret);
     
     
    @@ -131,7 +131,7 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
     
             while(running) {
     
    -                log.info("Registering v1.0.2 agent failed. Retrying in 10 seconds...");
    +                log.info("Agent Registered...");
                     try {
     
                         Thread.sleep(5_000);
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java
    index a07f2df9..9b5217dc 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java
    @@ -58,6 +58,7 @@ public ResponseEntity<AgentRegistrationDTO> describeAgent() {
                 .agentName(agentConfig.getName())
                 .agentPublicKey(agentKeyService.getKeyPair().getPublic().toString())
                 .agentPublicKeyAlgo(agentKeyService.getKeyPair().getPublic().getAlgorithm())
    +            .agentType(agentConfig.getType())
                 .build();
             return ResponseEntity.ok(dto);
         }
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    index 931a8801..24c2a74e 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    @@ -15,4 +15,5 @@ public class AgentConfigOptions {
     
     
         private String name;
    +    private String type;
     }
    diff --git a/ai-agent/src/main/resources/chat-helper.properties b/ai-agent/src/main/resources/chat-helper.properties
    index 878f7794..09affd3b 100644
    --- a/ai-agent/src/main/resources/chat-helper.properties
    +++ b/ai-agent/src/main/resources/chat-helper.properties
    @@ -78,4 +78,5 @@ otel.metrics.exporter=none
     otel.logs.exporter=none
     otel.resource.attributes.service.name=chat-helper
     otel.traces.sampler=always_on
    -otel.exporter.otlp.timeout=10s
    \ No newline at end of file
    +otel.exporter.otlp.timeout=10s
    +agent.type="chat-helper"
    \ No newline at end of file
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    index c54708dd..0b7a9d2d 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    @@ -1,11 +1,16 @@
     package io.sentrius.sso.controllers.api;
     
    +import java.io.IOException;
    +import java.io.InputStream;
     import java.security.GeneralSecurityException;
     import java.sql.SQLException;
     import io.sentrius.sso.config.ApiPaths;
     import io.sentrius.sso.core.config.SystemOptions;
     import io.sentrius.sso.core.controllers.BaseController;
     import io.sentrius.sso.core.dto.AgentRegistrationDTO;
    +import io.sentrius.sso.core.model.security.IdentityType;
    +import io.sentrius.sso.core.model.security.UserType;
    +import io.sentrius.sso.core.model.users.User;
     import io.sentrius.sso.core.services.ATPLPolicyService;
     import io.sentrius.sso.core.services.ErrorOutputService;
     import io.sentrius.sso.core.services.UserService;
    @@ -19,6 +24,7 @@
     import jakarta.servlet.http.HttpServletRequest;
     import jakarta.servlet.http.HttpServletResponse;
     import lombok.extern.slf4j.Slf4j;
    +import org.springframework.beans.factory.annotation.Value;
     import org.springframework.http.ResponseEntity;
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.PostMapping;
    @@ -39,6 +45,13 @@ public class AgentBootstrapController extends BaseController {
         final ZeroTrustRequestService ztrService;
         final AgentService agentService;
     
    +
    +    @Value("${sentrius.agent.register.bootstrap.allow:false}")
    +    private boolean allowRegistration;
    +
    +    @Value("${sentrius.agent.bootstrap.policy:default-policy.yaml}")
    +    private String defaultPolicyFile;
    +
         public AgentBootstrapController(
             UserService userService,
             SystemOptions systemOptions,
    @@ -62,22 +75,56 @@ public AgentBootstrapController(
     
         @PostMapping("/register")
         // no LimitAccess
    -    public ResponseEntity<AgentRegistrationDTO> bootsrap(
    -        @RequestBody AgentRegistrationDTO registrationDTO) throws GeneralSecurityException {
    +    public ResponseEntity<AgentRegistrationDTO> bootstrap(
    +        @RequestBody AgentRegistrationDTO registrationDTO) throws GeneralSecurityException, IOException {
             log.info("Registering agent {}", registrationDTO);
    -        var secret = keycloakService.registerAgentClient(registrationDTO.getAgentName());
    +        // need a pre-shared secret to register the agent or ztat approval
    +        var unencryptedRegistration = keycloakService.registerAgentClient(registrationDTO);
     
    -        var secretKey = CryptoService.encryptWithPublicKey(secret,
    +        var secretKey = CryptoService.encryptWithPublicKey(unencryptedRegistration.getClientSecret(),
                 CryptoService.decodePublicKey(registrationDTO.getAgentPublicKey(),
                 registrationDTO.getAgentPublicKeyAlgo()));
     
             var newDTO = AgentRegistrationDTO.builder()
    -            .agentName(registrationDTO.getAgentName())
    +            .agentName(unencryptedRegistration.getAgentName())
                 .agentPublicKey(registrationDTO.getAgentPublicKey())
                 .agentPublicKeyAlgo(registrationDTO.getAgentPublicKeyAlgo())
                 .clientSecret(secretKey)
    +            .clientId(unencryptedRegistration.getClientId())
                 .build();
     
    +        if (allowRegistration) {
    +            log.info("Registering {}", registrationDTO.getAgentName());
    +            User user = userService.getUserByUsername(newDTO.getAgentName());
    +            if (user == null) {
    +                var type = userService.getUserType(
    +                    UserType.createUnknownUser());
    +
    +                user = User.builder()
    +                    .username(newDTO.getAgentName())
    +                    .name(newDTO.getAgentName())
    +                    .emailAddress(newDTO.getAgentName())
    +                    .userId(unencryptedRegistration.getClientId())
    +                    .authorizationType(type.get())
    +                    .identityType(IdentityType.NON_PERSON_ENTITY)
    +                    .build();
    +                log.info("Creating new user: {}", user);
    +                userService.save(user);
    +            }
    +            try(InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream(defaultPolicyFile)) {
    +                if (terminalHelperStream == null) {
    +                    throw new RuntimeException(defaultPolicyFile + "not found on classpath");
    +
    +                }
    +                String defaultYaml = new String(terminalHelperStream.readAllBytes());
    +                log.info("Default policy file: {}", defaultPolicyFile);
    +                var policy = atplPolicyService.createPolicy(user, defaultYaml);
    +            }
    +
    +        }
    +        else {
    +            log.info("Not Registering {}", registrationDTO.getAgentName());
    +        }
             // bootstrap with a default policy
             return ResponseEntity.ok(newDTO);
         }
    diff --git a/api/src/main/resources/application.properties b/api/src/main/resources/application.properties
    index fe5e6c50..73d79d09 100644
    --- a/api/src/main/resources/application.properties
    +++ b/api/src/main/resources/application.properties
    @@ -88,3 +88,6 @@ otel.logs.exporter=none
     otel.resource.attributes.service.name=sentrius-api
     otel.traces.sampler=always_on
     otel.exporter.otlp.timeout=10s
    +
    +sentrius.agent.register.bootstrap.allow=true
    +sentrius.agent.bootstrap.policy=default-policy.yaml
    \ No newline at end of file
    diff --git a/api/src/main/resources/default-policy.yaml b/api/src/main/resources/default-policy.yaml
    new file mode 100644
    index 00000000..1923746e
    --- /dev/null
    +++ b/api/src/main/resources/default-policy.yaml
    @@ -0,0 +1,53 @@
    +---
    +version: "v0"
    +description: "Default Policy For Unregistered Agents ( if configured )"
    +match:
    +  agent_tags:
    +    - "env:prod"
    +    - "classification:observer"
    +behavior:
    +  minimum_positive_runs: 5
    +  max_incidents: 1
    +  incident_types:
    +    denylist:
    +      - "policy_violation"
    +actions:
    +  on_success: "allow"
    +  on_failure: "deny"
    +  on_marginal:
    +    action: "require_ztat"
    +    ztat_provider: "ztat-service.internal"
    +capabilities:
    +  primitives:
    +  composed:
    +ztat:
    +  provider: "ztat-service.internal"
    +  ttl: "5m"
    +  approved_issuers:
    +    - "http://localhost:8080/"
    +  key_binding: "RSA2048"
    +  approval_required: true
    +policy_id: "f3326ce2-f46f-405d-94b6-bda2b26db423"
    +identity:
    +  issuer: "https://keycloak.test.sentrius.cloud"
    +  subject_prefix: "agent-"
    +  mfa_required: true
    +  certificate_authority: "Sentrius-CA"
    +provenance:
    +  source: "https://test.sentrius.cloud"
    +  signature_required: true
    +  approved_committers:
    +    - "alice@example.com"
    +runtime:
    +  enclave_required: true
    +  attestation_type: "aws-nitro"
    +  verified_at_boot: true
    +  allow_drift: true
    +trust_score:
    +  minimum: 80
    +  marginalThreshold: 50
    +  weightings:
    +    identity: 0.5
    +    provenance: 0.2
    +    runtime: 0.3
    +    behavior: 0.2
    diff --git a/api/src/test/resources/default-policy.yaml b/api/src/test/resources/default-policy.yaml
    index d1393c3b..35685cbf 100644
    --- a/api/src/test/resources/default-policy.yaml
    +++ b/api/src/test/resources/default-policy.yaml
    @@ -1,6 +1,6 @@
     ---
     version: "v0"
    -description: "Default Policy For Chat Agents"
    +description: "Default Policy For Unregistered Agents ( if configured )"
     match:
       agent_tags:
         - "env:prod"
    @@ -19,18 +19,7 @@ actions:
         ztat_provider: "ztat-service.internal"
     capabilities:
       primitives:
    -    - id: "accessLLM"
    -      description: "access llm"
    -      endpoint:
    -        - "/api/v1/chat/completions"
    -      tags: null
       composed:
    -    - id: "observe"
    -      description: null
    -      endpoint: []
    -      tags: null
    -      includes:
    -        - "readLogs"
     ztat:
       provider: "ztat-service.internal"
       ttl: "5m"
    diff --git a/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java b/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java
    index 59b82728..adb4f99a 100644
    --- a/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java
    +++ b/core/src/main/java/io/sentrius/sso/config/KeycloakManager.java
    @@ -6,6 +6,7 @@
     import lombok.Builder;
     import lombok.Getter;
     import lombok.Setter;
    +import lombok.extern.slf4j.Slf4j;
     import org.keycloak.OAuth2Constants;
     import org.keycloak.admin.client.Keycloak;
     import org.keycloak.admin.client.KeycloakBuilder;
    @@ -13,6 +14,7 @@
     @Builder
     @Getter
     @Setter
    +@Slf4j
     public class KeycloakManager {
         private Keycloak keycloak;
     
    @@ -29,6 +31,8 @@ public void addPublicKey(String kid, PublicKey publicKey) {
     
     
         public Keycloak createKeycloakClient(String serverUrl, String realm, String clientId, String clientSecret) {
    +        log.info("Creating Keycloak client for server: {}, realm: {}, clientId: {} shhh {}", serverUrl, realm,
    +            clientId, clientSecret);
             return KeycloakBuilder.builder()
                 .serverUrl(serverUrl)
                 .realm(realm)
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    index fec983f3..6c564b58 100644
    --- a/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    @@ -17,4 +17,6 @@ public class AgentRegistrationDTO {
         private final String agentPublicKey;
         private final String agentPublicKeyAlgo;
         private final String clientSecret;
    +    private final String clientId;
    +    private final String agentType;
     }
    diff --git a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    index 1a5b0e6f..39ed2660 100644
    --- a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    +++ b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    @@ -2,10 +2,12 @@
     import io.jsonwebtoken.Jwts;
     import io.sentrius.sso.config.KeycloakConfig;
     import io.sentrius.sso.config.KeycloakManager;
    +import io.sentrius.sso.core.dto.AgentRegistrationDTO;
     import jakarta.ws.rs.core.Response;
     import lombok.extern.slf4j.Slf4j;
     import org.keycloak.admin.client.resource.ClientResource;
     import org.keycloak.admin.client.resource.ClientsResource;
    +import org.keycloak.admin.client.resource.RoleMappingResource;
     import org.keycloak.admin.client.resource.UsersResource;
     import org.keycloak.representations.idm.ClientRepresentation;
     import org.keycloak.representations.idm.CredentialRepresentation;
    @@ -102,12 +104,12 @@ public String extractUsername(String token) {
             return claims.get("preferred_username", String.class); // Extracts agent identity
         }
     
    -    public String registerAgentClient(String agentName) {
    +    public AgentRegistrationDTO registerAgentClient(AgentRegistrationDTO agent) {
             ClientsResource clients = keycloak.getKeycloak().realm(realm).clients();
     
             // Step 1: Build client representation
             ClientRepresentation client = new ClientRepresentation();
    -        client.setClientId(agentName);
    +        client.setClientId(agent.getAgentName());
             client.setEnabled(true);
             client.setProtocol("openid-connect");
             client.setServiceAccountsEnabled(true);
    @@ -129,9 +131,34 @@ public String registerAgentClient(String agentName) {
                 String clientId = response.getLocation().getPath().replaceAll(".*/([^/]+)$", "$1");
                 ClientResource createdClient = clients.get(clientId);
     
    +            String serviceAccountUserId = createdClient.getServiceAccountUser().getId();
    +
    +            // Step 5: Assign realm-management roles
    +            RoleMappingResource roleMapping = keycloak.getKeycloak().realm(realm)
    +                .users().get(serviceAccountUserId).roles();
    +
    +            var clientRoles = keycloak.getKeycloak().realm(realm)
    +                .clients()
    +                .findByClientId("realm-management")
    +                .stream()
    +                .findFirst()
    +                .map(cr -> keycloak.getKeycloak().realm(realm).clients().get(cr.getId()).roles().list())
    +                .orElseThrow(() -> new RuntimeException("realm-management client not found"));
    +
    +            var toAssign = clientRoles.stream()
    +                .filter(role -> List.of("view-clients", "query-clients").contains(role.getName()))
    +                .toList();
    +
    +            roleMapping.clientLevel(clientRoles.get(0).getContainerId()).add(toAssign);
    +
                 // Step 4: Get generated secret
                 CredentialRepresentation secret = createdClient.getSecret();
    -            return secret.getValue(); // Return this to the agent
    +            return AgentRegistrationDTO.builder().
    +                agentName(createdClient.getServiceAccountUser().getUsername())
    +                .agentPublicKey(agent.getAgentPublicKey())
    +                .clientSecret(secret.getValue())
    +                .clientId(clientId)
    +                .build();
             }
         }
     
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/ATPLPolicyService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/ATPLPolicyService.java
    index c3a550f6..d8d6a25d 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/ATPLPolicyService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/ATPLPolicyService.java
    @@ -76,6 +76,7 @@ public Optional<ATPLPolicy> getPolicy(User operatingUser) {
             List<AgentPolicyAssignment> assignments = agentPolicyAssignmentRepository.findByUserUsernameOrderByAssignedAtDesc(operatingUser.getUsername());
     
             if (assignments.isEmpty()) {
    +            log.info("No policy assignments found for user {}", operatingUser.getUsername());
                 return Optional.empty();
             }
     
    
    From 3150e3eb6288cce5e71c570baac9db99cef663bd Mon Sep 17 00:00:00 2001
    From: Marc Parisi <phrocker@apache.org>
    Date: Sat, 17 May 2025 17:59:53 -0400
    Subject: [PATCH 3/5] UPdate
    
    ---
     .../analysis/agents/agents/ChatAgent.java     |    3 +-
     ...gentController.java => BotController.java} |    2 +-
     .../analysis/api/websocket/ChatWSHandler.java |    1 -
     .../api/AgentBootstrapController.java         |   60 +-
     .../controllers/api/ChatApiController.java    |   24 +-
     api/src/main/resources/static/js/chat.js      |  164 ++
     .../resources/templates/fragments/chat.html   |   88 +
     .../templates/fragments/sidebar.html          |    1 +
     .../resources/templates/sso/dashboard.html    |   13 +
     .../main/resources/templates/sso/ssh/sso.html |   65 -
     .../io/sentrius/sso/core/dto/AgentDTO.java    |    1 +
     .../sso/core/dto/AgentRegistrationDTO.java    |    1 +
     .../services/agents/AgentClientService.java   |    6 +
     .../services/security/KeycloakService.java    |    1 +
     .../core/services/agents/AgentService.java    |   22 +
     sentrius-llm-core/target/jacoco.exec          |  Bin 0 -> 20649 bytes
     .../target/site/jacoco/index.html             |    1 +
     ...eRequest$BaseGenerativeRequestBuilder.html |    1 +
     .../BaseGenerativeRequest.html                |    1 +
     .../BaseGenerativeRequest.java.html           |   42 +
     .../io.sentrius.sso.genai.api/index.html      |    1 +
     .../index.source.html                         |    1 +
     ...Request$ChatApiEndpointRequestBuilder.html |    1 +
     ...est$ChatApiEndpointRequestBuilderImpl.html |    1 +
     .../ChatApiEndpointRequest.html               |    1 +
     .../ChatApiEndpointRequest.java.html          |   82 +
     ...ionRequest$ConversationRequestBuilder.html |    1 +
     ...equest$ConversationRequestBuilderImpl.html |    1 +
     .../ConversationRequest.html                  |    1 +
     .../ConversationRequest.java.html             |   91 +
     ...Request$RawConversationRequestBuilder.html |    1 +
     ...est$RawConversationRequestBuilderImpl.html |    1 +
     .../RawConversationRequest.html               |    1 +
     .../RawConversationRequest.java.html          |   78 +
     .../index.html                                |    1 +
     .../index.source.html                         |    1 +
     ...ointRequest$ApiEndPointRequestBuilder.html |    1 +
     .../ApiEndPointRequest.html                   |    1 +
     .../ApiEndPointRequest.java.html              |   44 +
     .../ComplianceRule$ComplianceRuleBuilder.html |    1 +
     .../ComplianceRule.html                       |    1 +
     .../ComplianceRule.java.html                  |   29 +
     .../Conversation$ConversationBuilder.html     |    1 +
     .../Conversation.html                         |    1 +
     .../Conversation.java.html                    |   25 +
     .../LLMRequest$LLMRequestBuilder.html         |    1 +
     .../LLMRequest$LLMRequestBuilderImpl.html     |    1 +
     .../LLMRequest.html                           |    1 +
     .../LLMRequest.java.html                      |  153 ++
     .../LLMResponse$LLMResponseBuilder.html       |    1 +
     .../LLMResponse.html                          |    1 +
     .../LLMResponse.java.html                     |   23 +
     ...woPartyRequest$TwoPartyRequestBuilder.html |    1 +
     .../TwoPartyRequest.html                      |    1 +
     .../TwoPartyRequest.java.html                 |   22 +
     .../io.sentrius.sso.genai.model/index.html    |    1 +
     .../index.source.html                         |    1 +
     .../Message$MessageBuilder.html               |    1 +
     .../jacoco/io.sentrius.sso.genai/Message.html |    1 +
     .../io.sentrius.sso.genai/Message.java.html   |   48 +
     .../Response$Choice.html                      |    1 +
     .../Response$ResponseBuilder.html             |    1 +
     .../io.sentrius.sso.genai/Response$Usage.html |    1 +
     .../io.sentrius.sso.genai/Response.html       |    1 +
     .../io.sentrius.sso.genai/Response.java.html  |   96 ++
     .../jacoco/io.sentrius.sso.genai/index.html   |    1 +
     .../io.sentrius.sso.genai/index.source.html   |    1 +
     .../site/jacoco/jacoco-resources/branchfc.gif |  Bin 0 -> 91 bytes
     .../site/jacoco/jacoco-resources/branchnc.gif |  Bin 0 -> 91 bytes
     .../site/jacoco/jacoco-resources/branchpc.gif |  Bin 0 -> 91 bytes
     .../site/jacoco/jacoco-resources/bundle.gif   |  Bin 0 -> 709 bytes
     .../site/jacoco/jacoco-resources/class.gif    |  Bin 0 -> 586 bytes
     .../site/jacoco/jacoco-resources/down.gif     |  Bin 0 -> 67 bytes
     .../site/jacoco/jacoco-resources/greenbar.gif |  Bin 0 -> 91 bytes
     .../site/jacoco/jacoco-resources/group.gif    |  Bin 0 -> 351 bytes
     .../site/jacoco/jacoco-resources/method.gif   |  Bin 0 -> 193 bytes
     .../site/jacoco/jacoco-resources/package.gif  |  Bin 0 -> 227 bytes
     .../site/jacoco/jacoco-resources/prettify.css |   13 +
     .../site/jacoco/jacoco-resources/prettify.js  | 1510 +++++++++++++++++
     .../site/jacoco/jacoco-resources/redbar.gif   |  Bin 0 -> 91 bytes
     .../site/jacoco/jacoco-resources/report.css   |  243 +++
     .../site/jacoco/jacoco-resources/report.gif   |  Bin 0 -> 363 bytes
     .../site/jacoco/jacoco-resources/session.gif  |  Bin 0 -> 213 bytes
     .../site/jacoco/jacoco-resources/sort.gif     |  Bin 0 -> 58 bytes
     .../site/jacoco/jacoco-resources/sort.js      |  148 ++
     .../site/jacoco/jacoco-resources/source.gif   |  Bin 0 -> 354 bytes
     .../site/jacoco/jacoco-resources/up.gif       |  Bin 0 -> 67 bytes
     .../target/site/jacoco/jacoco-sessions.html   |    1 +
     .../target/site/jacoco/jacoco.csv             |   31 +
     .../target/site/jacoco/jacoco.xml             |    1 +
     90 files changed, 3072 insertions(+), 99 deletions(-)
     rename ai-agent/src/main/java/io/sentrius/agent/analysis/api/{AgentController.java => BotController.java} (98%)
     create mode 100644 api/src/main/resources/static/js/chat.js
     create mode 100644 api/src/main/resources/templates/fragments/chat.html
     create mode 100644 sentrius-llm-core/target/jacoco.exec
     create mode 100644 sentrius-llm-core/target/site/jacoco/index.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.csv
     create mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.xml
    
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    index a7c410e1..76bc374c 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    @@ -135,7 +135,8 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
                     try {
     
                         Thread.sleep(5_000);
    -                } catch (InterruptedException ex) {
    +                    agentClientService.heartbeat(execution, execution.getUser().getUsername());
    +                } catch (InterruptedException | ZtatException ex) {
                         throw new RuntimeException(ex);
                     }
     
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    similarity index 98%
    rename from ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java
    rename to ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    index 9b5217dc..f1bad130 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/AgentController.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    @@ -17,7 +17,7 @@
     @Slf4j
     @RestController
     @RequestMapping("/api/v1/agent")
    -public class AgentController {
    +public class BotController {
     
         KeycloakService keycloakService;
         AgentKeyService agentKeyService;
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    index e67ce8ab..6ecb464d 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    @@ -6,7 +6,6 @@
     import java.security.GeneralSecurityException;
     import java.util.Base64;
     import java.util.Map;
    -import java.util.concurrent.ConcurrentHashMap;
     import java.util.stream.Collectors;
     import java.util.stream.Stream;
     import io.sentrius.agent.analysis.api.UserCommunicationService;
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    index 0b7a9d2d..20d858a5 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    @@ -14,6 +14,7 @@
     import io.sentrius.sso.core.services.ATPLPolicyService;
     import io.sentrius.sso.core.services.ErrorOutputService;
     import io.sentrius.sso.core.services.UserService;
    +import io.sentrius.sso.core.services.agents.AgentClientService;
     import io.sentrius.sso.core.services.agents.AgentService;
     import io.sentrius.sso.core.services.auditing.AuditService;
     import io.sentrius.sso.core.services.security.CryptoService;
    @@ -44,6 +45,7 @@ public class AgentBootstrapController extends BaseController {
         final ZeroTrustAccessTokenService ztatService;
         final ZeroTrustRequestService ztrService;
         final AgentService agentService;
    +    private final AgentClientService agentClientService;
     
     
         @Value("${sentrius.agent.register.bootstrap.allow:false}")
    @@ -59,7 +61,8 @@ public AgentBootstrapController(
             AuditService auditService,
             CryptoService cryptoService, SessionTrackingService sessionTrackingService, KeycloakService keycloakService,
             ATPLPolicyService atplPolicyService,
    -        ZeroTrustAccessTokenService ztatService, ZeroTrustRequestService ztrService, AgentService agentService
    +        ZeroTrustAccessTokenService ztatService, ZeroTrustRequestService ztrService, AgentService agentService,
    +        AgentClientService agentClientService
         ) {
             super(userService, systemOptions, errorOutputService);
             this.auditService = auditService;
    @@ -70,6 +73,7 @@ public AgentBootstrapController(
             this.ztatService = ztatService;
             this.ztrService = ztrService;
             this.agentService = agentService;
    +        this.agentClientService = agentClientService;
         }
     
     
    @@ -97,30 +101,34 @@ public ResponseEntity<AgentRegistrationDTO> bootstrap(
                 log.info("Registering {}", registrationDTO.getAgentName());
                 User user = userService.getUserByUsername(newDTO.getAgentName());
                 if (user == null) {
    -                var type = userService.getUserType(
    -                    UserType.createUnknownUser());
    -
    -                user = User.builder()
    -                    .username(newDTO.getAgentName())
    -                    .name(newDTO.getAgentName())
    -                    .emailAddress(newDTO.getAgentName())
    -                    .userId(unencryptedRegistration.getClientId())
    -                    .authorizationType(type.get())
    -                    .identityType(IdentityType.NON_PERSON_ENTITY)
    -                    .build();
    -                log.info("Creating new user: {}", user);
    -                userService.save(user);
    -            }
    -            try(InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream(defaultPolicyFile)) {
    -                if (terminalHelperStream == null) {
    -                    throw new RuntimeException(defaultPolicyFile + "not found on classpath");
    -
    +                    var type = userService.getUserType(
    +                        UserType.createUnknownUser());
    +
    +                    user = User.builder()
    +                        .username(newDTO.getAgentName())
    +                        .name(newDTO.getAgentName())
    +                        .emailAddress(newDTO.getAgentName())
    +                        .userId(unencryptedRegistration.getClientId())
    +                        .authorizationType(type.get())
    +                        .identityType(IdentityType.NON_PERSON_ENTITY)
    +                        .build();
    +                    log.info("Creating new user: {}", user);
    +                    userService.save(user);
    +
    +                try(InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream(defaultPolicyFile)) {
    +                    if (terminalHelperStream == null) {
    +                        throw new RuntimeException(defaultPolicyFile + "not found on classpath");
    +
    +                    }
    +                    String defaultYaml = new String(terminalHelperStream.readAllBytes());
    +                    log.info("Default policy file: {}", defaultPolicyFile);
    +                    var policy = atplPolicyService.createPolicy(user, defaultYaml);
                     }
    -                String defaultYaml = new String(terminalHelperStream.readAllBytes());
    -                log.info("Default policy file: {}", defaultPolicyFile);
    -                var policy = atplPolicyService.createPolicy(user, defaultYaml);
    +
                 }
     
    +            agentService.setCallBack(user, registrationDTO.getAgentCallbackUrl());
    +
             }
             else {
                 log.info("Not Registering {}", registrationDTO.getAgentName());
    @@ -129,14 +137,6 @@ public ResponseEntity<AgentRegistrationDTO> bootstrap(
             return ResponseEntity.ok(newDTO);
         }
     
    -    @GetMapping("/register")
    -    // no LimitAccess
    -    public ResponseEntity<?> ohhia(
    -
    -        HttpServletRequest request, HttpServletResponse response) throws SQLException, GeneralSecurityException {
    -
    -        return ResponseEntity.ok("ohhiai");
    -    }
     
     
     }
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    index 3c25d88a..b55bf7b7 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    @@ -2,13 +2,17 @@
     
     import java.security.GeneralSecurityException;
     import java.time.ZoneOffset;
    +import java.util.ArrayList;
     import java.util.List;
     import java.util.stream.Collectors;
     import io.sentrius.sso.core.config.SystemOptions;
     import io.sentrius.sso.core.controllers.BaseController;
    +import io.sentrius.sso.core.dto.AgentDTO;
     import io.sentrius.sso.core.services.UserService;
    +import io.sentrius.sso.core.services.agents.AgentService;
     import io.sentrius.sso.core.services.security.CryptoService;
     import io.sentrius.sso.core.utils.AccessUtil;
    +import io.sentrius.sso.genai.Response;
     import io.sentrius.sso.protobuf.Session.ChatMessage;
     import io.sentrius.sso.core.model.security.enums.SSHAccessEnum;
     import io.sentrius.sso.core.model.sessions.SessionLog;
    @@ -36,19 +40,22 @@ public class ChatApiController extends BaseController {
         final CryptoService cryptoService;
         final SessionTrackingService sessionTrackingService;
         final ChatLogRepository chatLogRepository;
    +    final AgentService agentService;
     
         public ChatApiController(
             UserService userService,
             SystemOptions systemOptions,
             ErrorOutputService errorOutputService,
             AuditService auditService,
    -        CryptoService cryptoService, SessionTrackingService sessionTrackingService, ChatLogRepository chatLogRepository
    +        CryptoService cryptoService, SessionTrackingService sessionTrackingService, ChatLogRepository chatLogRepository,
    +        AgentService agentService
         ) {
             super(userService, systemOptions, errorOutputService);
             this.auditService = auditService;
             this.cryptoService = cryptoService;
             this.sessionTrackingService = sessionTrackingService;
             this.chatLogRepository = chatLogRepository;
    +        this.agentService = agentService;
         }
     
         public SessionLog createSession(@RequestParam String username, @RequestParam String ipAddress) {
    @@ -92,6 +99,21 @@ public ResponseEntity<List<ChatMessage>> getChatHistory(
             return ResponseEntity.ok(messages);
         }
     
    +    @GetMapping("/agent/list")
    +    public ResponseEntity<List<AgentDTO>> listAvailableAgents(
    +        HttpServletRequest request,
    +        HttpServletResponse response)
    +        throws GeneralSecurityException {
    +
    +        List<AgentDTO> availableAgents = agentService.getAvailableAgents();
    +
    +
    +
    +        // get a list of registered agents.
    +
    +        return ResponseEntity.ok(availableAgents);
    +    }
    +
     
     
     
    diff --git a/api/src/main/resources/static/js/chat.js b/api/src/main/resources/static/js/chat.js
    new file mode 100644
    index 00000000..c23318fe
    --- /dev/null
    +++ b/api/src/main/resources/static/js/chat.js
    @@ -0,0 +1,164 @@
    +// =========================
    +// Section: Globals & Setup
    +// =========================
    +const chatSessions = new Map(); // key: agentId, value: ChatSession
    +
    +window.addEventListener("beforeunload", persistChatSessions);
    +
    +// Restore on page load
    +(function restoreSessions() {
    +    const saved = localStorage.getItem("openChats");
    +    if (!saved) return;
    +
    +    const chatData = JSON.parse(saved);
    +    for (const [agentId, data] of Object.entries(chatData)) {
    +        const session = new ChatSession(data.agentId, data.sessionId, data.agentHost, data.messages);
    +        chatSessions.set(agentId, session);
    +    }
    +})();
    +
    +// =========================
    +// Section: ChatSession Class
    +// =========================
    +class ChatSession {
    +    constructor(agentId, sessionId, agentHost, preloadMessages = []) {
    +        this.agentId = agentId;
    +        this.sessionId = sessionId;
    +        this.agentHost = agentHost;
    +        this.chatGroupId = `${agentId}-${sessionId}`;
    +        this.messages = preloadMessages || [];
    +        this.connection = null;
    +
    +        this.connect();
    +    }
    +
    +    connect() {
    +        const protocol = location.protocol === "https:" ? "https" : "http";
    +        const uri = `${protocol}://${this.agentHost}/api/v1/chat/attach/subscribe?sessionId=${encodeURIComponent(this.sessionId)}&chatGroupId=${this.chatGroupId}`;
    +        this.connection = new SockJS(uri);
    +        this.connection.onmessage = (e) => this.handleMessage(e);
    +        this.connection.onopen = () => this.heartbeat();
    +    }
    +
    +    handleMessage(e) {
    +        try {
    +            const binary = Uint8Array.from(atob(e.data), c => c.charCodeAt(0));
    +            const msg = proto.io.sentrius.protobuf.ChatMessage.deserializeBinary(binary);
    +            const sender = msg.getSender();
    +            const message = msg.getMessage();
    +            this.messages.push({ sender, message });
    +
    +            const activeAgentId = document.getElementById("chat-container").dataset.agentId;
    +            if (activeAgentId === this.agentId) {
    +                appendToChatWindow(sender, message);
    +            }
    +
    +            persistChatSessions();
    +        } catch (err) {
    +            console.error("Failed to handle chat message", err);
    +        }
    +    }
    +
    +    send(text) {
    +        const msg = new proto.io.sentrius.protobuf.ChatMessage();
    +        msg.setSender("user");
    +        msg.setMessage(text);
    +
    +        this.connection.send(btoa(String.fromCharCode(...msg.serializeBinary())));
    +        this.messages.push({ sender: "You", message: text });
    +
    +        const activeAgentId = document.getElementById("chat-container").dataset.agentId;
    +        if (activeAgentId === this.agentId) {
    +            appendToChatWindow("You", text);
    +        }
    +
    +        persistChatSessions();
    +    }
    +
    +    heartbeat() {
    +        if (!this.connection || this.connection.readyState !== 1) return;
    +
    +        const msg = new proto.io.sentrius.protobuf.ChatMessage();
    +        msg.setSender("system");
    +        msg.setMessage("heartbeat");
    +
    +        this.connection.send(btoa(String.fromCharCode(...msg.serializeBinary())));
    +        setTimeout(() => this.heartbeat(), 5000);
    +    }
    +
    +    toJSON() {
    +        return {
    +            agentId: this.agentId,
    +            sessionId: this.sessionId,
    +            agentHost: this.agentHost,
    +            messages: this.messages
    +        };
    +    }
    +}
    +
    +// =========================
    +// Section: UI Interaction
    +// =========================
    +
    +function switchToAgent(agentId, sessionId, agentHost) {
    +    let session = chatSessions.get(agentId);
    +    if (!session) {
    +        session = new ChatSession(agentId, sessionId, agentHost);
    +        chatSessions.set(agentId, session);
    +    }
    +
    +    const container = document.getElementById("chat-container");
    +    container.dataset.agentId = agentId;
    +    container.dataset.agentHost = agentHost;
    +    document.getElementById("chat-agent-name").textContent = agentId;
    +
    +    const messagesDiv = document.getElementById("chat-messages");
    +    messagesDiv.innerHTML = "";
    +    session.messages.forEach(msg => {
    +        appendToChatWindow(msg.sender, msg.message);
    +    });
    +
    +    container.style.display = "block";
    +}
    +
    +function sendMessage(event) {
    +    if (event.key !== "Enter") return;
    +
    +    const input = document.getElementById("chat-input");
    +    const messageText = input.value.trim();
    +    if (!messageText) return;
    +
    +    const container = document.getElementById("chat-container");
    +    const agentId = container.dataset.agentId;
    +    const session = chatSessions.get(agentId);
    +    if (session) {
    +        session.send(messageText);
    +    }
    +
    +    input.value = "";
    +}
    +
    +function appendToChatWindow(sender, message) {
    +    const chatBox = document.getElementById("chat-messages");
    +    const div = document.createElement("div");
    +    div.classList.add("chat-message");
    +    div.innerHTML = `<strong>${sender}:</strong> ${message}`;
    +    chatBox.appendChild(div);
    +    chatBox.scrollTop = chatBox.scrollHeight;
    +}
    +
    +function toggleChat() {
    +    const container = document.getElementById("chat-container");
    +    container.classList.toggle("hidden");
    +}
    +
    +// =========================
    +// Section: Persistence
    +// =========================
    +function persistChatSessions() {
    +    const obj = {};
    +    chatSessions.forEach((session, agentId) => {
    +        obj[agentId] = session.toJSON();
    +    });
    +    localStorage.setItem("openChats", JSON.stringify(obj));
    +}
    diff --git a/api/src/main/resources/templates/fragments/chat.html b/api/src/main/resources/templates/fragments/chat.html
    new file mode 100644
    index 00000000..c6d0036e
    --- /dev/null
    +++ b/api/src/main/resources/templates/fragments/chat.html
    @@ -0,0 +1,88 @@
    +    <script th:src="@{/node/js/google-protobuf/google-protobuf.js}"></script>
    +    <script th:src="@{/node/js/sockjs-client/sockjs.js}"></script>
    +    <script th:src="@{/js/bundled_session_pb.js}"></script>
    +    <script th:inline="javascript">
    +
    +        let chatFocus = false;
    +        let chatConnection = null;
    +
    +        function toggleChat() {
    +            let chatContainer = document.getElementById("chat-container");
    +            if (chatContainer.style.display === "none" || chatContainer.style.display === "") {
    +                chatContainer.style.display = "flex";
    +                document.getElementById("chat-input").focus();
    +                termFocus = false;
    +                chatFocus = true;
    +                enableSessionChat();
    +            } else {
    +
    +            }
    +            //chatContainer.style.display = (chatContainer.style.display === "none" || chatContainer.style.display === "") ? "flex" : "none";
    +        }
    +    </script>
    +    <style>
    +        /* Chat Button */
    +        #chat-button {
    +            position: fixed;
    +            bottom: 20px;
    +            right: 20px;
    +            background: #007bff;
    +            color: white;
    +            padding: 10px 15px;
    +            border-radius: 20px;
    +            cursor: pointer;
    +            font-size: 14px;
    +            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
    +        }
    +
    +        /* Chat Container */
    +        #chat-container {
    +            position: fixed;
    +            bottom: 10px;
    +            right: 20px;
    +            width: 300px;
    +            height: 350px;
    +            background: #222;
    +            color: white;
    +            border-radius: 10px;
    +            display: none;
    +            flex-direction: column;
    +            box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3);
    +        }
    +
    +        /* Chat Header */
    +        #chat-header {
    +            background: #444;
    +            padding: 10px;
    +            cursor: pointer;
    +            text-align: center;
    +            font-weight: bold;
    +            position: relative;
    +        }
    +
    +        #close-chat {
    +            position: absolute;
    +            right: 10px;
    +            cursor: pointer;
    +        }
    +
    +        /* Chat Messages */
    +        #chat-messages {
    +            flex: 1;
    +            padding: 10px;
    +            overflow-y: auto;
    +            max-height: 250px;
    +            font-size: 14px;
    +        }
    +
    +        /* Chat Input */
    +        #chat-input {
    +            width: 100%;
    +            padding: 8px;
    +            border: none;
    +            background: #333;
    +            color: white;
    +            font-size: 14px;
    +            border-top: 1px solid #666;
    +        }
    +    </style>
    diff --git a/api/src/main/resources/templates/fragments/sidebar.html b/api/src/main/resources/templates/fragments/sidebar.html
    index 4f03cebf..f21b108b 100755
    --- a/api/src/main/resources/templates/fragments/sidebar.html
    +++ b/api/src/main/resources/templates/fragments/sidebar.html
    @@ -1,3 +1,4 @@
    +
     <div class="col-auto col-md-1 col-xl-1 px-sm-2 px-0 bg-dark">
         <div class="d-flex flex-column align-items-center align-items-sm-start px-3 pt-2 text-white min-vh-100">
             <a href="/" class="d-flex align-items-center pb-3 mb-md-0 me-md-auto text-white text-decoration-none">
    diff --git a/api/src/main/resources/templates/sso/dashboard.html b/api/src/main/resources/templates/sso/dashboard.html
    index 3dbeb65c..0ed1407d 100755
    --- a/api/src/main/resources/templates/sso/dashboard.html
    +++ b/api/src/main/resources/templates/sso/dashboard.html
    @@ -3,6 +3,7 @@
     <head>
         <meta th:replace="~{fragments/header}">
         <title>[[${systemOptions.systemLogoName}]] - Dashboard</title>
    +    <script type="module" th:src="@{/js/chat.js}"></script>
         <script>
             document.addEventListener("DOMContentLoaded", function() {
                 /*
    @@ -369,7 +370,16 @@
             <div class="col py-4">
                 <div class="main-content">
                     <div th:replace="~{fragments/alerts}"></div>
    +                <!-- Chat Container -->
     
    +                <div id="chat-container" class="hidden" data-agent-id="" data-agent-host="">
    +                    <div id="chat-header" onclick="toggleChat()">
    +                        Chat with <span id="chat-agent-name"></span>
    +                        <span id="close-chat" onclick="toggleChat()">✖</span>
    +                    </div>
    +                    <div id="chat-messages"></div>
    +                    <input type="text" id="chat-input" placeholder="Type a message..." onkeypress="sendMessage(event)">
    +                </div>
                     <div class="container-fluid">
                         <br><br>
                         <div class="grid-stack" id="grid_stack_stats"></div>
    @@ -436,6 +446,8 @@ <h5 class="card-title">AI Admin Operations</h5>
                                         <a href="/api/v1/users/list" class="btn btn-danger">Build Automation</a>
                                         <a href="#" class="btn btn-primary" data-bs-toggle="modal"
                                            data-bs-target="#userFormModal">Usage Patterns</a>
    +                                    <a href="#" class="btn btn-primary" data-bs-toggle="modal"
    +                                       data-bs-target="#userFormModal">Usage Patterns</a>
                                     </div>
                                 </div>
                             </div>
    @@ -511,6 +523,7 @@ <h3>Open Terminals</h3>
     <script type="module" th:src="@{/js/add_system.js}" defer></script>
     <script type="module" th:src="@{/js/add_user.js}" defer></script>
     <script type="module" th:src="@{/js/add_group.js}" defer></script>
    +
     <script>
         document.addEventListener('DOMContentLoaded', function () {
             let maxConnections = 10;
    diff --git a/api/src/main/resources/templates/sso/ssh/sso.html b/api/src/main/resources/templates/sso/ssh/sso.html
    index a13054d6..d83c7994 100755
    --- a/api/src/main/resources/templates/sso/ssh/sso.html
    +++ b/api/src/main/resources/templates/sso/ssh/sso.html
    @@ -3,72 +3,7 @@
     
     <head>
         <meta th:replace="~{fragments/header}">
    -    <style>
    -        /* Chat Button */
    -        #chat-button {
    -            position: fixed;
    -            bottom: 20px;
    -            right: 20px;
    -            background: #007bff;
    -            color: white;
    -            padding: 10px 15px;
    -            border-radius: 20px;
    -            cursor: pointer;
    -            font-size: 14px;
    -            box-shadow: 2px 2px 5px rgba(0, 0, 0, 0.2);
    -        }
    -
    -        /* Chat Container */
    -        #chat-container {
    -            position: fixed;
    -            bottom: 10px;
    -            right: 20px;
    -            width: 300px;
    -            height: 350px;
    -            background: #222;
    -            color: white;
    -            border-radius: 10px;
    -            display: none;
    -            flex-direction: column;
    -            box-shadow: 2px 2px 10px rgba(0, 0, 0, 0.3);
    -        }
    -
    -        /* Chat Header */
    -        #chat-header {
    -            background: #444;
    -            padding: 10px;
    -            cursor: pointer;
    -            text-align: center;
    -            font-weight: bold;
    -            position: relative;
    -        }
    -
    -        #close-chat {
    -            position: absolute;
    -            right: 10px;
    -            cursor: pointer;
    -        }
     
    -        /* Chat Messages */
    -        #chat-messages {
    -            flex: 1;
    -            padding: 10px;
    -            overflow-y: auto;
    -            max-height: 250px;
    -            font-size: 14px;
    -        }
    -
    -        /* Chat Input */
    -        #chat-input {
    -            width: 100%;
    -            padding: 8px;
    -            border: none;
    -            background: #333;
    -            color: white;
    -            font-size: 14px;
    -            border-top: 1px solid #666;
    -        }
    -    </style>
         <script th:src="@{/node/js/google-protobuf/google-protobuf.js}"></script>
         <script th:src="@{/node/js/sockjs-client/sockjs.js}"></script>
         <script th:src="@{/js/bundled_session_pb.js}"></script>
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/AgentDTO.java b/core/src/main/java/io/sentrius/sso/core/dto/AgentDTO.java
    index 0adf55fd..9207ecae 100644
    --- a/core/src/main/java/io/sentrius/sso/core/dto/AgentDTO.java
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/AgentDTO.java
    @@ -12,6 +12,7 @@ public class AgentDTO {
         private final String agentId;
         private final String policyId;
         private final String lastHeartbeat;
    +    private final String agentCallback;
         @Builder.Default
         private final boolean isRegistered = false;
     }
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    index 6c564b58..6877b0cb 100644
    --- a/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/AgentRegistrationDTO.java
    @@ -19,4 +19,5 @@ public class AgentRegistrationDTO {
         private final String clientSecret;
         private final String clientId;
         private final String agentType;
    +    private final String agentCallbackUrl;
     }
    diff --git a/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java b/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java
    index 4f366864..b9e6c03c 100644
    --- a/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java
    +++ b/core/src/main/java/io/sentrius/sso/core/services/agents/AgentClientService.java
    @@ -177,6 +177,7 @@ public AgentRegistrationDTO bootstrap(String name, String publicKey, String keyT
     
             AgentRegistrationDTO registration = AgentRegistrationDTO.builder()
                 .agentName(name)
    +            .agentCallbackUrl(getCallbackUrl())
                 .agentPublicKey(publicKey)
                 .agentPublicKeyAlgo(keyType)
                 .build();
    @@ -184,4 +185,9 @@ public AgentRegistrationDTO bootstrap(String name, String publicKey, String keyT
             var acommResponse = zeroTrustClientService.callPostOnApi(ask, registration);
             return JsonUtil.MAPPER.readValue(acommResponse, AgentRegistrationDTO.class);
         }
    +
    +    public String getCallbackUrl() {
    +        return callbackUrl;
    +    }
    +
     }
    diff --git a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    index 39ed2660..4a3b0819 100644
    --- a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    +++ b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    @@ -122,6 +122,7 @@ public AgentRegistrationDTO registerAgentClient(AgentRegistrationDTO agent) {
             client.setSecret(credential.getValue());
     
             // Step 2: Create the client
    +
             try( Response response = clients.create(client)) {
                 if (response.getStatus() != 201) {
                     throw new RuntimeException("Failed to create client: " + response.getStatus());
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    index a7e5073b..4132bf76 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    @@ -5,13 +5,17 @@
     import java.time.LocalDateTime;
     import java.time.ZoneId;
     import java.util.List;
    +import java.util.Map;
     import java.util.Optional;
     import java.util.UUID;
     import java.util.concurrent.CompletableFuture;
    +import java.util.concurrent.ConcurrentHashMap;
    +import java.util.concurrent.ConcurrentMap;
     import java.util.concurrent.TimeUnit;
     import com.github.benmanes.caffeine.cache.Cache;
     import com.github.benmanes.caffeine.cache.Caffeine;
     import com.github.benmanes.caffeine.cache.LoadingCache;
    +import com.google.common.collect.Maps;
     import io.sentrius.sso.core.dto.AgentCommunicationDTO;
     import io.sentrius.sso.core.dto.AgentDTO;
     import io.sentrius.sso.core.dto.AgentHeartbeatDTO;
    @@ -52,6 +56,8 @@ public class AgentService {
         private final ATPLPolicyService policyService;
         private final CryptoService cryptoService;
     
    +    private ConcurrentMap<String, String> callbackUrls = new ConcurrentHashMap<>();
    +
         private final RestTemplate restTemplate = new RestTemplate();
     
         private final Cache<String, AgentStatus> pingCache =
    @@ -92,7 +98,15 @@ public AgentHeartbeat getHeartbeat(String agentId) {
     
     
         public List<AgentDTO> getAllAgents(boolean encryptId) {
    +     return getAllAgents(encryptId, List.of());
    +    }
    +
    +    public List<AgentDTO> getAllAgents(boolean encryptId, List<String> filteredIds) {
             return repository.findAll().stream()
    +            .filter(heartbeat -> {
    +                var user = userService.getUserByUsername(heartbeat.getAgentId());
    +                return !filteredIds.contains(user.getUserId());
    +            })
                 .map(heartbeat -> {
                     var user = userService.getUserByUsername(heartbeat.getAgentId());
     
    @@ -107,6 +121,7 @@ public List<AgentDTO> getAllAgents(boolean encryptId) {
                         }
                         if (encryptId){
                             try {
    +
                                 // this is obfuscation of something known, let's use a real id of some kind
                                 dtoBuilder.agentId(cryptoService.encrypt(user.getUserId()));
                             } catch (GeneralSecurityException e) {
    @@ -245,4 +260,11 @@ public boolean isAgent(UserTypeDTO userDto) {
             return true;
         }
     
    +    public void setCallBack(User user, String agentCallbackUrl) {
    +        callbackUrls.put(user.getUserId(), agentCallbackUrl);
    +    }
    +
    +    public List<AgentDTO> getAvailableAgents() {
    +        return getAllAgents(false, callbackUrls.keySet().stream().toList());
    +    }
     }
    diff --git a/sentrius-llm-core/target/jacoco.exec b/sentrius-llm-core/target/jacoco.exec
    new file mode 100644
    index 0000000000000000000000000000000000000000..c2a2d925883f538fe662cdf1ef7255a12280eb05
    GIT binary patch
    literal 20649
    zcmcIs33yXQ*Pb*jDYe@a*~(Iu$POvAP|(u7rNu&PTNaTmB)4s7nuL3kLIr8ct^ySi
    z6-3aVRa8DeET~k9sDQE+KSV*HfS{rXg6vEFGk5DvdUIR;@Bi{Vnvyn?nKS3S=RNP7
    ziK@CfR1=CqY*t%uE7LnFs$cY=$Uy@UQoUZARPY=3Y|6&7zgzl(xlg(i^{~<fy2%cU
    z$*!}R_4a%#U96)l1ttrnOPxj;9Cnk{l0!{#P>kI#2v@%S>ipfR$HLJ-@;1FqZz!a6
    z#rhJ;qGKF1m2aXc-6X5kPSHBXX40j?FYL*MdW(fJr&<hFBSpWaia_kciK;^o3T1!B
    z%QWbX;GfnFZOpiKn$j2RlC8zXdW$iIVn@~XZTbG>5x8oO&)Lp>!V}OC@2g@QHk*~U
    z>x?GGU@f8OQe7@(rVMr~okKBJGrXc5rnegkwRxpBs!1&FOzV9%Z>|0YMaqn6fLT~A
    zj1J6X)+L+u3}e&V3v&%*#q?U0id(AN|AX<(`LAqS&~<cslq54EZ+l^ug(iyD(}qHm
    zL2uR#2LtB8M&#+4qGYSZPEE6Gy5nUPGq?9`6RSgmz3&OT!Q%c79Rb^&&F^+LZ7ngu
    z#>`Pw%>Qw>s&;pm+b&&1liKP&2<xkc{nBz!XRGW?&3cCgwx8A+tg!1TV8jBw-DD|9
    zWxYpqo=g*Cr@$IbTI1abj_QFquYZA_^gdHPxD8FQJCwsdQ8X+y-&EkBVRWlSt-&4p
    z8=k)P>xT=FPR4%1j^xAS$lvSo=u&N(-ed;%Yz`ZO?{_Tg)oy<Ea_-%VE}Ukiizs6f
    z>(AOK9~F-2eSiI3`<_dvr@|+*zL0CD!4xCFEttHT#{>rm#EBa#n+-aWKB<x3lxfw&
    z*094wB)}**F?#l>j!Ry+fM9My+)j4bOeErX*Qs-C8%-I(aqJYM%V4r0DlK-C-b_4*
    zc#j@poNl@f;ZvGjM|N&F!$^0zabvR1NEH*uqJ~lSLaWh7jXTXNYSuM+RuvjlH$~C)
    z_&K_T92ksX4C64{wYhe^-NE?Z$3KQ|AF+1->bGP^ad*9Xu9j%j+rS`ApHbngew%v_
    zFHlqHDKZ)P-6k%_gBG{r5E2H8VOaDcD3BCOHn7&^Qsdf$PU9j9E*Mda%;Maql|tp~
    zVM&>MnB>BUu+HX3?u6oJ-wORI;{5nEC{<<@B?L&9zyUEn7i(d=ohsb_Y@&9(=IdIi
    z!Gv8TD+I8hEMx`%ofe~s*gUmFZ+5Uz#aTZ@kFd|qr5XCFOIFm+`_#PcUSN12R<-GT
    zXx6IzW)$n);7p+&Jd*`YMrSaabh(8NyU{w;l5VvYvCiH!3}M~f*+W8W3NvI)ErdDv
    zj#)RtLPHt=<kn9zQ>oJol#Q&8@%6_oUt9Drb5UqDO7^}Q0cwpDW1vkoNCdjXNsOJ=
    z8|=iyDdNlBTqKZj*C7Yv9$z@>M-Iif)F~LcUI+>!Wzi7FfCwW^j0rv=vZ4%za^kYz
    zW8x!YY&EE_%>3NlNx;z@ssIp`E^Xm*Mc~8VoNhJgDC&p0%e<eT3}i~16+V?pGnpYO
    zTBuMgR?RW@pLzG&=_uO!E)l0;&6{ktG88dw2E1Jlvu{y^THym{di>mM*Uk#%sdEmR
    zBIH`m&jOnJ;KFMs&yG1~{^C(#xGx|~THfT8;$IF_qr|#Zd+dO)sY5wz%qyg=Q^^vN
    zt!6ISr@{7G=~5pb+;-b*#T7vZe&H749U|=D3=C!05vSl8QRu~Fyy?co*FVy{or~h?
    zCL_X~xP@ju3o_uWCSX$;#yoJaBJc=dUwec!^+&!4tG66HQMq#U7fQ@b7(<&&6%+%i
    zKOPT$x$f40AIj(6T#CBMOoaCZcZcq(K@K_=Z%nRU{MOjg577Yc&cNeiZYd=5V!%fm
    zMcYe<=`H#KithDLUkywLcU;@2`sVjfEmjJB(W!WJ%yC%Q&`8#s4Gu^n5PVZNs1khq
    zahoBzyGn=8UVyrIUk>NdoKrR115@~B=+4T>^xBtEXYwY-MnW#1))!M#A(ac>3@nWW
    znPt8+6BA~m`*WPW5RBdA$Qr!v{c+VrLeP}@`XBFY**_jd$;?ySe~&C6Y&x(Rykf$p
    zfZCUqaDdye`@w1nOEr?MJgP#@n9fm}0cx1#M*Iyo*P|<!27@i09zUR+`iFBraH&ro
    zr$lVi@qxm}tN428Jr|xDF>unL&j!pw2}&zuSzs<jmzWF`M_b4Yx$y+d(!}F7zH`1R
    zQa7203S<W3y;KO^Iwr$Us}4rkf`m5(t>v95186M}9Mkh`PU9JJ)7>gOH?rzZz;Abp
    zP;c)a>K+;_`w#ozwi-`-CS~tUX5c2J=n%cy1f-m{09EIU9!4A0q#aKA$QZI|_CI#i
    zU*_W*auID`l?s=wNDerga$s&lPQv1K4wX+Z4pJcN=1Km+PPI=0LO$5M?XAmWn|;=f
    z16_}*&n>0$I4O+r%z)9HZ=q6zZ7nAc{!xAWd2TuK9xLF5T~FH`Ha7;}I$m9k@aIi#
    zKY8%0jhh~Um_aNHB>|7#5I*Ud54ZmGlx3;Z%SHHgUlJ+Lh65I4>+NKhIPhRi)aEV}
    z#`xsY6{?(hlb=>9Ldj0^YfI8Ilu$hJ^XdNB&a%_JR9K68E|_<^^#EzacqFJgIz}8%
    zSXZ{5fECP6aP1~4oF0ATHJ?jW-Tsdb7#(oW2j?D%`O$Fu<At&tFM1#w!d$3v#(`Sc
    z)o&&Wz)!E~JY!~2tM9oQ)5CE*qgDhD9Ur#h3y`~0`<y(y4z-`%h?#J716+{J5Kt2=
    zd;ezGcZRTC3VB~b;@l7|RbamYDnKRp;+ZVp^Q)S7LS_<{p2>pjvJOZB5M)ZHci624
    zz6_;wgd2i0>auK<B@gOe*fF}4troH!lOWSWQJh5SEes2Qf`}qOKG@(|O<rE}s0k;P
    zsgvxxHBoqk&OAD5=j|#KuY@L&z4TyTBLN|eB-8f35`h9CQGEK5Gils6i?XC7*~448
    zwZncoirr#a^jCNl_%}E%RzW1qEc>Zu`=Bo8q(Lb^VlpU5U`l?k+{O-%3I$s+cb>eP
    z7rSAotgU#@<J_!X8Q7#3UK&%Fa`8md@3?|p9;!s}7Pv^ynITAZU4x%~V$YOed;9+>
    zjbag6+=E6)?`{hajl&EIxjzk|rnM?O<HgKvy%x6kMu~Xy_yQ!K2wkjS@#2|g2wry7
    zb;&uQIvlkpyAN|OaOi2HNpB%P>k_jww0sHu05@OwKWBD!EWL(uWE{mKXc_PaN=MKU
    z6f6T}lopz~<ab)WSfq^LKMtzt0u}zVSIzlVUv^!r1Wf!|1e|oUPxEhGt?+AcDt-Eq
    z2`!{};NdEDG=S3>(o7a8ru@tC=qGNc|J7sH366Ss-(6B-LKQ^x!b}i7ve@!4)aAkp
    ztg-aqQ_Du8JQ)i;(hh6I%@&rb?dPY)MtbG%RrIoHvNf#I2WXQVCNr$EEin5)d^@h{
    z^5J9Wm;YDh*;k{+YY%<C=(|M~qhv{}Ta<}lBH$UzPiA-Ay6Ds0e|{uIW-p;4mZM&x
    zw#`Sln=jrwEMRrFo77y+aNf6;_b;N`5PIOS2-AWx7vZUqz8{!tnqT3RE$^f7p(YgT
    zxoqSK(lTFT1;z*AU0?t5`Nb&*Ka^@LUY04Z{%HHE{qXFuD|{w@d8VJNu>{IuwibX0
    zU!co`XNu<e1rS|9W#wM)tsa*MB03KEVOo(+RTPef$~dw|sMm!Pw*%si@<pvcJ%XUP
    zxw^Y%;n$N++?QRj$GC1%buP@^40V8^C`gU)-+Q0VzKbJ!OM_gro3LUz?)rgWZFz*+
    zd5<Tb!V~So|Kzl`z0TKdHu93wwTqNOr^|kNivJ7lsd^vx?Cjw017%wXR++{`t;~Oa
    zkrEDziGklsBI|>3K-23La^wwFD8l=X-CO(Fh`d)(2k&O*m{dqD!qGvW4@~Ry^?Io>
    z8-O}Dr4177Aa1eMDm-rUg%c4ytbB^~BrmKj0c;Hpng)FUDgp|g4OF_GDIBJ^3A#Zk
    zoWMvPpg!EnDvJB$?|1t(#DVQVT8S7U<V+F%n1G!stQm0e!|&TfMaw2_ci3|$d0Hax
    zyjt_^j#=~D<#9SfLxrmlw4MyFvnvQ8U;OrGA=i4}Z>C0l$QH>%fCNM+BROPAqzi&(
    zx591x%94`*4h-guAwLnJB-L@b$wTK0C*FvgM_4y6UxJsT=e)bgBh|dHy;h4*^};rj
    zlc2W5HSmje*N&NO|Kas+*(p;3BZV^?R-xvI6D#mpN~}c`?We-eEN*Lzjr`k)GV7-7
    z;j0Fg59=~4j9pI-7RcF;TYeXP0$%0FVK}IsKDf9=ub)r%{^VID-aukc@G(M!6KT6C
    zAJ}+?CEu!6;Wcx@N@iJ`k5vj^cJU(0Wa^(U6<Au>j~mo@>Xs9Wzx%nS3wIJD?-*nj
    zd~V>g067i_d=P@4(d7+Xdz|t^qwDM=ewHFI0>uI~lG3|TtU9i5rFjj-uO(i7=&wVk
    zGS|N>Rhk?1Aq01Majv}%MMvN#TAdt`zx@67O8Nn>%A56;f+!s)^s&Y9CKU<}eHJ|g
    zwTnD<!w(e+<SeBBxDLl-5-WX`gi}7Wh}k#}%hAU!^I32G^A=?*58st7J<SpqsFWA9
    z0zWMU85Mks(VK@s+-hdvpcgA|Shk;P@?W7!Q9zaaU&L1@`)l59oR}jfSAmznw*HuQ
    zt<z@53wxAFq2R3bMqmk7_xy>^?zq?G@y2lb#wL7$a|W$$gM(~|ci-v0*rs$;>mFbd
    z?!}+KomaW0r(B7{2qj38jQAtIF?29<dBHwP>fQpzkjSf(NIbD!D;6qYApj`dhpY(r
    z{ZzMvhU7i5Lgcb|V5vW@7`^3W*NzMAO6h^jh4*7XG8XL^-(bA`P(&p?{J|9t#yF@I
    zo!33dd5}R4B}oBtZ2LOu*q&tvl`0tiqm$TUXgH06b0ng1Qgm+!#xfvj&n;W|)!2xv
    zB~n2^up<vebuQp`COjOFl~a=0-UYul`1W>n*6#<Rk16dtKOrIUf}B?9hWpLBFF^Q@
    ziQRDdyFW!KAv7^8%T(&greWQx)Yy0FT8p;4@=YZkAf{h2Ogt%5h^q|yP8zi2=Yyk9
    zN-gANtHko84w50)3enp$emCCe?~8}5nR#seoGa}(kMo{9cvA`Io1HX3QPtR*_Ses?
    zTYi(@P;nz9K%SAal0Pd<`?bZ(&Qy=A+IsAmY$Ji9_qEw@3t((a%7$~_-ZpNR2A^mW
    zr36O!5t|oS9P0l^(aMNEmp?`+Bo96+4HbDQpRAgw@wv^#*ff9Qaq01whcgf5&-B1~
    zQ`ugVu<Li!xL4OFCXZkBM<;1j<?+TkKpEz+b7#f;nYeI3p-r`bl&4nXP1F6C4ZSq&
    zhHPe1G%tV7uVqh7jRJ~m5^=%1)z6%FzA_IzLrf*_GrYf$-YFrxhUp<jX;2kNO9Fqa
    z!2ioC)P??M@V#Xh+nl@+vrsDHdE3th#h$dq5BZ)I9CC@eyyV259u4`bjc+3o=Pl?U
    z{%U+T=&Q<cXSci~E2Js;8l2^u9gL}jA`#%A4OF|bf1?O|=?Qx`^?_gG8=4bu%@jwm
    zEtRH$S+PZ_-D(NHLc&m++HLZ2`sFnWDrLhSlX<HKg1Q4M(+o^l8qxZ|iDk0wXYNju
    z<*)<4p`f1Em%^+#KNj<o05`49E=D-!$(`y$nekJkk?P^tUf?~0bfIy`uE8O5pPTo>
    z-b-JibQ#9#J~>YR$RKA~Y%hhSKo$(Uw`OxWu6ZNq`^<B?wWzDi$O4O#_G5({iNNpP
    zwf*w1q_0Mx-2eAz(Ds8Oa?$v+$3s6p&>ubReS8VM7oyEW`eB8j93bnQs0!_Xzx>vu
    zgb6*pTAGx^ICD26x2a-c%7QjNfGoCyA}j9nbys=WY}LF3d~^Mlp6Bj0HF6CEinsvD
    ziHMkFLU1%A{L5jn5HQP*Kp`qP_^rNGj#cX|6V5b!@d9UE*)p)sXN0wT)UHrp3Jo!%
    zXuS<i{MkRC=pZ;d=@XWItR}}Y2SpI`%Hn<^160MnN`-tnh@4OO0T-+rvQGb3?LX3<
    zvqv|hHoFiG;WT!f`ts1>X_Y$*Wp~8`Vd@s{Nfm;9JK*3eLw}oHd4E$wnVoS!M-7ob
    zI4(KS*+f_yRN)EEw9DEd^9RVvaiWu$#h#G5DP{8AVxrdwP{6b}85fDoI|e<ddi}&6
    zPC}CR6}LK047*%tdo@G%7y~uZ<w;xGyj;>B%eFD{)&l2}b`5F!`odZ3(EDFK8^3FX
    zQq0!pbb@;gw^~@9M>{}&2Y($!o7g1G=d{PwXViFQ_3hR7(mw5{w7&YEKmZ<OHjb7g
    z!;u#E!12A_+hbobc#M*&E$A+8>LuYgkIhiy{f8~zeZKg>E+uE+lML56n8cFwJ1W=t
    z^Se*DpvFDA;-R0juzFt=DV@iSLPw_tq7MEl{LzZ>hEB|!by76;0QEYZh9^88Ndh=G
    z(S5|K?N9{X@<o$9Ek->@No&)3qY7<+iEyULk`%GJie%MACtkkXr?R5_=M_qJ^O%g_
    zrYtGUZqa}K_R&cXrTM<zH2B_f_r?=31M-V|{H<nzIQP4@6V^^$xcAW$AW2)CE(aOm
    z!Ee8+@2*d^%Lb)aj9}9znGM@6>xmc|6+VA2zhYx)r%0|6mk&u9m(^3yIL-+{g1AqL
    zTBF-b(BIJRnb)tMIb4;)+0y&)vb6%YcD9|JqMLUN4aKLv|ML9!z&ABg?ZIPf>cEIy
    zyGK^&5Pwwd#9!fi54T<)+gT}2`M_WY;TnS6szm=axY^S=&HnwZ^8*EawT^&6iv$Hn
    z@oW(!dTb}wWAVd(rsYrf?cr85)Xyfw8#0Wf2|6EuaIkCjuN?s>TH%*_oeYZHGV-`=
    zA<sKTol!(&7JPx3%T59z;DN#ecdFe#a<WEsLskLj$K*mt98U-#Xi03hK4wo~)tZ$^
    zsl%PEoD(e;E3`}teL8DY{=tI-Z(D_VK-V%%&KG}K?R#FgKl}qJ)fElo;rsQFkl2k}
    zImq63sQqofusg2(`|-NJx@`B~W_cHNlHq*(fI^qzfEoT!_TG!Y2d)p-{Wf^)rp9!U
    z)Sm@SQKR%`kf-~Cij1IT4{uzur~88*sx#7(uTiV2-wxVg2nq<s{frq|c{we5OU>jF
    z9R^PI<`tcxTq)}2*zKdxta!YC_Y2dvoqcUeW9qSbYZYNI(O6<)tn_0Vg#FJsOZIiW
    zeNom+MNUz_3r{F*n*`&46*15KxN=PZ8YQ!7;t+DQBykd4naQ&7_b9xQl(5eJ2ybiA
    ze(EghlX0Bb;vKQvm7kRQfEcv9J>F2!?D)mUUhtPKsgxWy-Lq4kJ@v5C{w`cQa7WV8
    zeNBHsljXQ8fvx|r?<bK^Ex30f6^_7V6aKBi2bWsSbMJH>qeP*2;CxgOK-*W7g=;cL
    zzxvYGo2Dz3#!_G=*OlD77eBnA!bQ4E)5i7a-dt%EH=60z7i^-KRG%iUE3Ww4tt0TE
    z13P{>yRM{GmQ09F$NH`0bepHaaB1j0pO1T`1*+2<eRMHYU!orgL>H|8Ji$RH{O99r
    zuL1(5#{b;ie7Eh=L>JO3g#bakY&Zysa}7pLRVx&UmtR+XcyXR-N24uL42IPWcN9<J
    zukZX$P68kG(T#fpoLH-{@%XikA1se}O?rAPf}Oh^h4>UQiU0vXCteDmru=oa(>-ao
    zx(CA5r8+mQnAn7rnH;Ckl;LGl@o=AYRadwqB_HR!t4YbRHYO12$Ayo7%}lBIbX6n8
    zuw1ykMJ^XMMhxr6TN<y*TfZ&iQj6y~3ED%T=dpvVN<>?(l+$vxKJ**X8_&H`{8QVd
    zN=Jl3Fu7IceFNV2!5f>QW5<L3tmOEnynP5Uq`BK}5QWg#O@T0EbJ&yN0uwA*JKSM5
    zbFXm11ayyV={9>>rx~?5Ts(NJ%H0oAS#>mn9Jz5Ff1TU+N(w|cBrWyoi3dLWALRg+
    z_!6%}(??XUBi6`D5?U|yMd5_^s364$qKUSN_=4|yza6RW_OJh_=Vlo6R9fuTmM%>`
    zzIk)}{Rf)1i&2JB$a0C#4tFZxM9=_@xell{z3FPr_mv^6$&Y@@mj3wbQi<0i6dGHC
    z5s#su-7B~v(tq>*tZ$W$bA;_C-N;-lWk5UIG>Q(307`Rec=@sy;|>=qRh(iqL7bP#
    zvw{fGGZ!!p8ZViE?~fffHXnep8njj86i6-qXP|r?9rMrYK4HnZoH8%(&q6c^H(`gM
    zy|>EQCKH@<Vn;v68%tfN7nz#;+sVp=A-I5Q-xa}iC46&*V^>=mb1vZhy`Zj<mPtWz
    za2NBE9QmXR#>l-I?dN2{73Zv)y|eF^WprZ;tQ3GD_UaIS%UA4jU;^49{Pp#1(;`;v
    zFIPH0Bdb)J=@+W&ASWYaL$9n3V<(9wR$RH8gF@A~u*>1nLC(tIO8i0e5Aj${Fo>rF
    zLxe<v>AVCJn5f1V2Lv)v_viGM)?{AN49|hZ0*3D&3xG8HpyHn(m*3Vf*}F)BB+L@P
    zOxi(ufGJ-U&YyGf)1y1~wO6to?;V62@$x4>cfMP%X}k)zp89Lm6PNOLO2xo>fi0*Y
    zB!);+iMWjd$U*1*w{O=}Hd!&hXG2WZPU4U>LrJdY!1)geaB`EJqT8@VSi$4zaEoT+
    z4r#gKF)xMO%c}&UoN?MO&Dg=T`c+QgmX&w~ZHwzuXYA2K6D>ye@^^INRJej!zYGfN
    zd_;|JKe@!zdS<h&N|DO%L$=LiOfIAhP?b4VT;8pQOu#;_;+&5^IZ>W<eXDGff_thG
    zD2p2x759Xx-(IVU!?6{A9366~XCPv$WO-EJ=jld327(xLxcA{x)8ecnW$SbIsj=rE
    zaHofO3L%9p<24D`cDee!)9Y2qN;V>K$fG?#H0e+AKZx%y#FMjM9a*EKoJe5Mo$zp&
    z7(VzagxK^^w<`8&Kgg3k02V?_wu{t%Ki=IVruV_|$+u9UQl5~j1ci+fqh27HjMnR~
    zNcT_E2P&Kw-(`2z(ac(<Zz>SMt1h{5p+qsl_0xb5AAGh`hr`*<!ZS*TCS)ifG&3x4
    zl4zui?1>^g^LKz4xLdX0x^MnM>)*pUH}W7<f+0m6oqU}@uERhMW7)40V0zR{Z8PQA
    ztFm~hRG^CI=zih&{U6c;r{wHTYebDhK$Foy4g+>Gg8U5qSIAig=RW+SpT@nZQ+U0>
    zXPi_z`9quEv(2Qnfe8H#Ek&DKWU_Gt`my%Dcy91D`^)2RTzu5n900M|<6fk0M){p3
    zkNV!|a3aLvTLo*Ts(QZZlHCz8v^j1pdNDV1El2&~h$Obfzt3DNx$(U0`ILt(>OfnN
    z1ce;JeUnHagYdE;`Ey!r9Q~nEZX^CG%M1A1ADISJ3mnlox>EptZq`%h66cN8ak)hH
    z{0*SgTl=rrcR?bPG|dIkl^4`|>BgWT9163_2CECRN3Hit4tE}NK|5V4_ltfb8k{BQ
    z^&o=h4E$|}Sh!G&obj4q{8aaOUEa9$b~Hz16|tRgflT=B5d+*uZn#yV>2(!O>vqCf
    z-r_vnh;ZY(A?w0zt9ZQBU_gQR+K9igH{x&p3xA@*bg$#{Gj?4#$rUS)=t2{|sB|^u
    zr&WSK%?>JhZ^QE3#;9}((ZYre0G!nlq8f&0o=<IiXS~kVP^J_LDw+CO-2|WN+03xw
    zdP|E^&S5cM^jIO!^ZcIc-v_<pvQPQ5x<Mt|m0(Gdxsy!L0mELC2iawR+>_T{7#BN)
    z6P6X-*^R1X1Ip(DgETtK@O>svA-sOuO-J07_^Yy!%HvX<g;@?NfKqsQJ3z<MFPi51
    zT+@FhOB>{am1mx@?c;8Ke(zz+K>SMj_lJfq_WKTvlwl7Z;8;)FCgvrl2}1jNN~uL(
    zY%-9SIU&YMw^JkEFnl5J^Zu<PZfsC0rYEuItvbFRif5t()ItJn_}fLry8EM&by5s(
    zJl|$*H_Bu$Br{{0zi}!8m%qB9DE*x!v!$8E>ws>y7ZO6cnh%<4oVIh$OA8hadsZqx
    zh(0K8L>&cVxbKhA2@uNnnThlZK+{6)*f(eA%=^;9r~Z&E5Oe8IRKBFWDTCX`o+&H4
    zUD^s~#2niCPU5>Aq?Z81@jUjq&gr<JQ-sb;>8&C*w)0%^X&tVrBMEw7+k{oCN3FQD
    zMONJL_y{*ws@EE(Wt-l)Ch-4xGGW%a&uT6!30%DE@ClbMCiyBd-EbTFXaYOTnS)1%
    z2JOk5KlT$Y>OI(@xJ_=!jjLgR$ZU>{bXCl#&6Wy~9{y5yz6k~+rMMB^&3!vhpvoVY
    zPLG+_tmcco(rEQMLLPh*lc-J@2p19_zWC)mt=a{Sfv+HF_!<mv3a-g0&J{9k)?8<8
    z7rcBx&+hNU{Oc!9nes4%K$8hOg=mCt<KY*<#EwZ&`2`0r4Z!V(M|LgVcCn9A)~$<Y
    zf}C)Wz;_-+-=7fC7FL6u8U1gK{$ukRC0;;4SRpBB0b!x~H3GC|1B<o;mj==3Nx@$D
    z(~?=vupe@NkhW%sUaz#{{5O<Is#c!Xv~tbZg|lm4oA77JM^Q2i&}MePUB9|-(1WUt
    zz0FJ1UvLK^3v<`~9s}k4&8T;~5A4<JpcI4}n4TmS$?dg}c!VeIh+BKSOTPosQyK4$
    wWh$nu4uEG~G>PSH<&RUxJ~w{b3lZhAIu9Sd!Z9$I9S%kM{aOaM^xF9RFI5rn>i_@%
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/index.html b/sentrius-llm-core/target/site/jacoco/index.html
    new file mode 100644
    index 00000000..71c732e9
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>sentrius-llm-core</title><script type="text/javascript" src="jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><span class="el_report">sentrius-llm-core</span></div><h1>sentrius-llm-core</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3,742 of 3,742</td><td class="ctr2">0%</td><td class="bar">512 of 512</td><td class="ctr2">0%</td><td class="ctr1">559</td><td class="ctr2">559</td><td class="ctr1">124</td><td class="ctr2">124</td><td class="ctr1">303</td><td class="ctr2">303</td><td class="ctr1">30</td><td class="ctr2">30</td></tr></tfoot><tbody><tr><td id="a2"><a href="io.sentrius.sso.genai.model/index.html" class="el_package">io.sentrius.sso.genai.model</a></td><td class="bar" id="b0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="1,711" alt="1,711"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="212" alt="212"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">249</td><td class="ctr2" id="g0">249</td><td class="ctr1" id="h0">48</td><td class="ctr2" id="i0">48</td><td class="ctr1" id="j0">143</td><td class="ctr2" id="k0">143</td><td class="ctr1" id="l0">13</td><td class="ctr2" id="m0">13</td></tr><tr><td id="a0"><a href="io.sentrius.sso.genai/index.html" class="el_package">io.sentrius.sso.genai</a></td><td class="bar" id="b1"><img src="jacoco-resources/redbar.gif" width="73" height="10" title="1,042" alt="1,042"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="jacoco-resources/redbar.gif" width="95" height="10" title="168" alt="168"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">163</td><td class="ctr2" id="g1">163</td><td class="ctr1" id="h2">29</td><td class="ctr2" id="i2">29</td><td class="ctr1" id="j1">79</td><td class="ctr2" id="k1">79</td><td class="ctr1" id="l2">6</td><td class="ctr2" id="m2">6</td></tr><tr><td id="a3"><a href="io.sentrius.sso.genai.model.endpoints/index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a></td><td class="bar" id="b2"><img src="jacoco-resources/redbar.gif" width="57" height="10" title="816" alt="816"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="jacoco-resources/redbar.gif" width="62" height="10" title="110" alt="110"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">119</td><td class="ctr2" id="g2">119</td><td class="ctr1" id="h1">41</td><td class="ctr2" id="i1">41</td><td class="ctr1" id="j2">64</td><td class="ctr2" id="k2">64</td><td class="ctr1" id="l1">9</td><td class="ctr2" id="m1">9</td></tr><tr><td id="a1"><a href="io.sentrius.sso.genai.api/index.html" class="el_package">io.sentrius.sso.genai.api</a></td><td class="bar" id="b3"><img src="jacoco-resources/redbar.gif" width="12" height="10" title="173" alt="173"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="jacoco-resources/redbar.gif" width="12" height="10" title="22" alt="22"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">28</td><td class="ctr2" id="g3">28</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">17</td><td class="ctr2" id="k3">17</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
    new file mode 100644
    index 00000000..159d3ca2
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest.BaseGenerativeRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_class">BaseGenerativeRequest.BaseGenerativeRequestBuilder</span></div><h1>BaseGenerativeRequest.BaseGenerativeRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">$fillValuesFromInstanceIntoBuilder(BaseGenerativeRequest, BaseGenerativeRequest.BaseGenerativeRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">$fillValuesFrom(BaseGenerativeRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">user(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">model(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">BaseGenerativeRequest.BaseGenerativeRequestBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
    new file mode 100644
    index 00000000..add621da
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_class">BaseGenerativeRequest</span></div><h1>BaseGenerativeRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">135 of 135</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">22</td><td class="ctr2">22</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a4"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="55" alt="55"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">10</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="74" height="10" title="34" alt="34"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">BaseGenerativeRequest(BaseGenerativeRequest.BaseGenerativeRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="BaseGenerativeRequest.java.html#L27" class="el_method">BaseGenerativeRequest(String, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a10"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">setUser(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">setModel(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="BaseGenerativeRequest.java.html#L34" class="el_method">getUser()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="BaseGenerativeRequest.java.html#L40" class="el_method">getModel()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">canEqual(Object)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="BaseGenerativeRequest.java.html#L26" class="el_method">BaseGenerativeRequest()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
    new file mode 100644
    index 00000000..060beacb
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
    @@ -0,0 +1,42 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_source">BaseGenerativeRequest.java</span></div><h1>BaseGenerativeRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.api;
    +
    +import com.fasterxml.jackson.annotation.JsonInclude;
    +import com.fasterxml.jackson.annotation.JsonProperty;
    +import lombok.AllArgsConstructor;
    +import lombok.Data;
    +import lombok.NoArgsConstructor;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * &lt;p&gt;
    + * Inspired by liLittleCat's ChatGPT package.
    + *
    + * Codifies the Message request
    + * &lt;/p&gt;
    + *
    + * original @author &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    + *
    + * @since 2023/3/2
    + */
    +/**
    + * Base class for generative requests, defining the necessary methods required to generate a request.
    + */
    +<span class="nc bnc" id="L24" title="All 22 branches missed.">@Data</span>
    +<span class="nc" id="L25">@SuperBuilder(toBuilder = true)</span>
    +<span class="nc" id="L26">@NoArgsConstructor</span>
    +<span class="nc" id="L27">@AllArgsConstructor</span>
    +@JsonInclude(JsonInclude.Include.NON_NULL)
    +public abstract class BaseGenerativeRequest {
    +
    +    /**
    +     * Defined end user id : https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids
    +     */
    +<span class="nc" id="L34">    protected String user;</span>
    +
    +    /**
    +     * Model name, if applicable of the request&quot;
    +     */
    +    @JsonProperty(value = &quot;model&quot;)
    +<span class="nc" id="L40">    protected String model;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
    new file mode 100644
    index 00000000..fa930c11
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.api</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.api</span></div><h1>io.sentrius.sso.genai.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">173 of 173</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="BaseGenerativeRequest.html" class="el_class">BaseGenerativeRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="135" alt="135"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">22</td><td class="ctr2" id="g0">22</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="BaseGenerativeRequest$BaseGenerativeRequestBuilder.html" class="el_class">BaseGenerativeRequest.BaseGenerativeRequestBuilder</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="38" alt="38"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k1">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
    new file mode 100644
    index 00000000..0ad1c999
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.api</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.api</span></div><h1>io.sentrius.sso.genai.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">173 of 173</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="BaseGenerativeRequest.java.html" class="el_source">BaseGenerativeRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="173" alt="173"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">28</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">17</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
    new file mode 100644
    index 00000000..0b20e7a2
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</span></div><h1>ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">temperature(Float)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
    new file mode 100644
    index 00000000..e5786048
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</span></div><h1>ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
    new file mode 100644
    index 00000000..721af370
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest</span></div><h1>ChatApiEndpointRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">175 of 175</td><td class="ctr2">0%</td><td class="bar">28 of 28</td><td class="ctr2">0%</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">15</td><td class="ctr2">15</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a4"><a href="ChatApiEndpointRequest.java.html#L65" class="el_method">create()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">11</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="38" alt="38"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">7</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a8"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="20" alt="20"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">ChatApiEndpointRequest(ChatApiEndpointRequest.ChatApiEndpointRequestBuilder)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="15" alt="15"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">builder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">toString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">$default$temperature()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="ChatApiEndpointRequest.java.html#L37" class="el_method">getTemperature()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">canEqual(Object)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="ChatApiEndpointRequest.java.html#L41" class="el_method">getEndpoint()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
    new file mode 100644
    index 00000000..e3cb9853
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
    @@ -0,0 +1,82 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">ChatApiEndpointRequest.java</span></div><h1>ChatApiEndpointRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +
    +import io.sentrius.sso.genai.model.ApiEndPointRequest;
    +import io.sentrius.sso.genai.model.LLMRequest;
    +import io.sentrius.sso.genai.Message;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * Represents a request to the OpenAI Chat API endpoint.
    + *
    + * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    + * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    + *
    + * Example usage:
    + *
    + * &lt;pre&gt;{@code
    + * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    + *         .build();
    + *
    + * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    + * ChatApiResponse response = endpoint.send(request);
    + * }&lt;/pre&gt;
    + *
    + */
    +<span class="nc bnc" id="L30" title="All 14 branches missed.">@Data</span>
    +<span class="nc bnc" id="L31" title="All 2 branches missed.">@SuperBuilder</span>
    +public class ChatApiEndpointRequest extends ApiEndPointRequest {
    +
    +    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    +
    +    @Builder.Default
    +<span class="nc" id="L37">    private Float temperature = 1.0F;</span>
    +
    +    @Override
    +    public String getEndpoint() {
    +<span class="nc" id="L41">        return API_ENDPOINT;</span>
    +    }
    +
    +    /**
    +     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    +     *
    +     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    +     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    +     * IllegalArgumentException will be thrown.
    +     *
    +     * Example usage:
    +     *
    +     * &lt;pre&gt;{@code
    +     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    +     * }&lt;/pre&gt;
    +     *
    +     *
    +     * @return A new instance of the ChatApiEndpoint.
    +     *
    +     * @throws IllegalArgumentException
    +     *             If the API key is null or empty.
    +     */
    +    @Override
    +    public Object create() {
    +<span class="nc" id="L65">        List&lt;Message&gt; messages = new ArrayList&lt;&gt;();</span>
    +<span class="nc bnc" id="L66" title="All 4 branches missed.">        String role = null == user || user.isEmpty() ? &quot;user&quot; : user;</span>
    +<span class="nc" id="L67">        messages.add(Message.builder().role(role).content(userInput).build());</span>
    +<span class="nc bnc" id="L68" title="All 4 branches missed.">        if (null != systemInput &amp;&amp; !systemInput.isEmpty()) {</span>
    +<span class="nc" id="L69">            messages.add(Message.builder().role(&quot;system&quot;).content(systemInput).build());</span>
    +        }
    +<span class="nc" id="L71">        var requestBody = LLMRequest.builder().model(&quot;gpt-3.5-turbo&quot;).user(role).messages(messages);</span>
    +<span class="nc bnc" id="L72" title="All 2 branches missed.">        if (temperature != 1.0F) {</span>
    +<span class="nc" id="L73">            requestBody.temperature(temperature);</span>
    +        }
    +<span class="nc bnc" id="L75" title="All 2 branches missed.">        if (maxTokens != 4096) {</span>
    +<span class="nc" id="L76">            requestBody.maxTokens(maxTokens);</span>
    +        }
    +<span class="nc" id="L78">        return requestBody.build();</span>
    +    }
    +
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
    new file mode 100644
    index 00000000..9822c3c0
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.ConversationRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest.ConversationRequestBuilder</span></div><h1>ConversationRequest.ConversationRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="ConversationRequest.java.html#L32" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ConversationRequest.java.html#L32" class="el_method">temperature(Float)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">chatWithHistory(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="ConversationRequest.java.html#L32" class="el_method">newMessage(LLMResponse)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">ConversationRequest.ConversationRequestBuilder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
    new file mode 100644
    index 00000000..cecf3a9e
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.ConversationRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest.ConversationRequestBuilderImpl</span></div><h1>ConversationRequest.ConversationRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
    new file mode 100644
    index 00000000..8c032520
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest</span></div><h1>ConversationRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">308 of 308</td><td class="ctr2">0%</td><td class="bar">46 of 46</td><td class="ctr2">0%</td><td class="ctr1">40</td><td class="ctr2">40</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">17</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a6"><a href="ConversationRequest.java.html#L73" class="el_method">create()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="97" alt="97"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="ConversationRequest.java.html#L31" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="72" alt="72"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="ConversationRequest.java.html#L31" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="59" height="10" title="48" alt="48"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="ConversationRequest.java.html#L32" class="el_method">ConversationRequest(ConversationRequest.ConversationRequestBuilder)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="37" alt="37"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a16"><a href="ConversationRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">$default$newMessage()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="7" alt="7"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">$default$chatWithHistory()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="ConversationRequest.java.html#L32" class="el_method">builder()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a15"><a href="ConversationRequest.java.html#L31" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a13"><a href="ConversationRequest.java.html#L31" class="el_method">setChatWithHistory(List)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a14"><a href="ConversationRequest.java.html#L31" class="el_method">setNewMessage(LLMResponse)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="ConversationRequest.java.html#L32" class="el_method">$default$temperature()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a11"><a href="ConversationRequest.java.html#L38" class="el_method">getTemperature()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="ConversationRequest.java.html#L46" class="el_method">getChatWithHistory()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="ConversationRequest.java.html#L49" class="el_method">getNewMessage()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a4"><a href="ConversationRequest.java.html#L31" class="el_method">canEqual(Object)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a9"><a href="ConversationRequest.java.html#L42" class="el_method">getEndpoint()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
    new file mode 100644
    index 00000000..7a48f9da
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
    @@ -0,0 +1,91 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">ConversationRequest.java</span></div><h1>ConversationRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +import io.sentrius.sso.genai.Message;
    +import io.sentrius.sso.genai.model.ApiEndPointRequest;
    +import io.sentrius.sso.genai.model.LLMResponse;
    +import io.sentrius.sso.genai.model.LLMRequest;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * Represents a request to the OpenAI Chat API endpoint.
    + *
    + * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    + * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    + * using the {@link ChatApiEndpoint#send(ConversationRequest)} method.
    + *
    + * Example usage:
    + *
    + * &lt;pre&gt;{@code
    + * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    + *         .build();
    + *
    + * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    + * ChatApiResponse response = endpoint.send(request);
    + * }&lt;/pre&gt;
    + *
    + */
    +<span class="nc bnc" id="L31" title="All 30 branches missed.">@Data</span>
    +<span class="nc bnc" id="L32" title="All 6 branches missed.">@SuperBuilder</span>
    +public class ConversationRequest extends ApiEndPointRequest {
    +
    +    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    +
    +    @Builder.Default
    +<span class="nc" id="L38">    private Float temperature = 1.0F;</span>
    +
    +    @Override
    +    public String getEndpoint() {
    +<span class="nc" id="L42">        return API_ENDPOINT;</span>
    +    }
    +
    +    @Builder.Default
    +<span class="nc" id="L46">    private List&lt;LLMResponse&gt; chatWithHistory = new ArrayList&lt;&gt;();</span>
    +
    +    @Builder.Default
    +<span class="nc" id="L49">    private LLMResponse newMessage = LLMResponse.builder().role(&quot;user&quot;).content(&quot;&quot;).build();</span>
    +
    +
    +    /**
    +     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    +     *
    +     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    +     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    +     * IllegalArgumentException will be thrown.
    +     *
    +     * Example usage:
    +     *
    +     * &lt;pre&gt;{@code
    +     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    +     * }&lt;/pre&gt;
    +     *
    +     *
    +     * @return A new instance of the ChatApiEndpoint.
    +     *
    +     * @throws IllegalArgumentException
    +     *             If the API key is null or empty.
    +     */
    +    @Override
    +    public Object create() {
    +<span class="nc" id="L73">        List&lt;Message&gt; messages = new ArrayList&lt;&gt;();</span>
    +<span class="nc" id="L74">        messages.add(Message.builder().role(&quot;system&quot;).content(systemInput).build());</span>
    +<span class="nc bnc" id="L75" title="All 2 branches missed.">        for (LLMResponse chatMessage : chatWithHistory) {</span>
    +<span class="nc" id="L76">            messages.add(Message.builder().role(chatMessage.getRole()).content(chatMessage.getContent()).build());</span>
    +<span class="nc" id="L77">        }</span>
    +<span class="nc" id="L78">        messages.add(Message.builder().role(newMessage.getRole()).content(newMessage.getContent()).build());</span>
    +<span class="nc bnc" id="L79" title="All 4 branches missed.">        String role = null == user || user.isEmpty() ? &quot;user&quot; : user;</span>
    +<span class="nc" id="L80">        var requestBody = LLMRequest.builder().model(&quot;gpt-3.5-turbo&quot;).user(role).messages(messages);</span>
    +<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (temperature != 1.0F) {</span>
    +<span class="nc" id="L82">            requestBody.temperature(temperature);</span>
    +        }
    +<span class="nc bnc" id="L84" title="All 2 branches missed.">        if (maxTokens != 4096) {</span>
    +<span class="nc" id="L85">            requestBody.maxTokens(maxTokens);</span>
    +        }
    +<span class="nc" id="L87">        return requestBody.build();</span>
    +    }
    +
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
    new file mode 100644
    index 00000000..e26e6e81
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.RawConversationRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest.RawConversationRequestBuilder</span></div><h1>RawConversationRequest.RawConversationRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="RawConversationRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="RawConversationRequest.java.html#L31" class="el_method">temperature(Float)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">chatWithHistory(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html#L31" class="el_method">request(LLMRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">RawConversationRequest.RawConversationRequestBuilder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
    new file mode 100644
    index 00000000..7d78629a
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.RawConversationRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest.RawConversationRequestBuilderImpl</span></div><h1>RawConversationRequest.RawConversationRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
    new file mode 100644
    index 00000000..d0eacfe1
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest</span></div><h1>RawConversationRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">210 of 210</td><td class="ctr2">0%</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="ctr1">35</td><td class="ctr2">35</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">17</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a6"><a href="RawConversationRequest.java.html#L30" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a11"><a href="RawConversationRequest.java.html#L30" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="RawConversationRequest.java.html#L31" class="el_method">RawConversationRequest(RawConversationRequest.RawConversationRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="61" height="10" title="37" alt="37"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a16"><a href="RawConversationRequest.java.html#L30" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$chatWithHistory()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="RawConversationRequest.java.html#L31" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a15"><a href="RawConversationRequest.java.html#L30" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a13"><a href="RawConversationRequest.java.html#L30" class="el_method">setChatWithHistory(List)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="RawConversationRequest.java.html#L30" class="el_method">setRequest(LLMRequest)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="RawConversationRequest.java.html#L74" class="el_method">create()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$temperature()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$request()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="RawConversationRequest.java.html#L37" class="el_method">getTemperature()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a7"><a href="RawConversationRequest.java.html#L45" class="el_method">getChatWithHistory()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a9"><a href="RawConversationRequest.java.html#L48" class="el_method">getRequest()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a4"><a href="RawConversationRequest.java.html#L30" class="el_method">canEqual(Object)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="RawConversationRequest.java.html#L41" class="el_method">getEndpoint()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
    new file mode 100644
    index 00000000..044f0785
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
    @@ -0,0 +1,78 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">RawConversationRequest.java</span></div><h1>RawConversationRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +import io.sentrius.sso.genai.model.ApiEndPointRequest;
    +import io.sentrius.sso.genai.model.LLMRequest;
    +import io.sentrius.sso.genai.model.LLMResponse;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * Represents a request to the OpenAI Chat API endpoint.
    + *
    + * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    + * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    + * using the {@link ChatApiEndpoint#send(io.sentrius.sso.genai.model.endpoints.RawConversationRequest)} method.
    + *
    + * Example usage:
    + *
    + * &lt;pre&gt;{@code
    + * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    + *         .build();
    + *
    + * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    + * ChatApiResponse response = endpoint.send(request);
    + * }&lt;/pre&gt;
    + *
    + */
    +<span class="nc bnc" id="L30" title="All 30 branches missed.">@Data</span>
    +<span class="nc bnc" id="L31" title="All 6 branches missed.">@SuperBuilder</span>
    +public class RawConversationRequest extends ApiEndPointRequest {
    +
    +    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    +
    +    @Builder.Default
    +<span class="nc" id="L37">    private Float temperature = 1.0F;</span>
    +
    +    @Override
    +    public String getEndpoint() {
    +<span class="nc" id="L41">        return API_ENDPOINT;</span>
    +    }
    +
    +    @Builder.Default
    +<span class="nc" id="L45">    private List&lt;LLMResponse&gt; chatWithHistory = new ArrayList&lt;&gt;();</span>
    +
    +    @Builder.Default
    +<span class="nc" id="L48">    private LLMRequest request = LLMRequest.builder().build();</span>
    +
    +
    +    /**
    +     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    +     *
    +     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    +     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    +     * IllegalArgumentException will be thrown.
    +     *
    +     * Example usage:
    +     *
    +     * &lt;pre&gt;{@code
    +     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    +     * }&lt;/pre&gt;
    +     *
    +     * @param apiKey
    +     *            The API key to use for requests to the OpenAI Chat API endpoint.
    +     *
    +     * @return A new instance of the ChatApiEndpoint.
    +     *
    +     * @throws IllegalArgumentException
    +     *             If the API key is null or empty.
    +     */
    +    @Override
    +    public Object create() {
    +<span class="nc" id="L74">        return request;</span>
    +    }
    +
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
    new file mode 100644
    index 00000000..bb26cde9
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model.endpoints</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model.endpoints</span></div><h1>io.sentrius.sso.genai.model.endpoints</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">816 of 816</td><td class="ctr2">0%</td><td class="bar">110 of 110</td><td class="ctr2">0%</td><td class="ctr1">119</td><td class="ctr2">119</td><td class="ctr1">41</td><td class="ctr2">41</td><td class="ctr1">64</td><td class="ctr2">64</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a3"><a href="ConversationRequest.html" class="el_class">ConversationRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="308" alt="308"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="46" alt="46"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">40</td><td class="ctr2" id="g0">40</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">17</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a6"><a href="RawConversationRequest.html" class="el_class">RawConversationRequest</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="81" height="10" title="210" alt="210"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="36" alt="36"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">35</td><td class="ctr2" id="g1">35</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">17</td><td class="ctr2" id="k1">17</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.html" class="el_class">ChatApiEndpointRequest</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="175" alt="175"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="28" alt="28"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">25</td><td class="ctr2" id="g2">25</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j2">11</td><td class="ctr2" id="k2">11</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a4"><a href="ConversationRequest$ConversationRequestBuilder.html" class="el_class">ConversationRequest.ConversationRequestBuilder</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="42" alt="42"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="RawConversationRequest$RawConversationRequestBuilder.html" class="el_class">RawConversationRequest.RawConversationRequestBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="42" alt="42"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html" class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="18" alt="18"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">3</td><td class="ctr2" id="k5">3</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a5"><a href="ConversationRequest$ConversationRequestBuilderImpl.html" class="el_class">ConversationRequest.ConversationRequestBuilderImpl</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">2</td><td class="ctr2" id="k6">2</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html" class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a8"><a href="RawConversationRequest$RawConversationRequestBuilderImpl.html" class="el_class">RawConversationRequest.RawConversationRequestBuilderImpl</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">2</td><td class="ctr2" id="k8">2</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
    new file mode 100644
    index 00000000..4ed056a0
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model.endpoints</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model.endpoints</span></div><h1>io.sentrius.sso.genai.model.endpoints</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">816 of 816</td><td class="ctr2">0%</td><td class="bar">110 of 110</td><td class="ctr2">0%</td><td class="ctr1">119</td><td class="ctr2">119</td><td class="ctr1">41</td><td class="ctr2">41</td><td class="ctr1">64</td><td class="ctr2">64</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a1"><a href="ConversationRequest.java.html" class="el_source">ConversationRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="357" alt="357"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="46" alt="46"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">47</td><td class="ctr2" id="g0">47</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">24</td><td class="ctr2" id="k0">24</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html" class="el_source">RawConversationRequest.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="87" height="10" title="259" alt="259"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="36" alt="36"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">42</td><td class="ctr2" id="g1">42</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">24</td><td class="ctr2" id="k1">24</td><td class="ctr1" id="l1">3</td><td class="ctr2" id="m1">3</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html" class="el_source">ChatApiEndpointRequest.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="67" height="10" title="200" alt="200"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="28" alt="28"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">30</td><td class="ctr2" id="g2">30</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j2">16</td><td class="ctr2" id="k2">16</td><td class="ctr1" id="l2">3</td><td class="ctr2" id="m2">3</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
    new file mode 100644
    index 00000000..59463204
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest.ApiEndPointRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ApiEndPointRequest.ApiEndPointRequestBuilder</span></div><h1>ApiEndPointRequest.ApiEndPointRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">67 of 67</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$fillValuesFromInstanceIntoBuilder(ApiEndPointRequest, ApiEndPointRequest.ApiEndPointRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ApiEndPointRequest.java.html#L12" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ApiEndPointRequest.java.html#L12" class="el_method">maxTokens(int)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$fillValuesFrom(ApiEndPointRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="ApiEndPointRequest.java.html#L12" class="el_method">user(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a7"><a href="ApiEndPointRequest.java.html#L12" class="el_method">userInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="ApiEndPointRequest.java.html#L12" class="el_method">systemInput(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="ApiEndPointRequest.java.html#L12" class="el_method">ApiEndPointRequest.ApiEndPointRequestBuilder()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
    new file mode 100644
    index 00000000..4f665136
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ApiEndPointRequest</span></div><h1>ApiEndPointRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">203 of 203</td><td class="ctr2">0%</td><td class="bar">34 of 34</td><td class="ctr2">0%</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a3"><a href="ApiEndPointRequest.java.html#L11" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">14</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="ApiEndPointRequest.java.html#L11" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="ApiEndPointRequest.java.html#L12" class="el_method">ApiEndPointRequest(ApiEndPointRequest.ApiEndPointRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="39" height="10" title="26" alt="26"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a13"><a href="ApiEndPointRequest.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setUser(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a12"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setUserInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setSystemInput(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a9"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setMaxTokens(int)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a6"><a href="ApiEndPointRequest.java.html#L15" class="el_method">getUser()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="ApiEndPointRequest.java.html#L17" class="el_method">getUserInput()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a5"><a href="ApiEndPointRequest.java.html#L19" class="el_method">getSystemInput()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="ApiEndPointRequest.java.html#L22" class="el_method">getMaxTokens()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a2"><a href="ApiEndPointRequest.java.html#L11" class="el_method">canEqual(Object)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$default$maxTokens()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
    new file mode 100644
    index 00000000..e6c948c4
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
    @@ -0,0 +1,44 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">ApiEndPointRequest.java</span></div><h1>ApiEndPointRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * This class represents an API endpoint request that can be used to get the endpoint and create an object.
    + * It provides methods to get the endpoint as a string and create an object from the endpoint.
    + */
    +<span class="nc bnc" id="L11" title="All 32 branches missed.">@Data</span>
    +<span class="nc bnc" id="L12" title="All 2 branches missed.">@SuperBuilder(toBuilder = true)</span>
    +public abstract class ApiEndPointRequest {
    +
    +<span class="nc" id="L15">    protected String user;</span>
    +
    +<span class="nc" id="L17">    protected String userInput;</span>
    +
    +<span class="nc" id="L19">    protected String systemInput;</span>
    +
    +    @Builder.Default
    +<span class="nc" id="L22">    protected int maxTokens = 4096;</span>
    +
    +    /**
    +     * Returns the endpoint of the API request. The endpoint refers to the specific location of the resource being accessed by the request.
    +     * Examples of endpoints may include &quot;/users&quot; or &quot;/products&quot;.
    +     *
    +     * @return a String representing the endpoint of the request.
    +     */
    +    public abstract String getEndpoint();
    +
    +    /**
    +     * Creates an instance of the API endpoint request.
    +     *
    +     * @return An {@code Object} representing the API endpoint request. The actual
    +     *         type of the returned object depends on the implementation of this
    +     *         method in the subclass.
    +     *
    +     * @see ApiEndPointRequestBuilder
    +     *
    +     */
    +    public abstract Object create();
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
    new file mode 100644
    index 00000000..320c853b
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule.ComplianceRuleBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ComplianceRule.ComplianceRuleBuilder</span></div><h1>ComplianceRule.ComplianceRuleBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="ComplianceRule.java.html#L22" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ComplianceRule.java.html#L22" class="el_method">rule(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="100" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ComplianceRule.java.html#L22" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html#L22" class="el_method">ComplianceRule.ComplianceRuleBuilder()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
    new file mode 100644
    index 00000000..bc9aa33c
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ComplianceRule</span></div><h1>ComplianceRule</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">85 of 85</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a4"><a href="ComplianceRule.java.html#L21" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="ComplianceRule.java.html#L21" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ComplianceRule.java.html#L23" class="el_method">ComplianceRule(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ComplianceRule.java.html#L22" class="el_method">builder()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="ComplianceRule.java.html#L21" class="el_method">setRule(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="ComplianceRule.java.html#L21" class="el_method">toString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="ComplianceRule.java.html#L27" class="el_method">getRule()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html#L21" class="el_method">canEqual(Object)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="ComplianceRule.java.html#L24" class="el_method">ComplianceRule()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
    new file mode 100644
    index 00000000..430df2f7
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
    @@ -0,0 +1,29 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">ComplianceRule.java</span></div><h1>ComplianceRule.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import lombok.AllArgsConstructor;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.NoArgsConstructor;
    +
    +/**
    + * The ComplianceRule class represents a set of rules that must be followed to comply with a certain standard or regulation.
    + * It provides various methods for defining and enforcing compliance rules.
    + *
    + * This class contains the following methods:
    + * &lt;ul&gt;
    + *     &lt;li&gt;addRule(): Adds a new rule to the set of compliance rules&lt;/li&gt;
    + *     &lt;li&gt;deleteRule(): Removes a rule from the set of compliance rules&lt;/li&gt;
    + *     &lt;li&gt;checkCompliance(): Checks whether a given set of data complies with the defined rules&lt;/li&gt;
    + * &lt;/ul&gt;
    + *
    + * For more information about each method, refer to their respective Javadoc.
    + */
    +<span class="nc bnc" id="L21" title="All 14 branches missed.">@Data</span>
    +<span class="nc" id="L22">@Builder</span>
    +<span class="nc" id="L23">@AllArgsConstructor</span>
    +<span class="nc" id="L24">@NoArgsConstructor</span>
    +public class ComplianceRule {
    +
    +<span class="nc" id="L27">    String rule;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
    new file mode 100644
    index 00000000..0d64ac25
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation.ConversationBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">Conversation.ConversationBuilder</span></div><h1>Conversation.ConversationBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">58 of 58</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a0"><a href="Conversation.java.html#L11" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Conversation.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="82" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="Conversation.java.html#L11" class="el_method">terminalMessages(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="Conversation.java.html#L11" class="el_method">previousMessages(List)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Conversation.java.html#L11" class="el_method">newUserMessage(LLMResponse)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Conversation.java.html#L11" class="el_method">systemConfines(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Conversation.java.html#L11" class="el_method">Conversation.ConversationBuilder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
    new file mode 100644
    index 00000000..b6e0bbb9
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">Conversation</span></div><h1>Conversation</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">218 of 218</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">34</td><td class="ctr2">34</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">15</td><td class="ctr2">15</td></tr></tfoot><tbody><tr><td id="a4"><a href="Conversation.java.html#L12" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="Conversation.java.html#L12" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Conversation.java.html#L11" class="el_method">Conversation(List, LLMResponse, List, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="15" alt="15"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="Conversation.java.html#L12" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="Conversation.java.html#L11" class="el_method">$default$terminalMessages()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="Conversation.java.html#L11" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a11"><a href="Conversation.java.html#L14" class="el_method">setPreviousMessages(List)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Conversation.java.html#L14" class="el_method">setNewUserMessage(LLMResponse)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a13"><a href="Conversation.java.html#L14" class="el_method">setTerminalMessages(List)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a12"><a href="Conversation.java.html#L14" class="el_method">setSystemConfines(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="Conversation.java.html#L12" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a6"><a href="Conversation.java.html#L17" class="el_method">getPreviousMessages()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a5"><a href="Conversation.java.html#L18" class="el_method">getNewUserMessage()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="Conversation.java.html#L21" class="el_method">getTerminalMessages()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a7"><a href="Conversation.java.html#L23" class="el_method">getSystemConfines()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
    new file mode 100644
    index 00000000..90fae4fa
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
    @@ -0,0 +1,25 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">Conversation.java</span></div><h1>Conversation.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import java.util.ArrayList;
    +import java.util.List;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.Getter;
    +import lombok.Setter;
    +
    +
    +<span class="nc bnc" id="L11" title="All 2 branches missed.">@Builder</span>
    +<span class="nc bnc" id="L12" title="All 38 branches missed.">@Data</span>
    +@Getter
    +<span class="nc" id="L14">@Setter</span>
    +public class Conversation {
    +
    +<span class="nc" id="L17">    List&lt;LLMResponse&gt; previousMessages;</span>
    +<span class="nc" id="L18">    LLMResponse newUserMessage;</span>
    +
    +    @Builder.Default
    +<span class="nc" id="L21">    List&lt;String&gt; terminalMessages = new ArrayList&lt;&gt;();</span>
    +
    +<span class="nc" id="L23">    String systemConfines;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
    new file mode 100644
    index 00000000..400df938
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.LLMRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest.LLMRequestBuilder</span></div><h1>LLMRequest.LLMRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">151 of 151</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a1"><a href="LLMRequest.java.html#L26" class="el_method">$fillValuesFromInstanceIntoBuilder(LLMRequest, LLMRequest.LLMRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="51" alt="51"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a13"><a href="LLMRequest.java.html#L26" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="27" alt="27"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">$fillValuesFrom(LLMRequest)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="LLMRequest.java.html#L26" class="el_method">messages(List)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="LLMRequest.java.html#L26" class="el_method">temperature(Float)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a12"><a href="LLMRequest.java.html#L26" class="el_method">topP(Float)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="LLMRequest.java.html#L26" class="el_method">n(Integer)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="LLMRequest.java.html#L26" class="el_method">stream(Boolean)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="LLMRequest.java.html#L26" class="el_method">stop(List)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="LLMRequest.java.html#L26" class="el_method">maxTokens(Integer)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a8"><a href="LLMRequest.java.html#L26" class="el_method">presencePenalty(Float)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="LLMRequest.java.html#L26" class="el_method">frequencyPenalty(Float)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a4"><a href="LLMRequest.java.html#L26" class="el_method">logitBias(Map)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a3"><a href="LLMRequest.java.html#L26" class="el_method">LLMRequest.LLMRequestBuilder()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
    new file mode 100644
    index 00000000..cb995990
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.LLMRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest.LLMRequestBuilderImpl</span></div><h1>LLMRequest.LLMRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="LLMRequest.java.html#L26" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
    new file mode 100644
    index 00000000..20851bae
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest</span></div><h1>LLMRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">525 of 525</td><td class="ctr2">0%</td><td class="bar">86 of 86</td><td class="ctr2">0%</td><td class="ctr1">72</td><td class="ctr2">72</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">29</td><td class="ctr2">29</td></tr></tfoot><tbody><tr><td id="a2"><a href="LLMRequest.java.html#L25" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="191" alt="191"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="66" alt="66"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">34</td><td class="ctr2" id="g0">34</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a13"><a href="LLMRequest.java.html#L25" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="91" height="10" title="146" alt="146"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a16"><a href="LLMRequest.java.html#L26" class="el_method">LLMRequest(LLMRequest.LLMRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="44" alt="44"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a15"><a href="LLMRequest.java.html#L28" class="el_method">LLMRequest(List, Float, Float, Integer, Boolean, List, Integer, Float, Float, Map)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="33" alt="33"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a28"><a href="LLMRequest.java.html#L25" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="25" alt="25"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a27"><a href="LLMRequest.java.html#L26" class="el_method">toBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">builder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="LLMRequest.java.html#L25" class="el_method">setMessages(List)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a25"><a href="LLMRequest.java.html#L25" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a26"><a href="LLMRequest.java.html#L25" class="el_method">setTopP(Float)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a21"><a href="LLMRequest.java.html#L25" class="el_method">setN(Integer)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a24"><a href="LLMRequest.java.html#L25" class="el_method">setStream(Boolean)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a23"><a href="LLMRequest.java.html#L25" class="el_method">setStop(List)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a19"><a href="LLMRequest.java.html#L25" class="el_method">setMaxTokens(Integer)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a22"><a href="LLMRequest.java.html#L25" class="el_method">setPresencePenalty(Float)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a17"><a href="LLMRequest.java.html#L25" class="el_method">setFrequencyPenalty(Float)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a18"><a href="LLMRequest.java.html#L25" class="el_method">setLogitBias(Map)</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a6"><a href="LLMRequest.java.html#L38" class="el_method">getMessages()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a11"><a href="LLMRequest.java.html#L51" class="el_method">getTemperature()</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a12"><a href="LLMRequest.java.html#L65" class="el_method">getTopP()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a7"><a href="LLMRequest.java.html#L75" class="el_method">getN()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a10"><a href="LLMRequest.java.html#L87" class="el_method">getStream()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a9"><a href="LLMRequest.java.html#L97" class="el_method">getStop()</a></td><td class="bar" id="b22"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a5"><a href="LLMRequest.java.html#L108" class="el_method">getMaxTokens()</a></td><td class="bar" id="b23"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a8"><a href="LLMRequest.java.html#L122" class="el_method">getPresencePenalty()</a></td><td class="bar" id="b24"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a3"><a href="LLMRequest.java.html#L136" class="el_method">getFrequencyPenalty()</a></td><td class="bar" id="b25"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">1</td><td class="ctr2" id="i25">1</td><td class="ctr1" id="j25">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a4"><a href="LLMRequest.java.html#L151" class="el_method">getLogitBias()</a></td><td class="bar" id="b26"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c26">0%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">1</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j26">1</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a1"><a href="LLMRequest.java.html#L25" class="el_method">canEqual(Object)</a></td><td class="bar" id="b27"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c27">0%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">1</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">1</td><td class="ctr2" id="i27">1</td><td class="ctr1" id="j27">1</td><td class="ctr2" id="k27">1</td></tr><tr><td id="a14"><a href="LLMRequest.java.html#L27" class="el_method">LLMRequest()</a></td><td class="bar" id="b28"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c28">0%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">1</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h28">1</td><td class="ctr2" id="i28">1</td><td class="ctr1" id="j28">1</td><td class="ctr2" id="k28">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
    new file mode 100644
    index 00000000..619f2f7a
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
    @@ -0,0 +1,153 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">LLMRequest.java</span></div><h1>LLMRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import java.util.List;
    +import java.util.Map;
    +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    +import com.fasterxml.jackson.annotation.JsonProperty;
    +import io.sentrius.sso.genai.Message;
    +import io.sentrius.sso.genai.api.BaseGenerativeRequest;
    +import lombok.AllArgsConstructor;
    +import lombok.Data;
    +import lombok.NoArgsConstructor;
    +import lombok.experimental.SuperBuilder;
    +
    +/**
    + * &lt;p&gt;
    + * Inspired by LiLittleCat's ChatCopmletionRequestBody
    + * &lt;/p&gt;
    + * see:
    + * &lt;a href=&quot;https://platform.openai.com/docs/api-reference/chat&quot;&gt;https://platform.openai.com/docs/api-reference/chat&lt;/a&gt;
    + *
    + * borrowed from &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    + *
    + * @since 2023/3/2
    + */
    +<span class="nc bnc" id="L25" title="All 86 branches missed.">@Data</span>
    +<span class="nc" id="L26">@SuperBuilder(toBuilder = true)</span>
    +<span class="nc" id="L27">@NoArgsConstructor</span>
    +<span class="nc" id="L28">@AllArgsConstructor</span>
    +@JsonIgnoreProperties(ignoreUnknown = true)
    +public class LLMRequest extends BaseGenerativeRequest {
    +    /**
    +     * Required
    +     * &lt;p&gt;
    +     * The messages to generate chat completions for, in the &lt;a
    +     * href=https://platform.openai.com/docs/guides/chat/introduction&gt;chat format&lt;/a&gt;.
    +     */
    +    @JsonProperty(value = &quot;messages&quot;)
    +<span class="nc" id="L38">    private List&lt;Message&gt; messages;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to 1
    +     * &lt;p&gt;
    +     * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while
    +     * lower values like 0.2 will make it more focused and deterministic.
    +     * &lt;p&gt;
    +     * We generally recommend altering this or `top_p` but not both.
    +     */
    +    @JsonProperty(value = &quot;temperature&quot;)
    +<span class="nc" id="L51">    private Float temperature;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to 1
    +     * &lt;p&gt;
    +     * An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of
    +     * the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are
    +     * considered.
    +     * &lt;p&gt;
    +     * We generally recommend altering this or `temperature` but not both.
    +     */
    +    @JsonProperty(value = &quot;top_p&quot;)
    +<span class="nc" id="L65">    private Float topP;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to 1
    +     * &lt;p&gt;
    +     * How many chat completions to generate for each message.
    +     */
    +    @JsonProperty(value = &quot;n&quot;)
    +<span class="nc" id="L75">    private Integer n;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to false
    +     * &lt;p&gt;
    +     * If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only &lt;a
    +     * href=https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format&gt;server-sent
    +     * events&lt;/a&gt; as they become available, with the stream terminated by a `data: [DONE]` message.
    +     */
    +    @JsonProperty(value = &quot;stream&quot;)
    +<span class="nc" id="L87">    private Boolean stream;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to null
    +     * &lt;p&gt;
    +     * Up to 4 sequences where the API will stop generating further tokens.
    +     */
    +    @JsonProperty(value = &quot;stop&quot;)
    +<span class="nc" id="L97">    private List&lt;String&gt; stop;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to inf
    +     * &lt;p&gt;
    +     * The maximum number of tokens allowed for the generated answer. By default, the number of tokens the model can
    +     * return will be (4096 - prompt tokens).
    +     */
    +    @JsonProperty(value = &quot;max_tokens&quot;)
    +<span class="nc" id="L108">    private Integer maxTokens;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to 0
    +     * &lt;p&gt;
    +     * Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far,
    +     * increasing the model's likelihood to talk about new topics.
    +     * &lt;p&gt;
    +     * &lt;a href=https://platform.openai.com/docs/api-reference/parameter-details&gt;See more information about frequency and
    +     * presence penalties.&lt;/a&gt;
    +     */
    +    @JsonProperty(value = &quot;presence_penalty&quot;)
    +<span class="nc" id="L122">    private Float presencePenalty;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to 0
    +     * &lt;p&gt;
    +     * Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so
    +     * far, decreasing the model's likelihood to repeat the same line verbatim.
    +     * &lt;p&gt;
    +     * &lt;a href=https://platform.openai.com/docs/api-reference/parameter-details&gt;See more information about frequency and
    +     * presence penalties.&lt;/a&gt;
    +     */
    +    @JsonProperty(value = &quot;frequency_penalty&quot;)
    +<span class="nc" id="L136">    private Float frequencyPenalty;</span>
    +
    +    /**
    +     * Optional
    +     * &lt;p&gt;
    +     * Defaults to null
    +     * &lt;p&gt;
    +     * Modify the likelihood of specified tokens appearing in the completion.
    +     * &lt;p&gt;
    +     * Accepts a json object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value
    +     * from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The
    +     * exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of
    +     * selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token.
    +     */
    +    @JsonProperty(value = &quot;logit_bias&quot;)
    +<span class="nc" id="L151">    private Map&lt;Object, Object&gt; logitBias;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
    new file mode 100644
    index 00000000..0d46c9c7
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse.LLMResponseBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMResponse.LLMResponseBuilder</span></div><h1>LLMResponse.LLMResponseBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">55 of 55</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a1"><a href="LLMResponse.java.html#L13" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="LLMResponse.java.html#L13" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="LLMResponse.java.html#L13" class="el_method">alert(boolean)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="LLMResponse.java.html#L13" class="el_method">role(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="LLMResponse.java.html#L13" class="el_method">content(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="LLMResponse.java.html#L13" class="el_method">terminalMessage(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="LLMResponse.java.html#L13" class="el_method">LLMResponse.LLMResponseBuilder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
    new file mode 100644
    index 00000000..f85f58ef
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMResponse</span></div><h1>LLMResponse</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">206 of 206</td><td class="ctr2">0%</td><td class="bar">34 of 34</td><td class="ctr2">0%</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">16</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a3"><a href="LLMResponse.java.html#L11" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">14</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="LLMResponse.java.html#L11" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="59" alt="59"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="LLMResponse.java.html#L14" class="el_method">LLMResponse(String, String, String, boolean)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="15" alt="15"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a15"><a href="LLMResponse.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="LLMResponse.java.html#L15" class="el_method">LLMResponse()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="LLMResponse.java.html#L13" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="LLMResponse.java.html#L12" class="el_method">setRole(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a12"><a href="LLMResponse.java.html#L12" class="el_method">setContent(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="LLMResponse.java.html#L12" class="el_method">setTerminalMessage(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a11"><a href="LLMResponse.java.html#L12" class="el_method">setAlert(boolean)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a5"><a href="LLMResponse.java.html#L17" class="el_method">getRole()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="LLMResponse.java.html#L18" class="el_method">getContent()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a6"><a href="LLMResponse.java.html#L19" class="el_method">getTerminalMessage()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="LLMResponse.java.html#L21" class="el_method">isAlert()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a2"><a href="LLMResponse.java.html#L11" class="el_method">canEqual(Object)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a0"><a href="LLMResponse.java.html#L13" class="el_method">$default$alert()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
    new file mode 100644
    index 00000000..0d4f7450
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
    @@ -0,0 +1,23 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">LLMResponse.java</span></div><h1>LLMResponse.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import lombok.AllArgsConstructor;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.Getter;
    +import lombok.RequiredArgsConstructor;
    +import lombok.Setter;
    +
    +@Getter
    +<span class="nc bnc" id="L11" title="All 34 branches missed.">@Data</span>
    +<span class="nc" id="L12">@Setter</span>
    +<span class="nc bnc" id="L13" title="All 2 branches missed.">@Builder</span>
    +<span class="nc" id="L14">@AllArgsConstructor</span>
    +<span class="nc" id="L15">@RequiredArgsConstructor</span>
    +public class LLMResponse {
    +<span class="nc" id="L17">    private String role;</span>
    +<span class="nc" id="L18">    private String content;</span>
    +<span class="nc" id="L19">    private String terminalMessage;</span>
    +    @Builder.Default
    +<span class="nc" id="L21">    private boolean alert = false;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
    new file mode 100644
    index 00000000..25b70592
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest.TwoPartyRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">TwoPartyRequest.TwoPartyRequestBuilder</span></div><h1>TwoPartyRequest.TwoPartyRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">73 of 73</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a0"><a href="TwoPartyRequest.java.html#L6" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="TwoPartyRequest.java.html#L6" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="14" alt="14"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="TwoPartyRequest.java.html#L6" class="el_method">systemInput(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="41" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="TwoPartyRequest.java.html#L6" class="el_method">whatSystemIsDoing(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="TwoPartyRequest.java.html#L6" class="el_method">userObjective(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="TwoPartyRequest.java.html#L6" class="el_method">userInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="TwoPartyRequest.java.html#L6" class="el_method">previousPrompt(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="TwoPartyRequest.java.html#L6" class="el_method">promptResponse(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html#L6" class="el_method">TwoPartyRequest.TwoPartyRequestBuilder()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
    new file mode 100644
    index 00000000..a072e103
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">TwoPartyRequest</span></div><h1>TwoPartyRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">45 of 45</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a8"><a href="TwoPartyRequest.java.html#L6" class="el_method">TwoPartyRequest(String, String, String, String, String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="TwoPartyRequest.java.html#L6" class="el_method">builder()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="TwoPartyRequest.java.html#L10" class="el_method">getSystemInput()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="TwoPartyRequest.java.html#L14" class="el_method">getWhatSystemIsDoing()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="TwoPartyRequest.java.html#L15" class="el_method">getUserObjective()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html#L16" class="el_method">getUserInput()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a2"><a href="TwoPartyRequest.java.html#L18" class="el_method">getPreviousPrompt()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="TwoPartyRequest.java.html#L19" class="el_method">getPromptResponse()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a0"><a href="TwoPartyRequest.java.html#L6" class="el_method">$default$systemInput()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
    new file mode 100644
    index 00000000..29e3d82e
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
    @@ -0,0 +1,22 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">TwoPartyRequest.java</span></div><h1>TwoPartyRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    +
    +import lombok.Builder;
    +import lombok.Getter;
    +
    +<span class="nc bnc" id="L6" title="All 2 branches missed.">@Builder</span>
    +@Getter
    +public class TwoPartyRequest {
    +    @Builder.Default
    +<span class="nc" id="L10">    private String systemInput = &quot;This is a mission critical system with admins performing break glass activities &quot; +</span>
    +        &quot;through ssh. You are monitoring as a two party system and acting as a second human monitoring a &quot; +
    +        &quot;session.  &quot;;
    +
    +<span class="nc" id="L14">    private String whatSystemIsDoing;</span>
    +<span class="nc" id="L15">    private String userObjective;</span>
    +<span class="nc" id="L16">    private String userInput;</span>
    +
    +<span class="nc" id="L18">    private String previousPrompt;</span>
    +<span class="nc" id="L19">    private String promptResponse;</span>
    +
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
    new file mode 100644
    index 00000000..7c70c36f
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model</span></div><h1>io.sentrius.sso.genai.model</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,711 of 1,711</td><td class="ctr2">0%</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="ctr1">249</td><td class="ctr2">249</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">143</td><td class="ctr2">143</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a6"><a href="LLMRequest.html" class="el_class">LLMRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="525" alt="525"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="86" alt="86"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">72</td><td class="ctr2" id="g0">72</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">29</td><td class="ctr2" id="k0">29</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a4"><a href="Conversation.html" class="el_class">Conversation</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="49" height="10" title="218" alt="218"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="38" alt="38"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">34</td><td class="ctr2" id="g1">34</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">15</td><td class="ctr2" id="k2">15</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a9"><a href="LLMResponse.html" class="el_class">LLMResponse</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="206" alt="206"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">33</td><td class="ctr2" id="g2">33</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">16</td><td class="ctr2" id="k1">16</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.html" class="el_class">ApiEndPointRequest</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="203" alt="203"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">31</td><td class="ctr2" id="g3">31</td><td class="ctr1" id="h4">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j3">14</td><td class="ctr2" id="k3">14</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="LLMRequest$LLMRequestBuilder.html" class="el_class">LLMRequest.LLMRequestBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="151" alt="151"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f5">14</td><td class="ctr2" id="g5">14</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">14</td><td class="ctr2" id="k4">14</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="ComplianceRule.html" class="el_class">ComplianceRule</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="85" alt="85"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">16</td><td class="ctr2" id="g4">16</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">9</td><td class="ctr2" id="k5">9</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a12"><a href="TwoPartyRequest$TwoPartyRequestBuilder.html" class="el_class">TwoPartyRequest.TwoPartyRequestBuilder</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="73" alt="73"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f6">10</td><td class="ctr2" id="g6">10</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">9</td><td class="ctr2" id="k6">9</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a1"><a href="ApiEndPointRequest$ApiEndPointRequestBuilder.html" class="el_class">ApiEndPointRequest.ApiEndPointRequestBuilder</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="67" alt="67"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">8</td><td class="ctr2" id="g8">8</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">8</td><td class="ctr2" id="k8">8</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a5"><a href="Conversation$ConversationBuilder.html" class="el_class">Conversation.ConversationBuilder</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="58" alt="58"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f9">8</td><td class="ctr2" id="g9">8</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">7</td><td class="ctr2" id="k9">7</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a10"><a href="LLMResponse$LLMResponseBuilder.html" class="el_class">LLMResponse.LLMResponseBuilder</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="55" alt="55"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f10">8</td><td class="ctr2" id="g10">8</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">7</td><td class="ctr2" id="k10">7</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a11"><a href="TwoPartyRequest.html" class="el_class">TwoPartyRequest</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="45" alt="45"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f7">9</td><td class="ctr2" id="g7">9</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j7">9</td><td class="ctr2" id="k7">9</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a3"><a href="ComplianceRule$ComplianceRuleBuilder.html" class="el_class">ComplianceRule.ComplianceRuleBuilder</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="18" alt="18"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">4</td><td class="ctr2" id="g11">4</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">4</td><td class="ctr2" id="k11">4</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a8"><a href="LLMRequest$LLMRequestBuilderImpl.html" class="el_class">LLMRequest.LLMRequestBuilderImpl</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">2</td><td class="ctr2" id="k12">2</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
    new file mode 100644
    index 00000000..1a423af4
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model</span></div><h1>io.sentrius.sso.genai.model</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,711 of 1,711</td><td class="ctr2">0%</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="ctr1">249</td><td class="ctr2">249</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">143</td><td class="ctr2">143</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a3"><a href="LLMRequest.java.html" class="el_source">LLMRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="683" alt="683"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="86" alt="86"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">88</td><td class="ctr2" id="g0">88</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">45</td><td class="ctr2" id="k0">45</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a2"><a href="Conversation.java.html" class="el_source">Conversation.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="276" alt="276"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="55" height="10" title="40" alt="40"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">42</td><td class="ctr2" id="g1">42</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">22</td><td class="ctr2" id="k2">22</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html" class="el_source">ApiEndPointRequest.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="270" alt="270"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">39</td><td class="ctr2" id="g3">39</td><td class="ctr1" id="h4">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j3">22</td><td class="ctr2" id="k3">22</td><td class="ctr1" id="l2">2</td><td class="ctr2" id="m2">2</td></tr><tr><td id="a4"><a href="LLMResponse.java.html" class="el_source">LLMResponse.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="261" alt="261"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="36" alt="36"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">41</td><td class="ctr2" id="g2">41</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">23</td><td class="ctr2" id="k1">23</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html" class="el_source">TwoPartyRequest.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="118" alt="118"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f5">19</td><td class="ctr2" id="g5">19</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j4">18</td><td class="ctr2" id="k4">18</td><td class="ctr1" id="l4">2</td><td class="ctr2" id="m4">2</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html" class="el_source">ComplianceRule.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="103" alt="103"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f4">20</td><td class="ctr2" id="g4">20</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">13</td><td class="ctr2" id="k5">13</td><td class="ctr1" id="l5">2</td><td class="ctr2" id="m5">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
    new file mode 100644
    index 00000000..c0135543
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message.MessageBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Message.MessageBuilder</span></div><h1>Message.MessageBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a0"><a href="Message.java.html#L33" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="Message.java.html#L33" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="Message.java.html#L33" class="el_method">role(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="Message.java.html#L33" class="el_method">content(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="Message.java.html#L33" class="el_method">refusal(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="Message.java.html#L33" class="el_method">Message.MessageBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
    new file mode 100644
    index 00000000..e9671bc6
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Message</span></div><h1>Message</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">171 of 171</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a2"><a href="Message.java.html#L32" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Message.java.html#L32" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a8"><a href="Message.java.html#L35" class="el_method">Message(String, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="Message.java.html#L32" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="Message.java.html#L33" class="el_method">builder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a11"><a href="Message.java.html#L32" class="el_method">setRole(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="Message.java.html#L32" class="el_method">setContent(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Message.java.html#L32" class="el_method">setRefusal(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="Message.java.html#L40" class="el_method">getRole()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="Message.java.html#L43" class="el_method">getContent()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a4"><a href="Message.java.html#L46" class="el_method">getRefusal()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="Message.java.html#L32" class="el_method">canEqual(Object)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a7"><a href="Message.java.html#L34" class="el_method">Message()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
    new file mode 100644
    index 00000000..dde8f1c2
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
    @@ -0,0 +1,48 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">Message.java</span></div><h1>Message.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    +
    +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    +import com.fasterxml.jackson.annotation.JsonProperty;
    +import lombok.AllArgsConstructor;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.NoArgsConstructor;
    +
    +/**
    + * &lt;p&gt;
    + * Inspired by liLittleCat's ChatGPT package.
    + *
    + * Codifies the Message request
    + * &lt;/p&gt;
    + *
    + * original @author &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    + *
    + * @since 2023/3/2
    + */
    +
    +/**
    + * The Message class represents a message that can be sent between users. This class is immutable and contains information about the message.
    + * It has the following methods:
    + *
    + * 1. getMessageText(): returns the text of the message
    + * 2. getSender(): returns the user who sent the message
    + * 3. getRecipient(): returns the user who received the message
    + * 4. getTimestamp(): returns the timestamp of the message
    + * 5. toString(): returns the string representation of the message
    + */
    +<span class="nc bnc" id="L32" title="All 30 branches missed.">@Data</span>
    +<span class="nc" id="L33">@Builder</span>
    +<span class="nc" id="L34">@NoArgsConstructor</span>
    +<span class="nc" id="L35">@AllArgsConstructor</span>
    +@JsonIgnoreProperties(ignoreUnknown = true)
    +public class Message {
    +
    +    @JsonProperty(value = &quot;role&quot;)
    +<span class="nc" id="L40">    public String role;</span>
    +
    +    @JsonProperty(value = &quot;content&quot;)
    +<span class="nc" id="L43">    public String content;</span>
    +
    +    @JsonProperty(value = &quot;refusal&quot;)
    +<span class="nc" id="L46">    public String refusal;</span>
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    new file mode 100644
    index 00000000..5c19ad3b
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Choice</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Choice</span></div><h1>Response.Choice</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">196 of 196</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">32</td><td class="ctr2">32</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L49" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Response.java.html#L49" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="Response.java.html#L49" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a9"><a href="Response.java.html#L49" class="el_method">setIndex(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="Response.java.html#L49" class="el_method">setMessage(Message)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="Response.java.html#L49" class="el_method">setFinishReason(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="Response.java.html#L49" class="el_method">setLogprobs(Integer)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="Response.java.html#L49" class="el_method">Response.Choice()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="Response.java.html#L53" class="el_method">getIndex()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="Response.java.html#L56" class="el_method">getMessage()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="Response.java.html#L59" class="el_method">getFinishReason()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="Response.java.html#L62" class="el_method">getLogprobs()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a0"><a href="Response.java.html#L49" class="el_method">canEqual(Object)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    new file mode 100644
    index 00000000..0310a02e
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.ResponseBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.ResponseBuilder</span></div><h1>Response.ResponseBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">83 of 83</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="Response.java.html#L18" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Response.java.html#L18" class="el_method">id(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="Response.java.html#L18" class="el_method">object(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L18" class="el_method">created(Long)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Response.java.html#L18" class="el_method">model(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Response.java.html#L18" class="el_method">choices(List)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Response.java.html#L18" class="el_method">usage(Response.Usage)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="Response.java.html#L18" class="el_method">serviceTier(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a8"><a href="Response.java.html#L18" class="el_method">systemFingerprint(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="Response.java.html#L18" class="el_method">Response.ResponseBuilder()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    new file mode 100644
    index 00000000..b41705af
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Usage</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Usage</span></div><h1>Response.Usage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">155 of 155</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L70" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="Response.java.html#L70" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="Response.java.html#L70" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="Response.java.html#L70" class="el_method">setPromptTokens(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="Response.java.html#L70" class="el_method">setCompletionTokens(Integer)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="Response.java.html#L70" class="el_method">setTotalTokens(Integer)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="Response.java.html#L70" class="el_method">Response.Usage()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="Response.java.html#L75" class="el_method">getPromptTokens()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="Response.java.html#L78" class="el_method">getCompletionTokens()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="Response.java.html#L81" class="el_method">getTotalTokens()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="Response.java.html#L70" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
    new file mode 100644
    index 00000000..9ef6c7b1
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response</span></div><h1>Response</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">401 of 401</td><td class="ctr2">0%</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="ctr1">60</td><td class="ctr2">60</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">25</td><td class="ctr2">25</td></tr></tfoot><tbody><tr><td id="a3"><a href="Response.java.html#L17" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="157" alt="157"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="54" alt="54"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">28</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a12"><a href="Response.java.html#L17" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="118" alt="118"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="35" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">9</td><td class="ctr2" id="g1">9</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a15"><a href="Response.java.html#L20" class="el_method">Response(String, String, Long, String, List, Response.Usage, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="27" alt="27"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a24"><a href="Response.java.html#L17" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="20" alt="20"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L93" class="el_method">concatenateResponses()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a18"><a href="Response.java.html#L17" class="el_method">setId(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="Response.java.html#L17" class="el_method">setObject(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a17"><a href="Response.java.html#L17" class="el_method">setCreated(Long)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a19"><a href="Response.java.html#L17" class="el_method">setModel(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a16"><a href="Response.java.html#L17" class="el_method">setChoices(List)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a23"><a href="Response.java.html#L17" class="el_method">setUsage(Response.Usage)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a21"><a href="Response.java.html#L17" class="el_method">setServiceTier(String)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a22"><a href="Response.java.html#L17" class="el_method">setSystemFingerprint(String)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="Response.java.html#L93" class="el_method">lambda$concatenateResponses$0(Response.Choice)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a6"><a href="Response.java.html#L24" class="el_method">getId()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="Response.java.html#L27" class="el_method">getObject()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a5"><a href="Response.java.html#L30" class="el_method">getCreated()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a7"><a href="Response.java.html#L33" class="el_method">getModel()</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a href="Response.java.html#L36" class="el_method">getChoices()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a11"><a href="Response.java.html#L39" class="el_method">getUsage()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a9"><a href="Response.java.html#L42" class="el_method">getServiceTier()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a10"><a href="Response.java.html#L85" class="el_method">getSystemFingerprint()</a></td><td class="bar" id="b22"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a1"><a href="Response.java.html#L17" class="el_method">canEqual(Object)</a></td><td class="bar" id="b23"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a14"><a href="Response.java.html#L19" class="el_method">Response()</a></td><td class="bar" id="b24"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    new file mode 100644
    index 00000000..67c78ba9
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    @@ -0,0 +1,96 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">Response.java</span></div><h1>Response.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    +
    +import java.util.List;
    +import java.util.stream.Collectors;
    +import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    +import com.fasterxml.jackson.annotation.JsonProperty;
    +import lombok.AllArgsConstructor;
    +import lombok.Builder;
    +import lombok.Data;
    +import lombok.NoArgsConstructor;
    +
    +/**
    + * Response class is responsible for collecting and storing user responses. It provides a string
    + * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    + * responses and the 'concatenateResponses' method to combine them into a single string.
    + */
    +<span class="nc bnc" id="L17" title="All 70 branches missed.">@Data</span>
    +<span class="nc" id="L18">@Builder</span>
    +<span class="nc" id="L19">@NoArgsConstructor</span>
    +<span class="nc" id="L20">@AllArgsConstructor</span>
    +public class Response {
    +
    +    @JsonProperty(value = &quot;id&quot;)
    +<span class="nc" id="L24">    public String id;</span>
    +
    +    @JsonProperty(value = &quot;object&quot;)
    +<span class="nc" id="L27">    public String object;</span>
    +
    +    @JsonProperty(value = &quot;created&quot;)
    +<span class="nc" id="L30">    public Long created;</span>
    +
    +    @JsonProperty(value = &quot;model&quot;)
    +<span class="nc" id="L33">    public String model;</span>
    +
    +    @JsonProperty(value = &quot;choices&quot;)
    +<span class="nc" id="L36">    public List&lt;Choice&gt; choices;</span>
    +
    +    @JsonProperty(value = &quot;usage&quot;)
    +<span class="nc" id="L39">    public Usage usage;</span>
    +
    +    @JsonProperty(value = &quot;service_tier&quot;, required = false)
    +<span class="nc" id="L42">    public String serviceTier;</span>
    +
    +    /**
    +     * Response class is responsible for collecting and storing user responses. It provides a string
    +     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    +     * responses and the 'concatenateResponses' method to combine them into a single string.
    +     */
    +<span class="nc bnc" id="L49" title="All 38 branches missed.">    @Data</span>
    +    public static class Choice {
    +
    +        @JsonProperty(value = &quot;index&quot;)
    +<span class="nc" id="L53">        public Integer index;</span>
    +
    +        @JsonProperty(value = &quot;message&quot;)
    +<span class="nc" id="L56">        public Message message;</span>
    +
    +        @JsonProperty(value = &quot;finish_reason&quot;)
    +<span class="nc" id="L59">        public String finishReason;</span>
    +
    +        @JsonProperty(value = &quot;logprobs&quot;)
    +<span class="nc" id="L62">        public Integer logprobs;</span>
    +    }
    +
    +    /**
    +     * Response class is responsible for collecting and storing user responses. It provides a string
    +     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    +     * responses and the 'concatenateResponses' method to combine them into a single string.
    +     */
    +<span class="nc bnc" id="L70" title="All 30 branches missed.">    @Data</span>
    +    @JsonIgnoreProperties(ignoreUnknown = true)
    +    public static class Usage {
    +
    +        @JsonProperty(value = &quot;prompt_tokens&quot;)
    +<span class="nc" id="L75">        public Integer promptTokens;</span>
    +
    +        @JsonProperty(value = &quot;completion_tokens&quot;)
    +<span class="nc" id="L78">        public Integer completionTokens;</span>
    +
    +        @JsonProperty(value = &quot;total_tokens&quot;)
    +<span class="nc" id="L81">        public Integer totalTokens;</span>
    +    }
    +
    +    @JsonProperty(value = &quot;system_fingerprint&quot;)
    +<span class="nc" id="L85">    String systemFingerprint;</span>
    +
    +    /**
    +     * This method concatenates all responses in a Response object and returns a string.
    +     *
    +     * @return      a string that contains all responses in a Response object
    +     */
    +    public String concatenateResponses() {
    +<span class="nc" id="L93">        return getChoices().stream().map(x -&gt; x.getMessage().getContent()).collect(Collectors.joining());</span>
    +    }
    +}
    +</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
    new file mode 100644
    index 00000000..2ffc0bc6
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,042 of 1,042</td><td class="ctr2">0%</td><td class="bar">168 of 168</td><td class="ctr2">0%</td><td class="ctr1">163</td><td class="ctr2">163</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">79</td><td class="ctr2">79</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="Response.html" class="el_class">Response</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="401" alt="401"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">60</td><td class="ctr2" id="g0">60</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">25</td><td class="ctr2" id="k0">25</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="Response$Choice.html" class="el_class">Response.Choice</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="196" alt="196"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="38" alt="38"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">13</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="Message.html" class="el_class">Message</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="171" alt="171"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="30" alt="30"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">28</td><td class="ctr2" id="g2">28</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j2">13</td><td class="ctr2" id="k2">13</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a5"><a href="Response$Usage.html" class="el_class">Response.Usage</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="155" alt="155"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="30" alt="30"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">26</td><td class="ctr2" id="g3">26</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">11</td><td class="ctr2" id="k3">11</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a4"><a href="Response$ResponseBuilder.html" class="el_class">Response.ResponseBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="83" alt="83"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">11</td><td class="ctr2" id="g4">11</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">11</td><td class="ctr2" id="k4">11</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a1"><a href="Message$MessageBuilder.html" class="el_class">Message.MessageBuilder</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="36" alt="36"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">6</td><td class="ctr2" id="g5">6</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">6</td><td class="ctr2" id="k5">6</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    new file mode 100644
    index 00000000..6f016859
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,042 of 1,042</td><td class="ctr2">0%</td><td class="bar">168 of 168</td><td class="ctr2">0%</td><td class="ctr1">163</td><td class="ctr2">163</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">79</td><td class="ctr2">79</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html" class="el_source">Response.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="835" alt="835"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="138" alt="138"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">129</td><td class="ctr2" id="g0">129</td><td class="ctr1" id="h0">22</td><td class="ctr2" id="i0">22</td><td class="ctr1" id="j0">60</td><td class="ctr2" id="k0">60</td><td class="ctr1" id="l0">4</td><td class="ctr2" id="m0">4</td></tr><tr><td id="a0"><a href="Message.java.html" class="el_source">Message.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="29" height="10" title="207" alt="207"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="30" alt="30"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">34</td><td class="ctr2" id="g1">34</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">19</td><td class="ctr2" id="k1">19</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..989b46d30469b56b014758f846ee6c5abfda16aa
    GIT binary patch
    literal 91
    zcmZ?wbhEHb<YM4rIK;xhkjB6;lY!w31H*rY|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-NwhSNb
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..1933e07c376bb71bdd9aac91cf858da3fcdb0f1c
    GIT binary patch
    literal 91
    zcmZ?wbhEHb<YM4rIK;xxz`$^Zf#E#^!~cec|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-N9U38B
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..cbf711b7030929b733f22f7a0cf3dbf61fe7868f
    GIT binary patch
    literal 91
    zcmZ?wbhEHb<YM4rIK;v*A(Y{H7sIRF44*zR{6_+cKUo;L7}yzf7=QqzmVsHJqKe^n
    j0tb8h9POxsbMM_@X>m$mi>nCYN#As;!%lJz1A{dHmlPuc
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4
    GIT binary patch
    literal 709
    zcmZ?wbhEHb6krfwxXQrrpW*-7BK;<J$sad5=B26sxKQ!q!Hgdl8q(~HUL2e9<Hd#-
    z7dn1?IPw4g|HIv8zrOAI@nFG^8xwkB-G027acOnKpKtdcpWnHq-sr)BinT@BA8t%o
    znxj(b?=UZ3c5RMIe~{#!dZYLEkL_tSI^1f;Km(xolZ6pvtPY3(`H6w8*rB1oLr1Fr
    zgz}>o8CDEUD?$vun5^UNelT%D!ODh<DT^W#oSIlz7qWFr6j-<`INnfgQuR3aJbW7`
    zN4%4`K$`$#XID3aq+mZI+oZ{pxEUFwnVA`9&7C{VNtTt7ed)5L3!LN`S=X*xyV99u
    u^Omii+jqD*GFUt3=ar=9mFR|47NlA!WacKOr|PF?rg3q(j|Mjlf*SzSChrLV
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..eb348fb0d498d75976150047b1b5c2fefc9dc220
    GIT binary patch
    literal 586
    zcmZ?wbhEHb6krfwI2Or}v!c<s$=9se-=Q<YsXNN8KQ3fOR@Cf*m^p=Yn<q4Gopkom
    z6_qkOy&5;;MsLfufQUJ{vGWR(7nLtMxlXsnMX%OXzt+v54k+vCJt@I!LR|T}_8Twn
    z8a23^wRl;#``dR0_3fQy*Wqv15n$II;MN!J-X9S(Eh&3>RsX(Ohwq+z^!{nkw1lu(
    zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k<wUj$8y`}qA+!h+12O)Zt{8e4bt
    z^z51Z;rqwPnTZ)o@)H-NC(KKmcWmLES9jAFW#uj_C|_66u(_dnV^!t4^7b9Ajhky9
    zzJD-rU(e=C8}{7Xx$oBQ`NwB1I6iy#jqQi->_2wz@P-Sk{|^LE{K>+|z);Vi!vF-J
    zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc>
    zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd
    zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU
    Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..440a14db74e76c2b6e854eacac1c44414b166271
    GIT binary patch
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ>Z%p}jXB
    Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(}
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..0ba65672530ee09f086821a26156836d0c91bd74
    GIT binary patch
    literal 91
    zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0
    eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..a4ea580d278fb727e4ae692838877fa63c4becf9
    GIT binary patch
    literal 351
    zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86
    zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw
    z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO
    z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47?
    zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@<H~=ly~!2^|49-&cqxtw`7?
    z#Ky|j%)-vX)?mu7-NU2OKVbs5sj!|NpR$sovf|v?yiO9jg7Wfm3i1lF3JOBbqGFPg
    YGSX7gGMmL+MfU97=X>Cwn<IlY03tk+6951J
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..7d24707ee82f54aa9fb10d1d9050013cbf161a7a
    GIT binary patch
    literal 193
    zcmV;y06zamNk%w1VGsZi0K@<Q1As^cfk_>VRxXubL!4|)qjO}gg>klxZ?TGXw~#-V
    zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<;
    ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx
    vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..131c28da405493661e3253ef79a68bd273039295
    GIT binary patch
    literal 227
    zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c
    zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3*
    zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7
    z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx
    Mi%z;upCW@b03m@=3jhEB
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
    new file mode 100644
    index 00000000..be5166e0
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
    @@ -0,0 +1,13 @@
    +/* Pretty printing styles. Used with prettify.js. */
    +
    +.str { color: #2A00FF; }
    +.kwd { color: #7F0055; font-weight:bold; }
    +.com { color: #3F5FBF; }
    +.typ { color: #606; }
    +.lit { color: #066; }
    +.pun { color: #660; }
    +.pln { color: #000; }
    +.tag { color: #008; }
    +.atn { color: #606; }
    +.atv { color: #080; }
    +.dec { color: #606; }
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
    new file mode 100644
    index 00000000..b2766fe0
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
    @@ -0,0 +1,1510 @@
    +// Copyright (C) 2006 Google Inc.
    +//
    +// Licensed under the Apache License, Version 2.0 (the "License");
    +// you may not use this file except in compliance with the License.
    +// You may obtain a copy of the License at
    +//
    +//      http://www.apache.org/licenses/LICENSE-2.0
    +//
    +// Unless required by applicable law or agreed to in writing, software
    +// distributed under the License is distributed on an "AS IS" BASIS,
    +// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    +// See the License for the specific language governing permissions and
    +// limitations under the License.
    +
    +
    +/**
    + * @fileoverview
    + * some functions for browser-side pretty printing of code contained in html.
    + * <p>
    + *
    + * For a fairly comprehensive set of languages see the
    + * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    + * file that came with this source.  At a minimum, the lexer should work on a
    + * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    + * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    + * and a subset of Perl, but, because of commenting conventions, doesn't work on
    + * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    + * <p>
    + * Usage: <ol>
    + * <li> include this source file in an html page via
    + *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    + * <li> define style rules.  See the example page for examples.
    + * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    + *    {@code class=prettyprint.}
    + *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    + *    printer needs to do more substantial DOM manipulations to support that, so
    + *    some css styles may not be preserved.
    + * </ol>
    + * That's it.  I wanted to keep the API as simple as possible, so there's no
    + * need to specify which language the code is in, but if you wish, you can add
    + * another class to the {@code <pre>} or {@code <code>} element to specify the
    + * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    + * starts with "lang-" followed by a file extension, specifies the file type.
    + * See the "lang-*.js" files in this directory for code that implements
    + * per-language file handlers.
    + * <p>
    + * Change log:<br>
    + * cbeust, 2006/08/22
    + * <blockquote>
    + *   Java annotations (start with "@") are now captured as literals ("lit")
    + * </blockquote>
    + * @requires console
    + */
    +
    +// JSLint declarations
    +/*global console, document, navigator, setTimeout, window */
    +
    +/**
    + * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    + * UI events.
    + * If set to {@code false}, {@code prettyPrint()} is synchronous.
    + */
    +window['PR_SHOULD_USE_CONTINUATION'] = true;
    +
    +/** the number of characters between tab columns */
    +window['PR_TAB_WIDTH'] = 8;
    +
    +/** Walks the DOM returning a properly escaped version of innerHTML.
    +  * @param {Node} node
    +  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    +  */
    +window['PR_normalizedHtml']
    +
    +/** Contains functions for creating and registering new language handlers.
    +  * @type {Object}
    +  */
    +  = window['PR']
    +
    +/** Pretty print a chunk of code.
    +  *
    +  * @param {string} sourceCodeHtml code as html
    +  * @return {string} code as html, but prettier
    +  */
    +  = window['prettyPrintOne']
    +/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    +  * {@code class=prettyprint} and prettify them.
    +  * @param {Function?} opt_whenDone if specified, called when the last entry
    +  *     has been finished.
    +  */
    +  = window['prettyPrint'] = void 0;
    +
    +/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    +window['_pr_isIE6'] = function () {
    +  var ieVersion = navigator && navigator.userAgent &&
    +      navigator.userAgent.match(/\bMSIE ([678])\./);
    +  ieVersion = ieVersion ? +ieVersion[1] : false;
    +  window['_pr_isIE6'] = function () { return ieVersion; };
    +  return ieVersion;
    +};
    +
    +
    +(function () {
    +  // Keyword lists for various languages.
    +  var FLOW_CONTROL_KEYWORDS =
    +      "break continue do else for if return while ";
    +  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    +      "double enum extern float goto int long register short signed sizeof " +
    +      "static struct switch typedef union unsigned void volatile ";
    +  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    +      "new operator private protected public this throw true try typeof ";
    +  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    +      "concept concept_map const_cast constexpr decltype " +
    +      "dynamic_cast explicit export friend inline late_check " +
    +      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    +      "template typeid typename using virtual wchar_t where ";
    +  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    +      "abstract boolean byte extends final finally implements import " +
    +      "instanceof null native package strictfp super synchronized throws " +
    +      "transient ";
    +  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    +      "as base by checked decimal delegate descending event " +
    +      "fixed foreach from group implicit in interface internal into is lock " +
    +      "object out override orderby params partial readonly ref sbyte sealed " +
    +      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    +  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    +      "debugger eval export function get null set undefined var with " +
    +      "Infinity NaN ";
    +  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    +      "goto if import last local my next no our print package redo require " +
    +      "sub undef unless until use wantarray while BEGIN END ";
    +  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    +      "elif except exec finally from global import in is lambda " +
    +      "nonlocal not or pass print raise try with yield " +
    +      "False True None ";
    +  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    +      " defined elsif end ensure false in module next nil not or redo rescue " +
    +      "retry self super then true undef unless until when yield BEGIN END ";
    +  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    +      "function in local set then until ";
    +  var ALL_KEYWORDS = (
    +      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    +      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    +
    +  // token style names.  correspond to css classes
    +  /** token style for a string literal */
    +  var PR_STRING = 'str';
    +  /** token style for a keyword */
    +  var PR_KEYWORD = 'kwd';
    +  /** token style for a comment */
    +  var PR_COMMENT = 'com';
    +  /** token style for a type */
    +  var PR_TYPE = 'typ';
    +  /** token style for a literal value.  e.g. 1, null, true. */
    +  var PR_LITERAL = 'lit';
    +  /** token style for a punctuation string. */
    +  var PR_PUNCTUATION = 'pun';
    +  /** token style for a punctuation string. */
    +  var PR_PLAIN = 'pln';
    +
    +  /** token style for an sgml tag. */
    +  var PR_TAG = 'tag';
    +  /** token style for a markup declaration such as a DOCTYPE. */
    +  var PR_DECLARATION = 'dec';
    +  /** token style for embedded source. */
    +  var PR_SOURCE = 'src';
    +  /** token style for an sgml attribute name. */
    +  var PR_ATTRIB_NAME = 'atn';
    +  /** token style for an sgml attribute value. */
    +  var PR_ATTRIB_VALUE = 'atv';
    +
    +  /**
    +   * A class that indicates a section of markup that is not code, e.g. to allow
    +   * embedding of line numbers within code listings.
    +   */
    +  var PR_NOCODE = 'nocode';
    +
    +  /** A set of tokens that can precede a regular expression literal in
    +    * javascript.
    +    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    +    * list, but I've removed ones that might be problematic when seen in
    +    * languages that don't support regular expression literals.
    +    *
    +    * <p>Specifically, I've removed any keywords that can't precede a regexp
    +    * literal in a syntactically legal javascript program, and I've removed the
    +    * "in" keyword since it's not a keyword in many languages, and might be used
    +    * as a count of inches.
    +    *
    +    * <p>The link a above does not accurately describe EcmaScript rules since
    +    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    +    * very well in practice.
    +    *
    +    * @private
    +    */
    +  var REGEXP_PRECEDER_PATTERN = function () {
    +      var preceders = [
    +          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    +          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    +          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    +          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    +          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    +          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    +          "||=", "~" /* handles =~ and !~ */,
    +          "break", "case", "continue", "delete",
    +          "do", "else", "finally", "instanceof",
    +          "return", "throw", "try", "typeof"
    +          ];
    +      var pattern = '(?:^^|[+-]';
    +      for (var i = 0; i < preceders.length; ++i) {
    +        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    +      }
    +      pattern += ')\\s*';  // matches at end, and matches empty string
    +      return pattern;
    +      // CAVEAT: this does not properly handle the case where a regular
    +      // expression immediately follows another since a regular expression may
    +      // have flags for case-sensitivity and the like.  Having regexp tokens
    +      // adjacent is not valid in any language I'm aware of, so I'm punting.
    +      // TODO: maybe style special characters inside a regexp as punctuation.
    +    }();
    +
    +  // Define regexps here so that the interpreter doesn't have to create an
    +  // object each time the function containing them is called.
    +  // The language spec requires a new object created even if you don't access
    +  // the $1 members.
    +  var pr_amp = /&/g;
    +  var pr_lt = /</g;
    +  var pr_gt = />/g;
    +  var pr_quot = /\"/g;
    +  /** like textToHtml but escapes double quotes to be attribute safe. */
    +  function attribToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;')
    +        .replace(pr_quot, '&quot;');
    +  }
    +
    +  /** escapest html special characters to html. */
    +  function textToHtml(str) {
    +    return str.replace(pr_amp, '&amp;')
    +        .replace(pr_lt, '&lt;')
    +        .replace(pr_gt, '&gt;');
    +  }
    +
    +
    +  var pr_ltEnt = /&lt;/g;
    +  var pr_gtEnt = /&gt;/g;
    +  var pr_aposEnt = /&apos;/g;
    +  var pr_quotEnt = /&quot;/g;
    +  var pr_ampEnt = /&amp;/g;
    +  var pr_nbspEnt = /&nbsp;/g;
    +  /** unescapes html to plain text. */
    +  function htmlToText(html) {
    +    var pos = html.indexOf('&');
    +    if (pos < 0) { return html; }
    +    // Handle numeric entities specially.  We can't use functional substitution
    +    // since that doesn't work in older versions of Safari.
    +    // These should be rare since most browsers convert them to normal chars.
    +    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    +      var end = html.indexOf(';', pos);
    +      if (end >= 0) {
    +        var num = html.substring(pos + 3, end);
    +        var radix = 10;
    +        if (num && num.charAt(0) === 'x') {
    +          num = num.substring(1);
    +          radix = 16;
    +        }
    +        var codePoint = parseInt(num, radix);
    +        if (!isNaN(codePoint)) {
    +          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    +                  html.substring(end + 1));
    +        }
    +      }
    +    }
    +
    +    return html.replace(pr_ltEnt, '<')
    +        .replace(pr_gtEnt, '>')
    +        .replace(pr_aposEnt, "'")
    +        .replace(pr_quotEnt, '"')
    +        .replace(pr_nbspEnt, ' ')
    +        .replace(pr_ampEnt, '&');
    +  }
    +
    +  /** is the given node's innerHTML normally unescaped? */
    +  function isRawContent(node) {
    +    return 'XMP' === node.tagName;
    +  }
    +
    +  var newlineRe = /[\r\n]/g;
    +  /**
    +   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    +   */
    +  function isPreformatted(node, content) {
    +    // PRE means preformatted, and is a very common case, so don't create
    +    // unnecessary computed style objects.
    +    if ('PRE' === node.tagName) { return true; }
    +    if (!newlineRe.test(content)) { return true; }  // Don't care
    +    var whitespace = '';
    +    // For disconnected nodes, IE has no currentStyle.
    +    if (node.currentStyle) {
    +      whitespace = node.currentStyle.whiteSpace;
    +    } else if (window.getComputedStyle) {
    +      // Firefox makes a best guess if node is disconnected whereas Safari
    +      // returns the empty string.
    +      whitespace = window.getComputedStyle(node, null).whiteSpace;
    +    }
    +    return !whitespace || whitespace === 'pre';
    +  }
    +
    +  function normalizedHtml(node, out, opt_sortAttrs) {
    +    switch (node.nodeType) {
    +      case 1:  // an element
    +        var name = node.tagName.toLowerCase();
    +
    +        out.push('<', name);
    +        var attrs = node.attributes;
    +        var n = attrs.length;
    +        if (n) {
    +          if (opt_sortAttrs) {
    +            var sortedAttrs = [];
    +            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    +            sortedAttrs.sort(function (a, b) {
    +                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    +              });
    +            attrs = sortedAttrs;
    +          }
    +          for (var i = 0; i < n; ++i) {
    +            var attr = attrs[i];
    +            if (!attr.specified) { continue; }
    +            out.push(' ', attr.name.toLowerCase(),
    +                     '="', attribToHtml(attr.value), '"');
    +          }
    +        }
    +        out.push('>');
    +        for (var child = node.firstChild; child; child = child.nextSibling) {
    +          normalizedHtml(child, out, opt_sortAttrs);
    +        }
    +        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    +          out.push('<\/', name, '>');
    +        }
    +        break;
    +      case 3: case 4: // text
    +        out.push(textToHtml(node.nodeValue));
    +        break;
    +    }
    +  }
    +
    +  /**
    +   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    +   * matches the union o the sets o strings matched d by the input RegExp.
    +   * Since it matches globally, if the input strings have a start-of-input
    +   * anchor (/^.../), it is ignored for the purposes of unioning.
    +   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    +   * @return {RegExp} a global regex.
    +   */
    +  function combinePrefixPatterns(regexs) {
    +    var capturedGroupIndex = 0;
    +
    +    var needToFoldCase = false;
    +    var ignoreCase = false;
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.ignoreCase) {
    +        ignoreCase = true;
    +      } else if (/[a-z]/i.test(regex.source.replace(
    +                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    +        needToFoldCase = true;
    +        ignoreCase = false;
    +        break;
    +      }
    +    }
    +
    +    function decodeEscape(charsetPart) {
    +      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    +      switch (charsetPart.charAt(1)) {
    +        case 'b': return 8;
    +        case 't': return 9;
    +        case 'n': return 0xa;
    +        case 'v': return 0xb;
    +        case 'f': return 0xc;
    +        case 'r': return 0xd;
    +        case 'u': case 'x':
    +          return parseInt(charsetPart.substring(2), 16)
    +              || charsetPart.charCodeAt(1);
    +        case '0': case '1': case '2': case '3': case '4':
    +        case '5': case '6': case '7':
    +          return parseInt(charsetPart.substring(1), 8);
    +        default: return charsetPart.charCodeAt(1);
    +      }
    +    }
    +
    +    function encodeEscape(charCode) {
    +      if (charCode < 0x20) {
    +        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    +      }
    +      var ch = String.fromCharCode(charCode);
    +      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    +        ch = '\\' + ch;
    +      }
    +      return ch;
    +    }
    +
    +    function caseFoldCharset(charSet) {
    +      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    +          new RegExp(
    +              '\\\\u[0-9A-Fa-f]{4}'
    +              + '|\\\\x[0-9A-Fa-f]{2}'
    +              + '|\\\\[0-3][0-7]{0,2}'
    +              + '|\\\\[0-7]{1,2}'
    +              + '|\\\\[\\s\\S]'
    +              + '|-'
    +              + '|[^-\\\\]',
    +              'g'));
    +      var groups = [];
    +      var ranges = [];
    +      var inverse = charsetParts[0] === '^';
    +      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    +        var p = charsetParts[i];
    +        switch (p) {
    +          case '\\B': case '\\b':
    +          case '\\D': case '\\d':
    +          case '\\S': case '\\s':
    +          case '\\W': case '\\w':
    +            groups.push(p);
    +            continue;
    +        }
    +        var start = decodeEscape(p);
    +        var end;
    +        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    +          end = decodeEscape(charsetParts[i + 2]);
    +          i += 2;
    +        } else {
    +          end = start;
    +        }
    +        ranges.push([start, end]);
    +        // If the range might intersect letters, then expand it.
    +        if (!(end < 65 || start > 122)) {
    +          if (!(end < 65 || start > 90)) {
    +            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    +          }
    +          if (!(end < 97 || start > 122)) {
    +            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    +          }
    +        }
    +      }
    +
    +      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    +      // -> [[1, 12], [14, 14], [16, 17]]
    +      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    +      var consolidatedRanges = [];
    +      var lastRange = [NaN, NaN];
    +      for (var i = 0; i < ranges.length; ++i) {
    +        var range = ranges[i];
    +        if (range[0] <= lastRange[1] + 1) {
    +          lastRange[1] = Math.max(lastRange[1], range[1]);
    +        } else {
    +          consolidatedRanges.push(lastRange = range);
    +        }
    +      }
    +
    +      var out = ['['];
    +      if (inverse) { out.push('^'); }
    +      out.push.apply(out, groups);
    +      for (var i = 0; i < consolidatedRanges.length; ++i) {
    +        var range = consolidatedRanges[i];
    +        out.push(encodeEscape(range[0]));
    +        if (range[1] > range[0]) {
    +          if (range[1] + 1 > range[0]) { out.push('-'); }
    +          out.push(encodeEscape(range[1]));
    +        }
    +      }
    +      out.push(']');
    +      return out.join('');
    +    }
    +
    +    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    +      // Split into character sets, escape sequences, punctuation strings
    +      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    +      // include any of the above.
    +      var parts = regex.source.match(
    +          new RegExp(
    +              '(?:'
    +              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    +              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    +              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    +              + '|\\\\[0-9]+'  // a back-reference or octal escape
    +              + '|\\\\[^ux0-9]'  // other escape sequence
    +              + '|\\(\\?[:!=]'  // start of a non-capturing group
    +              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    +              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    +              + ')',
    +              'g'));
    +      var n = parts.length;
    +
    +      // Maps captured group numbers to the number they will occupy in
    +      // the output or to -1 if that has not been determined, or to
    +      // undefined if they need not be capturing in the output.
    +      var capturedGroups = [];
    +
    +      // Walk over and identify back references to build the capturedGroups
    +      // mapping.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          // groups are 1-indexed, so max group index is count of '('
    +          ++groupIndex;
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            capturedGroups[decimalValue] = -1;
    +          }
    +        }
    +      }
    +
    +      // Renumber groups and reduce capturing groups to non-capturing groups
    +      // where possible.
    +      for (var i = 1; i < capturedGroups.length; ++i) {
    +        if (-1 === capturedGroups[i]) {
    +          capturedGroups[i] = ++capturedGroupIndex;
    +        }
    +      }
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        var p = parts[i];
    +        if (p === '(') {
    +          ++groupIndex;
    +          if (capturedGroups[groupIndex] === undefined) {
    +            parts[i] = '(?:';
    +          }
    +        } else if ('\\' === p.charAt(0)) {
    +          var decimalValue = +p.substring(1);
    +          if (decimalValue && decimalValue <= groupIndex) {
    +            parts[i] = '\\' + capturedGroups[groupIndex];
    +          }
    +        }
    +      }
    +
    +      // Remove any prefix anchors so that the output will match anywhere.
    +      // ^^ really does mean an anchored match though.
    +      for (var i = 0, groupIndex = 0; i < n; ++i) {
    +        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    +      }
    +
    +      // Expand letters to groupts to handle mixing of case-sensitive and
    +      // case-insensitive patterns if necessary.
    +      if (regex.ignoreCase && needToFoldCase) {
    +        for (var i = 0; i < n; ++i) {
    +          var p = parts[i];
    +          var ch0 = p.charAt(0);
    +          if (p.length >= 2 && ch0 === '[') {
    +            parts[i] = caseFoldCharset(p);
    +          } else if (ch0 !== '\\') {
    +            // TODO: handle letters in numeric escapes.
    +            parts[i] = p.replace(
    +                /[a-zA-Z]/g,
    +                function (ch) {
    +                  var cc = ch.charCodeAt(0);
    +                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    +                });
    +          }
    +        }
    +      }
    +
    +      return parts.join('');
    +    }
    +
    +    var rewritten = [];
    +    for (var i = 0, n = regexs.length; i < n; ++i) {
    +      var regex = regexs[i];
    +      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    +      rewritten.push(
    +          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    +    }
    +
    +    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    +  }
    +
    +  var PR_innerHtmlWorks = null;
    +  function getInnerHtml(node) {
    +    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    +    // an html description of well formed XML and the containing tag is a PRE
    +    // tag, so we detect that case and emulate innerHTML.
    +    if (null === PR_innerHtmlWorks) {
    +      var testNode = document.createElement('PRE');
    +      testNode.appendChild(
    +          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    +      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    +    }
    +
    +    if (PR_innerHtmlWorks) {
    +      var content = node.innerHTML;
    +      // XMP tags contain unescaped entities so require special handling.
    +      if (isRawContent(node)) {
    +        content = textToHtml(content);
    +      } else if (!isPreformatted(node, content)) {
    +        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    +            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    +      }
    +      return content;
    +    }
    +
    +    var out = [];
    +    for (var child = node.firstChild; child; child = child.nextSibling) {
    +      normalizedHtml(child, out);
    +    }
    +    return out.join('');
    +  }
    +
    +  /** returns a function that expand tabs to spaces.  This function can be fed
    +    * successive chunks of text, and will maintain its own internal state to
    +    * keep track of how tabs are expanded.
    +    * @return {function (string) : string} a function that takes
    +    *   plain text and return the text with tabs expanded.
    +    * @private
    +    */
    +  function makeTabExpander(tabWidth) {
    +    var SPACES = '                ';
    +    var charInLine = 0;
    +
    +    return function (plainText) {
    +      // walk over each character looking for tabs and newlines.
    +      // On tabs, expand them.  On newlines, reset charInLine.
    +      // Otherwise increment charInLine
    +      var out = null;
    +      var pos = 0;
    +      for (var i = 0, n = plainText.length; i < n; ++i) {
    +        var ch = plainText.charAt(i);
    +
    +        switch (ch) {
    +          case '\t':
    +            if (!out) { out = []; }
    +            out.push(plainText.substring(pos, i));
    +            // calculate how much space we need in front of this part
    +            // nSpaces is the amount of padding -- the number of spaces needed
    +            // to move us to the next column, where columns occur at factors of
    +            // tabWidth.
    +            var nSpaces = tabWidth - (charInLine % tabWidth);
    +            charInLine += nSpaces;
    +            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    +              out.push(SPACES.substring(0, nSpaces));
    +            }
    +            pos = i + 1;
    +            break;
    +          case '\n':
    +            charInLine = 0;
    +            break;
    +          default:
    +            ++charInLine;
    +        }
    +      }
    +      if (!out) { return plainText; }
    +      out.push(plainText.substring(pos));
    +      return out.join('');
    +    };
    +  }
    +
    +  var pr_chunkPattern = new RegExp(
    +      '[^<]+'  // A run of characters other than '<'
    +      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    +      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    +      // a probable tag that should not be highlighted
    +      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    +      + '|<',  // A '<' that does not begin a larger chunk
    +      'g');
    +  var pr_commentPrefix = /^<\!--/;
    +  var pr_cdataPrefix = /^<!\[CDATA\[/;
    +  var pr_brPrefix = /^<br\b/i;
    +  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    +
    +  /** split markup into chunks of html tags (style null) and
    +    * plain text (style {@link #PR_PLAIN}), converting tags which are
    +    * significant for tokenization (<br>) into their textual equivalent.
    +    *
    +    * @param {string} s html where whitespace is considered significant.
    +    * @return {Object} source code and extracted tags.
    +    * @private
    +    */
    +  function extractTags(s) {
    +    // since the pattern has the 'g' modifier and defines no capturing groups,
    +    // this will return a list of all chunks which we then classify and wrap as
    +    // PR_Tokens
    +    var matches = s.match(pr_chunkPattern);
    +    var sourceBuf = [];
    +    var sourceBufLen = 0;
    +    var extractedTags = [];
    +    if (matches) {
    +      for (var i = 0, n = matches.length; i < n; ++i) {
    +        var match = matches[i];
    +        if (match.length > 1 && match.charAt(0) === '<') {
    +          if (pr_commentPrefix.test(match)) { continue; }
    +          if (pr_cdataPrefix.test(match)) {
    +            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    +            sourceBuf.push(match.substring(9, match.length - 3));
    +            sourceBufLen += match.length - 12;
    +          } else if (pr_brPrefix.test(match)) {
    +            // <br> tags are lexically significant so convert them to text.
    +            // This is undone later.
    +            sourceBuf.push('\n');
    +            ++sourceBufLen;
    +          } else {
    +            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    +              // A <span class="nocode"> will start a section that should be
    +              // ignored.  Continue walking the list until we see a matching end
    +              // tag.
    +              var name = match.match(pr_tagNameRe)[2];
    +              var depth = 1;
    +              var j;
    +              end_tag_loop:
    +              for (j = i + 1; j < n; ++j) {
    +                var name2 = matches[j].match(pr_tagNameRe);
    +                if (name2 && name2[2] === name) {
    +                  if (name2[1] === '/') {
    +                    if (--depth === 0) { break end_tag_loop; }
    +                  } else {
    +                    ++depth;
    +                  }
    +                }
    +              }
    +              if (j < n) {
    +                extractedTags.push(
    +                    sourceBufLen, matches.slice(i, j + 1).join(''));
    +                i = j;
    +              } else {  // Ignore unclosed sections.
    +                extractedTags.push(sourceBufLen, match);
    +              }
    +            } else {
    +              extractedTags.push(sourceBufLen, match);
    +            }
    +          }
    +        } else {
    +          var literalText = htmlToText(match);
    +          sourceBuf.push(literalText);
    +          sourceBufLen += literalText.length;
    +        }
    +      }
    +    }
    +    return { source: sourceBuf.join(''), tags: extractedTags };
    +  }
    +
    +  /** True if the given tag contains a class attribute with the nocode class. */
    +  function isNoCodeTag(tag) {
    +    return !!tag
    +        // First canonicalize the representation of attributes
    +        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    +                 ' $1="$2$3$4"')
    +        // Then look for the attribute we want.
    +        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    +  }
    +
    +  /**
    +   * Apply the given language handler to sourceCode and add the resulting
    +   * decorations to out.
    +   * @param {number} basePos the index of sourceCode within the chunk of source
    +   *    whose decorations are already present on out.
    +   */
    +  function appendDecorations(basePos, sourceCode, langHandler, out) {
    +    if (!sourceCode) { return; }
    +    var job = {
    +      source: sourceCode,
    +      basePos: basePos
    +    };
    +    langHandler(job);
    +    out.push.apply(out, job.decorations);
    +  }
    +
    +  /** Given triples of [style, pattern, context] returns a lexing function,
    +    * The lexing function interprets the patterns to find token boundaries and
    +    * returns a decoration list of the form
    +    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    +    * where index_n is an index into the sourceCode, and style_n is a style
    +    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    +    * all characters in sourceCode[index_n-1:index_n].
    +    *
    +    * The stylePatterns is a list whose elements have the form
    +    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    +    *
    +    * Style is a style constant like PR_PLAIN, or can be a string of the
    +    * form 'lang-FOO', where FOO is a language extension describing the
    +    * language of the portion of the token in $1 after pattern executes.
    +    * E.g., if style is 'lang-lisp', and group 1 contains the text
    +    * '(hello (world))', then that portion of the token will be passed to the
    +    * registered lisp handler for formatting.
    +    * The text before and after group 1 will be restyled using this decorator
    +    * so decorators should take care that this doesn't result in infinite
    +    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    +    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    +    * '<script>foo()<\/script>', which would cause the current decorator to
    +    * be called with '<script>' which would not match the same rule since
    +    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    +    * the generic tag rule.  The handler registered for the 'js' extension would
    +    * then be called with 'foo()', and finally, the current decorator would
    +    * be called with '<\/script>' which would not match the original rule and
    +    * so the generic tag rule would identify it as a tag.
    +    *
    +    * Pattern must only match prefixes, and if it matches a prefix, then that
    +    * match is considered a token with the same style.
    +    *
    +    * Context is applied to the last non-whitespace, non-comment token
    +    * recognized.
    +    *
    +    * Shortcut is an optional string of characters, any of which, if the first
    +    * character, gurantee that this pattern and only this pattern matches.
    +    *
    +    * @param {Array} shortcutStylePatterns patterns that always start with
    +    *   a known character.  Must have a shortcut string.
    +    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    +    *   order if the shortcut ones fail.  May have shortcuts.
    +    *
    +    * @return {function (Object)} a
    +    *   function that takes source code and returns a list of decorations.
    +    */
    +  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    +    var shortcuts = {};
    +    var tokenizer;
    +    (function () {
    +      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    +      var allRegexs = [];
    +      var regexKeys = {};
    +      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    +        var patternParts = allPatterns[i];
    +        var shortcutChars = patternParts[3];
    +        if (shortcutChars) {
    +          for (var c = shortcutChars.length; --c >= 0;) {
    +            shortcuts[shortcutChars.charAt(c)] = patternParts;
    +          }
    +        }
    +        var regex = patternParts[1];
    +        var k = '' + regex;
    +        if (!regexKeys.hasOwnProperty(k)) {
    +          allRegexs.push(regex);
    +          regexKeys[k] = null;
    +        }
    +      }
    +      allRegexs.push(/[\0-\uffff]/);
    +      tokenizer = combinePrefixPatterns(allRegexs);
    +    })();
    +
    +    var nPatterns = fallthroughStylePatterns.length;
    +    var notWs = /\S/;
    +
    +    /**
    +     * Lexes job.source and produces an output array job.decorations of style
    +     * classes preceded by the position at which they start in job.source in
    +     * order.
    +     *
    +     * @param {Object} job an object like {@code
    +     *    source: {string} sourceText plain text,
    +     *    basePos: {int} position of job.source in the larger chunk of
    +     *        sourceCode.
    +     * }
    +     */
    +    var decorate = function (job) {
    +      var sourceCode = job.source, basePos = job.basePos;
    +      /** Even entries are positions in source in ascending order.  Odd enties
    +        * are style markers (e.g., PR_COMMENT) that run from that position until
    +        * the end.
    +        * @type {Array.<number|string>}
    +        */
    +      var decorations = [basePos, PR_PLAIN];
    +      var pos = 0;  // index into sourceCode
    +      var tokens = sourceCode.match(tokenizer) || [];
    +      var styleCache = {};
    +
    +      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    +        var token = tokens[ti];
    +        var style = styleCache[token];
    +        var match = void 0;
    +
    +        var isEmbedded;
    +        if (typeof style === 'string') {
    +          isEmbedded = false;
    +        } else {
    +          var patternParts = shortcuts[token.charAt(0)];
    +          if (patternParts) {
    +            match = token.match(patternParts[1]);
    +            style = patternParts[0];
    +          } else {
    +            for (var i = 0; i < nPatterns; ++i) {
    +              patternParts = fallthroughStylePatterns[i];
    +              match = token.match(patternParts[1]);
    +              if (match) {
    +                style = patternParts[0];
    +                break;
    +              }
    +            }
    +
    +            if (!match) {  // make sure that we make progress
    +              style = PR_PLAIN;
    +            }
    +          }
    +
    +          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    +          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    +            isEmbedded = false;
    +            style = PR_SOURCE;
    +          }
    +
    +          if (!isEmbedded) { styleCache[token] = style; }
    +        }
    +
    +        var tokenStart = pos;
    +        pos += token.length;
    +
    +        if (!isEmbedded) {
    +          decorations.push(basePos + tokenStart, style);
    +        } else {  // Treat group 1 as an embedded block of source code.
    +          var embeddedSource = match[1];
    +          var embeddedSourceStart = token.indexOf(embeddedSource);
    +          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    +          if (match[2]) {
    +            // If embeddedSource can be blank, then it would match at the
    +            // beginning which would cause us to infinitely recurse on the
    +            // entire token, so we catch the right context in match[2].
    +            embeddedSourceEnd = token.length - match[2].length;
    +            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    +          }
    +          var lang = style.substring(5);
    +          // Decorate the left of the embedded source
    +          appendDecorations(
    +              basePos + tokenStart,
    +              token.substring(0, embeddedSourceStart),
    +              decorate, decorations);
    +          // Decorate the embedded source
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceStart,
    +              embeddedSource,
    +              langHandlerForExtension(lang, embeddedSource),
    +              decorations);
    +          // Decorate the right of the embedded section
    +          appendDecorations(
    +              basePos + tokenStart + embeddedSourceEnd,
    +              token.substring(embeddedSourceEnd),
    +              decorate, decorations);
    +        }
    +      }
    +      job.decorations = decorations;
    +    };
    +    return decorate;
    +  }
    +
    +  /** returns a function that produces a list of decorations from source text.
    +    *
    +    * This code treats ", ', and ` as string delimiters, and \ as a string
    +    * escape.  It does not recognize perl's qq() style strings.
    +    * It has no special handling for double delimiter escapes as in basic, or
    +    * the tripled delimiters used in python, but should work on those regardless
    +    * although in those cases a single string literal may be broken up into
    +    * multiple adjacent string literals.
    +    *
    +    * It recognizes C, C++, and shell style comments.
    +    *
    +    * @param {Object} options a set of optional parameters.
    +    * @return {function (Object)} a function that examines the source code
    +    *     in the input job and builds the decoration list.
    +    */
    +  function sourceDecorator(options) {
    +    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    +    if (options['tripleQuotedStrings']) {
    +      // '''multi-line-string''', 'single-line-string', and double-quoted
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    +           null, '\'"']);
    +    } else if (options['multiLineStrings']) {
    +      // 'multi-line-string', "multi-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    +           null, '\'"`']);
    +    } else {
    +      // 'single-line-string', "single-line-string"
    +      shortcutStylePatterns.push(
    +          [PR_STRING,
    +           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    +           null, '"\'']);
    +    }
    +    if (options['verbatimStrings']) {
    +      // verbatim-string-literal production from the C# grammar.  See issue 93.
    +      fallthroughStylePatterns.push(
    +          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    +    }
    +    if (options['hashComments']) {
    +      if (options['cStyleComments']) {
    +        // Stop C preprocessor declarations at an unclosed open comment
    +        shortcutStylePatterns.push(
    +            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    +             null, '#']);
    +        fallthroughStylePatterns.push(
    +            [PR_STRING,
    +             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    +             null]);
    +      } else {
    +        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    +      }
    +    }
    +    if (options['cStyleComments']) {
    +      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    +      fallthroughStylePatterns.push(
    +          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    +    }
    +    if (options['regexLiterals']) {
    +      var REGEX_LITERAL = (
    +          // A regular expression literal starts with a slash that is
    +          // not followed by * or / so that it is not confused with
    +          // comments.
    +          '/(?=[^/*])'
    +          // and then contains any number of raw characters,
    +          + '(?:[^/\\x5B\\x5C]'
    +          // escape sequences (\x5C),
    +          +    '|\\x5C[\\s\\S]'
    +          // or non-nesting character sets (\x5B\x5D);
    +          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    +          // finally closed by a /.
    +          + '/');
    +      fallthroughStylePatterns.push(
    +          ['lang-regex',
    +           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    +           ]);
    +    }
    +
    +    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    +    if (keywords.length) {
    +      fallthroughStylePatterns.push(
    +          [PR_KEYWORD,
    +           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    +    }
    +
    +    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    +    fallthroughStylePatterns.push(
    +        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    +        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    +        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    +        [PR_LITERAL,
    +         new RegExp(
    +             '^(?:'
    +             // A hex number
    +             + '0x[a-f0-9]+'
    +             // or an octal or decimal number,
    +             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    +             // possibly in scientific notation
    +             + '(?:e[+\\-]?\\d+)?'
    +             + ')'
    +             // with an optional modifier like UL for unsigned long
    +             + '[a-z]*', 'i'),
    +         null, '0123456789'],
    +        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    +
    +    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    +  }
    +
    +  var decorateSource = sourceDecorator({
    +        'keywords': ALL_KEYWORDS,
    +        'hashComments': true,
    +        'cStyleComments': true,
    +        'multiLineStrings': true,
    +        'regexLiterals': true
    +      });
    +
    +  /** Breaks {@code job.source} around style boundaries in
    +    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    +    * and leaves the result in {@code job.prettyPrintedHtml}.
    +    * @param {Object} job like {
    +    *    source: {string} source as plain text,
    +    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    +    *                   html preceded by their position in {@code job.source}
    +    *                   in order
    +    *    decorations: {Array.<number|string} an array of style classes preceded
    +    *                 by the position at which they start in job.source in order
    +    * }
    +    * @private
    +    */
    +  function recombineTagsAndDecorations(job) {
    +    var sourceText = job.source;
    +    var extractedTags = job.extractedTags;
    +    var decorations = job.decorations;
    +
    +    var html = [];
    +    // index past the last char in sourceText written to html
    +    var outputIdx = 0;
    +
    +    var openDecoration = null;
    +    var currentDecoration = null;
    +    var tagPos = 0;  // index into extractedTags
    +    var decPos = 0;  // index into decorations
    +    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    +
    +    var adjacentSpaceRe = /([\r\n ]) /g;
    +    var startOrSpaceRe = /(^| ) /gm;
    +    var newlineRe = /\r\n?|\n/g;
    +    var trailingSpaceRe = /[ \r\n]$/;
    +    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    +
    +    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    +    var isIE678 = window['_pr_isIE6']();
    +    var lineBreakHtml = (
    +        isIE678
    +        ? (job.sourceNode.tagName === 'PRE'
    +           // Use line feeds instead of <br>s so that copying and pasting works
    +           // on IE.
    +           // Doing this on other browsers breaks lots of stuff since \r\n is
    +           // treated as two newlines on Firefox.
    +           ? (isIE678 === 6 ? '&#160;\r\n' :
    +              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    +           // IE collapses multiple adjacent <br>s into 1 line break.
    +           // Prefix every newline with '&#160;' to prevent such behavior.
    +           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    +           : '&#160;<br />')
    +        : '<br />');
    +
    +    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    +    // number of the first line.
    +    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    +    var lineBreaker;
    +    if (numberLines) {
    +      var lineBreaks = [];
    +      for (var i = 0; i < 10; ++i) {
    +        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    +      }
    +      var lineNum = numberLines[1] && numberLines[1].length
    +          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    +      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    +      if (lineNum) {
    +        html.push(' value="', lineNum + 1, '"');
    +      }
    +      html.push('>');
    +      lineBreaker = function () {
    +        var lb = lineBreaks[++lineNum % 10];
    +        // If a decoration is open, we need to close it before closing a list-item
    +        // and reopen it on the other side of the list item.
    +        return openDecoration
    +            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    +      };
    +    } else {
    +      lineBreaker = lineBreakHtml;
    +    }
    +
    +    // A helper function that is responsible for opening sections of decoration
    +    // and outputing properly escaped chunks of source
    +    function emitTextUpTo(sourceIdx) {
    +      if (sourceIdx > outputIdx) {
    +        if (openDecoration && openDecoration !== currentDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        if (!openDecoration && currentDecoration) {
    +          openDecoration = currentDecoration;
    +          html.push('<span class="', openDecoration, '">');
    +        }
    +        // This interacts badly with some wikis which introduces paragraph tags
    +        // into pre blocks for some strange reason.
    +        // It's necessary for IE though which seems to lose the preformattedness
    +        // of <pre> tags when their innerHTML is assigned.
    +        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    +        // and it serves to undo the conversion of <br>s to newlines done in
    +        // chunkify.
    +        var htmlChunk = textToHtml(
    +            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    +            .replace(lastWasSpace
    +                     ? startOrSpaceRe
    +                     : adjacentSpaceRe, '$1&#160;');
    +        // Keep track of whether we need to escape space at the beginning of the
    +        // next chunk.
    +        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    +        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    +        outputIdx = sourceIdx;
    +      }
    +    }
    +
    +    while (true) {
    +      // Determine if we're going to consume a tag this time around.  Otherwise
    +      // we consume a decoration or exit.
    +      var outputTag;
    +      if (tagPos < extractedTags.length) {
    +        if (decPos < decorations.length) {
    +          // Pick one giving preference to extractedTags since we shouldn't open
    +          // a new style that we're going to have to immediately close in order
    +          // to output a tag.
    +          outputTag = extractedTags[tagPos] <= decorations[decPos];
    +        } else {
    +          outputTag = true;
    +        }
    +      } else {
    +        outputTag = false;
    +      }
    +      // Consume either a decoration or a tag or exit.
    +      if (outputTag) {
    +        emitTextUpTo(extractedTags[tagPos]);
    +        if (openDecoration) {
    +          // Close the current decoration
    +          html.push('</span>');
    +          openDecoration = null;
    +        }
    +        html.push(extractedTags[tagPos + 1]);
    +        tagPos += 2;
    +      } else if (decPos < decorations.length) {
    +        emitTextUpTo(decorations[decPos]);
    +        currentDecoration = decorations[decPos + 1];
    +        decPos += 2;
    +      } else {
    +        break;
    +      }
    +    }
    +    emitTextUpTo(sourceText.length);
    +    if (openDecoration) {
    +      html.push('</span>');
    +    }
    +    if (numberLines) { html.push('</li></ol>'); }
    +    job.prettyPrintedHtml = html.join('');
    +  }
    +
    +  /** Maps language-specific file extensions to handlers. */
    +  var langHandlerRegistry = {};
    +  /** Register a language handler for the given file extensions.
    +    * @param {function (Object)} handler a function from source code to a list
    +    *      of decorations.  Takes a single argument job which describes the
    +    *      state of the computation.   The single parameter has the form
    +    *      {@code {
    +    *        source: {string} as plain text.
    +    *        decorations: {Array.<number|string>} an array of style classes
    +    *                     preceded by the position at which they start in
    +    *                     job.source in order.
    +    *                     The language handler should assigned this field.
    +    *        basePos: {int} the position of source in the larger source chunk.
    +    *                 All positions in the output decorations array are relative
    +    *                 to the larger source chunk.
    +    *      } }
    +    * @param {Array.<string>} fileExtensions
    +    */
    +  function registerLangHandler(handler, fileExtensions) {
    +    for (var i = fileExtensions.length; --i >= 0;) {
    +      var ext = fileExtensions[i];
    +      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    +        langHandlerRegistry[ext] = handler;
    +      } else if ('console' in window) {
    +        console['warn']('cannot override language handler %s', ext);
    +      }
    +    }
    +  }
    +  function langHandlerForExtension(extension, source) {
    +    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    +      // Treat it as markup if the first non whitespace character is a < and
    +      // the last non-whitespace character is a >.
    +      extension = /^\s*</.test(source)
    +          ? 'default-markup'
    +          : 'default-code';
    +    }
    +    return langHandlerRegistry[extension];
    +  }
    +  registerLangHandler(decorateSource, ['default-code']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [],
    +          [
    +           [PR_PLAIN,       /^[^<?]+/],
    +           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    +           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    +           // Unescaped content in an unknown language
    +           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    +           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    +           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    +           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    +           // Unescaped content in javascript.  (Or possibly vbscript).
    +           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    +           // Contains unescaped stylesheet content
    +           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    +           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    +          ]),
    +      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    +  registerLangHandler(
    +      createSimpleLexer(
    +          [
    +           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    +           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    +           ],
    +          [
    +           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    +           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    +           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    +           [PR_PUNCTUATION,  /^[=<>\/]+/],
    +           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    +           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    +           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    +           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    +           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    +           ]),
    +      ['in.tag']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CPP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true
    +        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': 'null true false'
    +        }), ['json']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': CSHARP_KEYWORDS,
    +          'hashComments': true,
    +          'cStyleComments': true,
    +          'verbatimStrings': true
    +        }), ['cs']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JAVA_KEYWORDS,
    +          'cStyleComments': true
    +        }), ['java']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': SH_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true
    +        }), ['bsh', 'csh', 'sh']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PYTHON_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'tripleQuotedStrings': true
    +        }), ['cv', 'py']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': PERL_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['perl', 'pl', 'pm']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': RUBY_KEYWORDS,
    +          'hashComments': true,
    +          'multiLineStrings': true,
    +          'regexLiterals': true
    +        }), ['rb']);
    +  registerLangHandler(sourceDecorator({
    +          'keywords': JSCRIPT_KEYWORDS,
    +          'cStyleComments': true,
    +          'regexLiterals': true
    +        }), ['js']);
    +  registerLangHandler(
    +      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    +
    +  function applyDecorator(job) {
    +    var sourceCodeHtml = job.sourceCodeHtml;
    +    var opt_langExtension = job.langExtension;
    +
    +    // Prepopulate output in case processing fails with an exception.
    +    job.prettyPrintedHtml = sourceCodeHtml;
    +
    +    try {
    +      // Extract tags, and convert the source code to plain text.
    +      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    +      /** Plain text. @type {string} */
    +      var source = sourceAndExtractedTags.source;
    +      job.source = source;
    +      job.basePos = 0;
    +
    +      /** Even entries are positions in source in ascending order.  Odd entries
    +        * are tags that were extracted at that position.
    +        * @type {Array.<number|string>}
    +        */
    +      job.extractedTags = sourceAndExtractedTags.tags;
    +
    +      // Apply the appropriate language handler
    +      langHandlerForExtension(opt_langExtension, source)(job);
    +      // Integrate the decorations and tags back into the source code to produce
    +      // a decorated html string which is left in job.prettyPrintedHtml.
    +      recombineTagsAndDecorations(job);
    +    } catch (e) {
    +      if ('console' in window) {
    +        console['log'](e && e['stack'] ? e['stack'] : e);
    +      }
    +    }
    +  }
    +
    +  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    +    var job = {
    +      sourceCodeHtml: sourceCodeHtml,
    +      langExtension: opt_langExtension
    +    };
    +    applyDecorator(job);
    +    return job.prettyPrintedHtml;
    +  }
    +
    +  function prettyPrint(opt_whenDone) {
    +    function byTagName(tn) { return document.getElementsByTagName(tn); }
    +    // fetch a list of nodes to rewrite
    +    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    +    var elements = [];
    +    for (var i = 0; i < codeSegments.length; ++i) {
    +      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    +        elements.push(codeSegments[i][j]);
    +      }
    +    }
    +    codeSegments = null;
    +
    +    var clock = Date;
    +    if (!clock['now']) {
    +      clock = { 'now': function () { return (new Date).getTime(); } };
    +    }
    +
    +    // The loop is broken into a series of continuations to make sure that we
    +    // don't make the browser unresponsive when rewriting a large page.
    +    var k = 0;
    +    var prettyPrintingJob;
    +
    +    function doWork() {
    +      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    +                     clock.now() + 250 /* ms */ :
    +                     Infinity);
    +      for (; k < elements.length && clock.now() < endTime; k++) {
    +        var cs = elements[k];
    +        // [JACOCO] 'prettyprint' -> 'source'
    +        if (cs.className && cs.className.indexOf('source') >= 0) {
    +          // If the classes includes a language extensions, use it.
    +          // Language extensions can be specified like
    +          //     <pre class="prettyprint lang-cpp">
    +          // the language extension "cpp" is used to find a language handler as
    +          // passed to PR_registerLangHandler.
    +          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    +          if (langExtension) { langExtension = langExtension[1]; }
    +
    +          // make sure this is not nested in an already prettified element
    +          var nested = false;
    +          for (var p = cs.parentNode; p; p = p.parentNode) {
    +            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    +                 p.tagName === 'xmp') &&
    +                // [JACOCO] 'prettyprint' -> 'source'
    +                p.className && p.className.indexOf('source') >= 0) {
    +              nested = true;
    +              break;
    +            }
    +          }
    +          if (!nested) {
    +            // fetch the content as a snippet of properly escaped HTML.
    +            // Firefox adds newlines at the end.
    +            var content = getInnerHtml(cs);
    +            content = content.replace(/(?:\r\n?|\n)$/, '');
    +
    +            // do the pretty printing
    +            prettyPrintingJob = {
    +              sourceCodeHtml: content,
    +              langExtension: langExtension,
    +              sourceNode: cs
    +            };
    +            applyDecorator(prettyPrintingJob);
    +            replaceWithPrettyPrintedHtml();
    +          }
    +        }
    +      }
    +      if (k < elements.length) {
    +        // finish up in a continuation
    +        setTimeout(doWork, 250);
    +      } else if (opt_whenDone) {
    +        opt_whenDone();
    +      }
    +    }
    +
    +    function replaceWithPrettyPrintedHtml() {
    +      var newContent = prettyPrintingJob.prettyPrintedHtml;
    +      if (!newContent) { return; }
    +      var cs = prettyPrintingJob.sourceNode;
    +
    +      // push the prettified html back into the tag.
    +      if (!isRawContent(cs)) {
    +        // just replace the old html with the new
    +        cs.innerHTML = newContent;
    +      } else {
    +        // we need to change the tag to a <pre> since <xmp>s do not allow
    +        // embedded tags such as the span tags used to attach styles to
    +        // sections of source code.
    +        var pre = document.createElement('PRE');
    +        for (var i = 0; i < cs.attributes.length; ++i) {
    +          var a = cs.attributes[i];
    +          if (a.specified) {
    +            var aname = a.name.toLowerCase();
    +            if (aname === 'class') {
    +              pre.className = a.value;  // For IE 6
    +            } else {
    +              pre.setAttribute(a.name, a.value);
    +            }
    +          }
    +        }
    +        pre.innerHTML = newContent;
    +
    +        // remove the old
    +        cs.parentNode.replaceChild(pre, cs);
    +        cs = pre;
    +      }
    +    }
    +
    +    doWork();
    +  }
    +
    +  window['PR_normalizedHtml'] = normalizedHtml;
    +  window['prettyPrintOne'] = prettyPrintOne;
    +  window['prettyPrint'] = prettyPrint;
    +  window['PR'] = {
    +        'combinePrefixPatterns': combinePrefixPatterns,
    +        'createSimpleLexer': createSimpleLexer,
    +        'registerLangHandler': registerLangHandler,
    +        'sourceDecorator': sourceDecorator,
    +        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    +        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    +        'PR_COMMENT': PR_COMMENT,
    +        'PR_DECLARATION': PR_DECLARATION,
    +        'PR_KEYWORD': PR_KEYWORD,
    +        'PR_LITERAL': PR_LITERAL,
    +        'PR_NOCODE': PR_NOCODE,
    +        'PR_PLAIN': PR_PLAIN,
    +        'PR_PUNCTUATION': PR_PUNCTUATION,
    +        'PR_SOURCE': PR_SOURCE,
    +        'PR_STRING': PR_STRING,
    +        'PR_TAG': PR_TAG,
    +        'PR_TYPE': PR_TYPE
    +      };
    +})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..c2f71469ba995289439d86ea39b1b33edb03388c
    GIT binary patch
    literal 91
    zcmZ?wbhEHbWMtrCc+AD{pP&D~tn7aso&R25|6^nS*Vg{;>G{84!T)8;{;yfXu$BQ0
    fDgI<(<YM4w&|v@qkQodt90ol_LPjnP91PX~3&9+X
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    new file mode 100644
    index 00000000..dd936bca
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    @@ -0,0 +1,243 @@
    +body, td {
    +  font-family:sans-serif;
    +  font-size:10pt;
    +}
    +
    +h1 {
    +  font-weight:bold;
    +  font-size:18pt;
    +}
    +
    +.breadcrumb {
    +  border:#d6d3ce 1px solid;
    +  padding:2px 4px 2px 4px;
    +}
    +
    +.breadcrumb .info {
    +  float:right;
    +}
    +
    +.breadcrumb .info a {
    +  margin-left:8px;
    +}
    +
    +.el_report {
    +  padding-left:18px;
    +  background-image:url(report.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_group {
    +  padding-left:18px;
    +  background-image:url(group.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_bundle {
    +  padding-left:18px;
    +  background-image:url(bundle.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_package {
    +  padding-left:18px;
    +  background-image:url(package.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_class {
    +  padding-left:18px;
    +  background-image:url(class.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_source {
    +  padding-left:18px;
    +  background-image:url(source.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_method {
    +  padding-left:18px;
    +  background-image:url(method.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +.el_session {
    +  padding-left:18px;
    +  background-image:url(session.gif);
    +  background-position:left center;
    +  background-repeat:no-repeat;
    +}
    +
    +pre.source {
    +  border:#d6d3ce 1px solid;
    +  font-family:monospace;
    +}
    +
    +pre.source ol {
    +  margin-bottom: 0px;
    +  margin-top: 0px;
    +}
    +
    +pre.source li {
    +  border-left: 1px solid #D6D3CE;
    +  color: #A0A0A0;
    +  padding-left: 0px;
    +}
    +
    +pre.source span.fc {
    +  background-color:#ccffcc;
    +}
    +
    +pre.source span.nc {
    +  background-color:#ffaaaa;
    +}
    +
    +pre.source span.pc {
    +  background-color:#ffffcc;
    +}
    +
    +pre.source span.bfc {
    +  background-image: url(branchfc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bfc:hover {
    +  background-color:#80ff80;
    +}
    +
    +pre.source span.bnc {
    +  background-image: url(branchnc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bnc:hover {
    +  background-color:#ff8080;
    +}
    +
    +pre.source span.bpc {
    +  background-image: url(branchpc.gif);
    +  background-repeat: no-repeat;
    +  background-position: 2px center;
    +}
    +
    +pre.source span.bpc:hover {
    +  background-color:#ffff80;
    +}
    +
    +table.coverage {
    +  empty-cells:show;
    +  border-collapse:collapse;
    +}
    +
    +table.coverage thead {
    +  background-color:#e0e0e0;
    +}
    +
    +table.coverage thead td {
    +  white-space:nowrap;
    +  padding:2px 14px 0px 6px;
    +  border-bottom:#b0b0b0 1px solid;
    +}
    +
    +table.coverage thead td.bar {
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr1 {
    +  text-align:right;
    +  border-left:#cccccc 1px solid;
    +}
    +
    +table.coverage thead td.ctr2 {
    +  text-align:right;
    +  padding-left:2px;
    +}
    +
    +table.coverage thead td.sortable {
    +  cursor:pointer;
    +  background-image:url(sort.gif);
    +  background-position:right center;
    +  background-repeat:no-repeat;
    +}
    +
    +table.coverage thead td.up {
    +  background-image:url(up.gif);
    +}
    +
    +table.coverage thead td.down {
    +  background-image:url(down.gif);
    +}
    +
    +table.coverage tbody td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +  border-bottom:#d6d3ce 1px solid;
    +}
    +
    +table.coverage tbody tr:hover {
    +  background: #f0f0d0 !important;
    +}
    +
    +table.coverage tbody td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tbody td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +table.coverage tfoot td {
    +  white-space:nowrap;
    +  padding:2px 6px 2px 6px;
    +}
    +
    +table.coverage tfoot td.bar {
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr1 {
    +  text-align:right;
    +  padding-right:14px;
    +  border-left:#e8e8e8 1px solid;
    +}
    +
    +table.coverage tfoot td.ctr2 {
    +  text-align:right;
    +  padding-right:14px;
    +  padding-left:2px;
    +}
    +
    +.footer {
    +  margin-top:20px;
    +  border-top:#d6d3ce 1px solid;
    +  padding-top:2px;
    +  font-size:8pt;
    +  color:#a0a0a0;
    +}
    +
    +.footer a {
    +  color:#a0a0a0;
    +}
    +
    +.right {
    +  float:right;
    +}
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..8547be50bf3e97e725920927b5aa4cdb031f4823
    GIT binary patch
    literal 363
    zcmZ?wbhEHb6krfwSZc{In}J~s1H&!`1_uX+xVSjMb&S>db~X8S)dhAn1$OlXwvB~0
    zO@%hC#Wq5_7&^+V`^qgRRa;E2HJ?*&DsqWoev|2fCetO&CQDmPR<;_iXfs~ZZnVC`
    za8s8-+pK*(^AAm4c5K#~(^ocST-lU)byMc8y)_R`^xu2&{oaco_g{R!|Ki8Pmp>lA
    z{_*VHkC*R%zWMa)!{^_hzyAL8?f2(zzrTL}{q@K1Z$Ey2|M}<VuRs5>0mYvzj9d)%
    z3_1)z0P+(9TgQR<1s*zF)+bahX*_u_??Pbv&V#KE^V2&`bhGjjR;*MxC8EFO_3_}<
    zH?w9WrJ7AX`tJM8r525X{~8+WorLsRL^?W{nR=L*odosT`KItOGtTI963}JgV_m??
    z%&>&9-=1G*^3>@wm-A|~FmK+nbvd`DhNhP0UUhXIS1vYAPL5-o?Ce}VXI&i`tO1G(
    BvdRDe
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..0151bad8a001e5cc5cc7723a608185f746b7f8c1
    GIT binary patch
    literal 213
    zcmZ?wbhEHb6krfwXc1xPS$gU4xw~t2pG#?5#^Be>V3WrXI-S9<hrzA(|Nr^_@5k?-
    zZ~y=IhyVNSXZ04}pKqV%t9oe5k~tY+Ar=Pzi2#Z}Sr{1@<Qa4rfB<AC18dL&^}dwM
    zX_r*ys<8N;e6mS?i^dP8jVmAd@U^}&$uv>xc~m$hYN?d{@xrG~CzZCfhpBIRC}Q>I
    kiQ?_Ai=3VZEOFW9fBwaksdwMK(Err)E%VcVRYeAC06w^MK>z>%
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..6757c2c32b57d768f3c12c4ae99a28bc32c9cbd7
    GIT binary patch
    literal 58
    zcmZ?wbhEHb<YC}qXkcX6uwldh|Nj+#vM_QnFf!;c00|xjP6h@h!JfpGjC*fB>i!bx
    N`t(%z_h<$NYXI&b5{m!;
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    new file mode 100644
    index 00000000..9dcb0e8b
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    @@ -0,0 +1,148 @@
    +/*******************************************************************************
    + * Copyright (c) 2009, 2024 Mountainminds GmbH & Co. KG and Contributors
    + * This program and the accompanying materials are made available under
    + * the terms of the Eclipse Public License 2.0 which is available at
    + * http://www.eclipse.org/legal/epl-2.0
    + *
    + * SPDX-License-Identifier: EPL-2.0
    + *
    + * Contributors:
    + *    Marc R. Hoffmann - initial API and implementation
    + *
    + *******************************************************************************/
    +
    +(function () {
    +
    +  /**
    +   * Sets the initial sorting derived from the hash.
    +   *
    +   * @param linkelementids
    +   *          list of element ids to search for links to add sort inidcator
    +   *          hash links
    +   */
    +  function initialSort(linkelementids) {
    +    window.linkelementids = linkelementids;
    +    var hash = window.location.hash;
    +    if (hash) {
    +      var m = hash.match(/up-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, true);
    +        }
    +        return;
    +      }
    +      var m = hash.match(/dn-./);
    +      if (m) {
    +        var header = window.document.getElementById(m[0].charAt(3));
    +        if (header) {
    +          sortColumn(header, false);
    +        }
    +        return
    +      }
    +    }
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header dependening on the current sort state.
    +   */
    +  function toggleSort(header) {
    +    var sortup = header.className.indexOf('down ') == 0;
    +    sortColumn(header, sortup);
    +  }
    +
    +  /**
    +   * Sorts the columns with the given header in the given direction.
    +   */
    +  function sortColumn(header, sortup) {
    +    var table = header.parentNode.parentNode.parentNode;
    +    var body = table.tBodies[0];
    +    var colidx = getNodePosition(header);
    +
    +    resetSortedStyle(table);
    +
    +    var rows = body.rows;
    +    var sortedrows = [];
    +    for (var i = 0; i < rows.length; i++) {
    +      r = rows[i];
    +      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    +    }
    +
    +    var hash;
    +
    +    if (sortup) {
    +      for (var i = sortedrows.length - 1; i >= 0; i--) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'up ' + header.className;
    +      hash = 'up-' + header.id;
    +    } else {
    +      for (var i = 0; i < sortedrows.length; i++) {
    +        body.appendChild(sortedrows[i]);
    +      }
    +      header.className = 'down ' + header.className;
    +      hash = 'dn-' + header.id;
    +    }
    +
    +    setHash(hash);
    +  }
    +
    +  /**
    +   * Adds the sort indicator as a hash to the document URL and all links.
    +   */
    +  function setHash(hash) {
    +    window.document.location.hash = hash;
    +    ids = window.linkelementids;
    +    for (var i = 0; i < ids.length; i++) {
    +        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    +    }
    +  }
    +
    +  /**
    +   * Extend all links within the given tag with the given hash.
    +   */
    +  function setHashOnAllLinks(tag, hash) {
    +    links = tag.getElementsByTagName("a");
    +    for (var i = 0; i < links.length; i++) {
    +        var a = links[i];
    +        var href = a.href;
    +        var hashpos = href.indexOf("#");
    +        if (hashpos != -1) {
    +            href = href.substring(0, hashpos);
    +        }
    +        a.href = href + "#" + hash;
    +    }
    +  }
    +
    +  /**
    +   * Calculates the position of a element within its parent.
    +   */
    +  function getNodePosition(element) {
    +    var pos = -1;
    +    while (element) {
    +      element = element.previousSibling;
    +      pos++;
    +    }
    +    return pos;
    +  }
    +
    +  /**
    +   * Remove the sorting indicator style from all headers.
    +   */
    +  function resetSortedStyle(table) {
    +    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    +      if (c.className) {
    +        if (c.className.indexOf('down ') == 0) {
    +          c.className = c.className.slice(5);
    +        }
    +        if (c.className.indexOf('up ') == 0) {
    +          c.className = c.className.slice(3);
    +        }
    +      }
    +    }
    +  }
    +
    +  window['initialSort'] = initialSort;
    +  window['toggleSort'] = toggleSort;
    +
    +})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..b226e41c5276581db33d71525298ef572cc5d7ce
    GIT binary patch
    literal 354
    zcmZ?wbhEHb6krfwxXQrr`Rnf=KmWY@^y|~t-#>r-`SJ62+pK*(^ACOa@_X{KW3$$r
    zUbOlAiXE5N?74dH#gDtszu$lH{mGl3&)@xg`{~!`Z@=#VMPB~6_u~7*S3h2T`1$R}
    z?`Q9Re)#(P)3@JWfBgRb^LKTLe^s%6bxA;7sb4jaQ5?`-<<ng5TVLWgvEHM%)~l!1
    zYi_IS^d`3r{dQ}59F})EE$?<()ZzT#ME{lvwpTV~T-lU)Yj4ffO_~4y|7XAeia%Kx
    z85k@XbU-p7KQXY?ADC0%p(B)eLgkXi62W-^(!DQ#v2a~Gz-z9%&!+3h!38t#X02Ds
    zad;WPFvUVOY)YY2k84HG1kp%gVW!3wVI5ap$%?8ZHc4GqO=+PiQzvV>Y72H(vk7Xs
    us!1$fvP8{QU92ZrK%7tARasP&f6JDw8m_8J3W|I7DyXXX9C3DJum%7=h^`F)
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif
    new file mode 100644
    index 0000000000000000000000000000000000000000..58ed21660ec467736a4d2af17d91341f7cfb556c
    GIT binary patch
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ=;nroA^G
    Ub$^Kz-Nct)ygK&ScM%3_0PmU?SpWb4
    
    literal 0
    HcmV?d00001
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html b/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    new file mode 100644
    index 00000000..5a276ab4
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">pop-os-33249098</span></td><td>May 17, 2025, 5:59:30 PM</td><td>May 17, 2025, 5:59:30 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>50e0945fec76b333</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BaseProviderFactory</span></td><td><code>da939a0152866a4b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BiProperty</span></td><td><code>ed0281592f3976b4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Command</span></td><td><code>52d7b732759793ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Constants</span></td><td><code>8f58b0da27218c74</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.DumpErrorSingleton</span></td><td><code>ea25742803c9e73f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkedProcessEventType</span></td><td><code>4f32ae2d4e670365</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingReporterFactory</span></td><td><code>be06f83accc5a8aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingRunListener</span></td><td><code>c34d0a9f28f66585</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.MasterProcessCommand</span></td><td><code>fc8c116a509256d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Shutdown</span></td><td><code>47a37ed2a684ef1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.cli.CommandLineOption</span></td><td><code>5825f848ee2abcd7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.provider.AbstractProvider</span></td><td><code>0fea65ed91d7c12a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture</span></td><td><code>7ee3451cf95e2f70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>804935f758ebaea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>a81300d2d50decb6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ReporterConfiguration</span></td><td><code>bf4075c0385296c2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.RunMode</span></td><td><code>70edc0a9dea60143</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder</span></td><td><code>c6f3b2781f9ac881</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.BufferedStream</span></td><td><code>11f69a75bc1c7211</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento</span></td><td><code>e504a9e8cfc028af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Segment</span></td><td><code>773004ac6cd115ef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.StreamReadStatus</span></td><td><code>8d5ee1d510b5c935</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamEncoder</span></td><td><code>9547668418a858ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.SegmentType</span></td><td><code>77b0d78ed3ddd126</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.suite.RunResult</span></td><td><code>0eef4ae883b6fcaa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.DirectoryScannerParameters</span></td><td><code>529e83b831c47f72</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.IncludedExcludedPatterns</span></td><td><code>e12220ce508068df</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest</span></td><td><code>119a5faa0ae08a91</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.ClassMatcher</span></td><td><code>cb9dd1b6069a872b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.MethodMatcher</span></td><td><code>1d5196f3dfcebd52</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.Type</span></td><td><code>6f46eedd1917ca66</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.RunOrderParameters</span></td><td><code>f74f6b3eb9f1a132</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestArtifactInfo</span></td><td><code>6d162cddde2db959</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestListResolver</span></td><td><code>0f4645f0d7fd02c8</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestRequest</span></td><td><code>1cb2946d8f0dc9e4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.CloseableIterator</span></td><td><code>01846c357efacb7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultRunOrderCalculator</span></td><td><code>21a42ec0f6d63b8e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultScanResult</span></td><td><code>01695a339c66ab8d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.ReflectionUtils</span></td><td><code>7f9a430ae144c985</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.RunOrder</span></td><td><code>93376844e6d709d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun</span></td><td><code>db4e8195893ece6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun.ClassesIterator</span></td><td><code>543f26bfbdd04ce0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel</span></td><td><code>6826ce793980b64e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel</span></td><td><code>484afcc5593fbc9a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels</span></td><td><code>eb60281181a1dc33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.3</span></td><td><code>605144c3f67338aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.4</span></td><td><code>4834cf9402eabd28</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory</span></td><td><code>b2161e778265b95d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>e3fb668fa8792230</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DumpFileUtils</span></td><td><code>9cc0f89ffb46ba32</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>f8b4034fe9c934d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>d2b4a565d2c195cc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>c511fbfeb1f35c23</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>d05af49602124353</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>d14c58928ac6aa7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>8bc1181d0c5af474</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>72a8e2906ddc1c93</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>f6a6b02be2fb0964</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>c8ce6ed3be8ec9bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>68f2dae15ae26cc2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>fc217f2c1d87c099</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>2afb302f7c81f991</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>850ef2748b5ef5e6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>9577114e02a5bdef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.8</span></td><td><code>3c8febd047cd2b0c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>c83e3af27d5d3c47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedNodeArg</span></td><td><code>9dbb0ff22dfc1303</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>f83a9169197e13b1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessCheckerType</span></td><td><code>e554be35191ff5a7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>1e4e30276db2e62e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>ec2cd1e39ec4278e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>70176a3dd903d57a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>a843c08e9b5c79ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>355d20d53741b604</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory</span></td><td><code>67a1c051e3809086</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.1</span></td><td><code>cc936f6c85f9235a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.2</span></td><td><code>a1fa70e4af42c555</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.CommandChannelDecoder</span></td><td><code>6684e6bad0b7c71e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder</span></td><td><code>b69d9287bf010b1a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory</span></td><td><code>3b29862697f79d34</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory</span></td><td><code>8c14c673718fba9e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder</span></td><td><code>a23a4082e2bbd1ed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder.1</span></td><td><code>950700970edca54a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.EventEncoder</span></td><td><code>7c894cb22c8c16ca</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>958f7eb4311b3c2f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.LazyLauncher</span></td><td><code>a3841276826f155c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>0d7041faa0298e70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>db2b13639af3176e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassMethodIndexer</span></td><td><code>0e8f3008aec84fcb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.JavaVersion</span></td><td><code>a902b52c460c0348</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.StringUtils</span></td><td><code>4628d7808116e372</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemProperties</span></td><td><code>6b2fea785d2a2915</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemUtils</span></td><td><code>2518da556699ab1e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.function.Suppliers</span></td><td><code>6cb739fdbd96d7c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.math.NumberUtils</span></td><td><code>99f301ade68669b7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.StringUtils</span></td><td><code>abd8480c7152bf46</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils</span></td><td><code>011b23cd829ec86c</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>35e14124a607c6e0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>f54a3d73ed88c765</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>e2ae6d11698760d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>7e7fdcd1b43926e2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>3264494f5452162d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>bab380425dca8d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>518e1c643c30f164</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>92d1cbb782871d54</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>4b5e361d03d8e2d8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>95abf612d36312bc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>2747cc3e148c57d9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>01a66e5fdf0989e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>dbd6c4e35e0c9807</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>8192a76b48a09183</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>0493a46e2481b698</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>943e016148cf5f16</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>1c057f4243f10c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>340dbe384622c6a6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>373ab803cd4c3f71</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>5b959cc55c1f4f91</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>4134835721917de5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>cb8d6d2ffc57432f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>671448bb3682a8b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>53d31c5fa4778cc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>db07bccfb8a7df73</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>8a0a6571eef022fb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>8974ffb77e1cf465</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>50163587b45842fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>b39a5e63227384a5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>0766343b70481496</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.AutoCloseExtension</span></td><td><code>b0c206c116575b65</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>ae3c30ff8f7ce050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>2445286ad5728ba3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry.Entry</span></td><td><code>2c27256a5e9eeb22</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>134b5213d4cb80ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>797b378613d1c2c3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1977e7bd25ea66b8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>24002b8886de1936</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>62b73ea4d52632c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>de05466420699f92</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>d1970dd64ce22fa4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>2135634bf7e7ad88</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Success</span></td><td><code>88f304668c6ff14e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>7b57f78fc724ac54</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>835c9a026ac4df32</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>1da637c10cbda39c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>41a8b61339cf4862</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>484cfeb1dc3b6e93</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>23726102aeb1c0ca</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>6cb29bed5c13bb1d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.LruCache</span></td><td><code>fd8ff40dff05b112</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>99362b29a037afdc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>f1c34b50fa11302d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>ecf76570811abc50</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>372dfca6fa74c1ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>2ffa834710d16849</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>cecade1862d00032</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>ed62b01b8b763511</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>22e0c8566a0701f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>73f93afa543ca74a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>83d3937d6c2e4880</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>c8d2fba4bb555492</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>1b4753bc794e8388</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>02b8934961bdea6f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>22866b13273482bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a5f736d88185f693</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>8530bdf90ae8fa6b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>29479a0ae9db2840</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>9e54a6b249ea167a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>a5ee26b408b26ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>03b0ccd7b69c9fc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>455c5b5eb27d1f81</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a6b2f6753eef3ff0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8b2cda0d30b056d5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>17948dfe4c8d10c0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>4ba3237c7e6b18d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>fde8e703faa64574</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>4937cdb1a041a120</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>151f6fae99911199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>0ad8786b2f016b1a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>29666059b7fb2614</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1b0484c56b030686</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>458b4a4e46b6b868</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>3c16d4dff276f57a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>bd8402e1232e1a40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ba500d6ba9a79953</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>fa0dc5b65de1b0a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>705f9e9f579aeab0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>599b10c51fe35ea3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>a78f13d5e60b7d08</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>99cdeecddb4ca68b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>3f2ca9c1749a3d5a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>42796aad70055913</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>c8bf7d7bb2e19471</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>c4c004e32fc81aac</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>9048d6cd4a8e05d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>f68790b28827581e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c9f34e2fe83d5caa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>732ad1771b71d292</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>512f5438a4d56505</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>f0bfd18cc662d7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>a891c129fd2a01df</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>fb95e61bdaf5378c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>158ca2dfb82179f2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>c9df2add13bcb88f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>f767a377012b98ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>088911f06a0807a1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>d946f222ae757dc1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>694596eba9b0c85e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f2d1545415335fda</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>fef478667b042ad5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>f4faaefa1c9341ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>8321b18dbabfecb3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>04623991ddcc58da</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>e6360c7333fc842d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>95dfc056bdb1d2d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>b4cd1fb6724efdef</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>e040225d1f67e564</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>bcc6e4bee671ccad</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>aa7b08954aea78f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>61bd4de41739236f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>cdc9b7e4e1a576e0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>e4e806767310de9f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>67a547a561eee0f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>552f6c5833b8f8bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>6e65b7c784b87efc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>53cf37d963f8b58c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>b0288378227ce052</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>d91ab455a4c89f9b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>ce2dcedb783e6f56</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>452edacea5001e83</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>0736e6add61b3334</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>0d0d72b6e503c372</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>64729ce9bd729578</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>4b25c1714dc335ec</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>ba76828012d853d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>52b5b9d7814ff3b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.1</span></td><td><code>f83ebdedced2e399</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>886f3c723ddb9556</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>0d89b6f56eb4db06</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>fb76ce235ae5247b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>9833a129382c2ccc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>79c2095302f261bb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>7fe9373f303770d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>3840931f19c9d795</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>730ad6d2d5641536</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>08e28076c727f8e6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>771f386239bb3682</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>f6f65efcfd071c8e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>0f855b867dc3eac4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>aaf56096b3079d53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>0a9a375bd99ca30a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>408046ed24478736</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>bf2a372dcc5e43f7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>46b8848a888d4d59</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansApplicationListener</span></td><td><code>e038b74293c709e4</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansTestExecutionListener</span></td><td><code>89df4f04e39e1522</code></td></tr><tr><td><span class="el_class">org.springframework.util.Assert</span></td><td><code>2e1248d2d1526e84</code></td></tr><tr><td><span class="el_class">org.springframework.util.ClassUtils</span></td><td><code>ca4ab8b63048e08b</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap</span></td><td><code>722cd58749bce5da</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceManager</span></td><td><code>35eb6b9c1f2eedb5</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceType</span></td><td><code>5b823be241865c2f</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.Segment</span></td><td><code>5daee5d71f2a6fe2</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.csv b/sentrius-llm-core/target/site/jacoco/jacoco.csv
    new file mode 100644
    index 00000000..9a7bdce0
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco.csv
    @@ -0,0 +1,31 @@
    +GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest,308,0,46,0,19,0,40,0,17,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilder,18,0,0,0,1,0,3,0,3,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest,210,0,36,0,7,0,35,0,17,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest,175,0,28,0,15,0,25,0,11,0
    +sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    +sentrius-llm-core,io.sentrius.sso.genai,Response,401,0,70,0,13,0,60,0,25,0
    +sentrius-llm-core,io.sentrius.sso.genai,Response.Choice,196,0,38,0,5,0,32,0,13,0
    +sentrius-llm-core,io.sentrius.sso.genai,Message.MessageBuilder,36,0,0,0,1,0,6,0,6,0
    +sentrius-llm-core,io.sentrius.sso.genai,Message,171,0,30,0,7,0,28,0,13,0
    +sentrius-llm-core,io.sentrius.sso.genai,Response.Usage,155,0,30,0,4,0,26,0,11,0
    +sentrius-llm-core,io.sentrius.sso.genai,Response.ResponseBuilder,83,0,0,0,1,0,11,0,11,0
    +sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest.BaseGenerativeRequestBuilder,38,0,0,0,1,0,6,0,6,0
    +sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest,135,0,22,0,6,0,22,0,11,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilder,151,0,0,0,1,0,14,0,14,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse.LLMResponseBuilder,55,0,2,0,1,0,8,0,7,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,Conversation,218,0,38,0,7,0,34,0,15,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest,203,0,34,0,6,0,31,0,14,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest,45,0,0,0,7,0,9,0,9,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest.ApiEndPointRequestBuilder,67,0,0,0,1,0,8,0,8,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest,525,0,86,0,14,0,72,0,29,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest.TwoPartyRequestBuilder,73,0,2,0,1,0,10,0,9,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule,85,0,14,0,5,0,16,0,9,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,Conversation.ConversationBuilder,58,0,2,0,1,0,8,0,7,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse,206,0,34,0,9,0,33,0,16,0
    +sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule.ComplianceRuleBuilder,18,0,0,0,1,0,4,0,4,0
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.xml b/sentrius-llm-core/target/site/jacoco/jacoco.xml
    new file mode 100644
    index 00000000..74566161
    --- /dev/null
    +++ b/sentrius-llm-core/target/site/jacoco/jacoco.xml
    @@ -0,0 +1 @@
    +<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="sentrius-llm-core"><sessioninfo id="pop-os-33249098" start="1747519170536" dump="1747519170896"/><package name="io/sentrius/sso/genai/model/endpoints"><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder" sourcefilename="ConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest" sourcefilename="ConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="73"><counter type="INSTRUCTION" missed="97" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$newMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="32"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;)V" line="32"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="31"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="308" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="40" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl" sourcefilename="ConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl;" line="32"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest;" line="32"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl" sourcefilename="ChatApiEndpointRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder" sourcefilename="ChatApiEndpointRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest" sourcefilename="RawConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="74"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$request" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="45"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRequest" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="48"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRequest" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="210" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="35" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl" sourcefilename="RawConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest" sourcefilename="ChatApiEndpointRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="65"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="175" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="25" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder" sourcefilename="RawConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="request" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ChatApiEndpointRequest.java"><line nr="30" mi="69" ci="0" mb="14" cb="0"/><line nr="31" mi="46" ci="0" mb="2" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="65" mi="4" ci="0" mb="0" cb="0"/><line nr="66" mi="13" ci="0" mb="4" cb="0"/><line nr="67" mi="10" ci="0" mb="0" cb="0"/><line nr="68" mi="8" ci="0" mb="4" cb="0"/><line nr="69" mi="10" ci="0" mb="0" cb="0"/><line nr="71" mi="10" ci="0" mb="0" cb="0"/><line nr="72" mi="6" ci="0" mb="2" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="4" ci="0" mb="2" cb="0"/><line nr="76" mi="6" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="200" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="30" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="RawConversationRequest.java"><line nr="30" mi="145" ci="0" mb="30" cb="0"/><line nr="31" mi="97" ci="0" mb="6" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="48" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="259" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="ConversationRequest.java"><line nr="31" mi="145" ci="0" mb="30" cb="0"/><line nr="32" mi="97" ci="0" mb="6" cb="0"/><line nr="38" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="2" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="9" ci="0" mb="0" cb="0"/><line nr="73" mi="4" ci="0" mb="0" cb="0"/><line nr="74" mi="10" ci="0" mb="0" cb="0"/><line nr="75" mi="11" ci="0" mb="2" cb="0"/><line nr="76" mi="11" ci="0" mb="0" cb="0"/><line nr="77" mi="1" ci="0" mb="0" cb="0"/><line nr="78" mi="13" ci="0" mb="0" cb="0"/><line nr="79" mi="13" ci="0" mb="4" cb="0"/><line nr="80" mi="10" ci="0" mb="0" cb="0"/><line nr="81" mi="6" ci="0" mb="2" cb="0"/><line nr="82" mi="5" ci="0" mb="0" cb="0"/><line nr="84" mi="4" ci="0" mb="2" cb="0"/><line nr="85" mi="6" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="357" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="47" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="816" covered="0"/><counter type="BRANCH" missed="110" covered="0"/><counter type="LINE" missed="41" covered="0"/><counter type="COMPLEXITY" missed="119" covered="0"/><counter type="METHOD" missed="64" covered="0"/><counter type="CLASS" missed="9" covered="0"/></package><package name="io/sentrius/sso/genai"><class name="io/sentrius/sso/genai/Response" sourcefilename="Response.java"><method name="concatenateResponses" desc="()Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getId" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getObject" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreated" desc="()Ljava/lang/Long;" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChoices" desc="()Ljava/util/List;" line="36"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUsage" desc="()Lio/sentrius/sso/genai/Response$Usage;" line="39"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getServiceTier" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemFingerprint" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setId" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setObject" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreated" desc="(Ljava/lang/Long;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChoices" desc="(Ljava/util/List;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUsage" desc="(Lio/sentrius/sso/genai/Response$Usage;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setServiceTier" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemFingerprint" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="157" covered="0"/><counter type="BRANCH" missed="54" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="17"><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lio/sentrius/sso/genai/Response$Usage;Ljava/lang/String;Ljava/lang/String;)V" line="20"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$concatenateResponses$0" desc="(Lio/sentrius/sso/genai/Response$Choice;)Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="401" covered="0"/><counter type="BRANCH" missed="70" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="60" covered="0"/><counter type="METHOD" missed="25" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Choice" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getIndex" desc="()Ljava/lang/Integer;" line="53"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessage" desc="()Lio/sentrius/sso/genai/Message;" line="56"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFinishReason" desc="()Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogprobs" desc="()Ljava/lang/Integer;" line="62"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setIndex" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessage" desc="(Lio/sentrius/sso/genai/Message;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFinishReason" desc="(Ljava/lang/String;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogprobs" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="49"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="49"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="32" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message$MessageBuilder" sourcefilename="Message.java"><method name="&lt;init&gt;" desc="()V" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="refusal" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Message;" line="33"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message" sourcefilename="Message.java"><method name="builder" desc="()Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="43"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRefusal" desc="()Ljava/lang/String;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRefusal" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="32"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="35"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="171" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Usage" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptTokens" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCompletionTokens" desc="()Ljava/lang/Integer;" line="78"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTotalTokens" desc="()Ljava/lang/Integer;" line="81"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPromptTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCompletionTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTotalTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="70"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="70"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="155" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="26" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$ResponseBuilder" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="id" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="object" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="created" desc="(Ljava/lang/Long;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="choices" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="usage" desc="(Lio/sentrius/sso/genai/Response$Usage;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="serviceTier" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemFingerprint" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Response;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="83" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Message.java"><line nr="32" mi="143" ci="0" mb="30" cb="0"/><line nr="33" mi="40" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="12" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><line nr="43" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="207" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="19" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Response.java"><line nr="17" mi="330" ci="0" mb="70" cb="0"/><line nr="18" mi="87" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="27" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="184" ci="0" mb="38" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="3" ci="0" mb="0" cb="0"/><line nr="70" mi="146" ci="0" mb="30" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="93" mi="13" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="835" covered="0"/><counter type="BRANCH" missed="138" covered="0"/><counter type="LINE" missed="22" covered="0"/><counter type="COMPLEXITY" missed="129" covered="0"/><counter type="METHOD" missed="60" covered="0"/><counter type="CLASS" missed="4" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1042" covered="0"/><counter type="BRANCH" missed="168" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="163" covered="0"/><counter type="METHOD" missed="79" covered="0"/><counter type="CLASS" missed="6" covered="0"/></package><package name="io/sentrius/sso/genai/api"><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="()V" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="24"><counter type="INSTRUCTION" missed="34" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="27"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="135" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="22" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="BaseGenerativeRequest.java"><line nr="24" mi="106" ci="0" mb="22" cb="0"/><line nr="25" mi="49" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="9" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="io/sentrius/sso/genai/model"><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/LLMRequest;Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="51" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="messages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="topP" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="n" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stream" desc="(Ljava/lang/Boolean;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stop" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="presencePenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="frequencyPenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="logitBias" desc="(Ljava/util/Map;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="151" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder" sourcefilename="LLMResponse.java"><method name="&lt;init&gt;" desc="()V" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessage" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="alert" desc="(Z)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="13"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="13"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation" sourcefilename="Conversation.java"><method name="$default$terminalMessages" desc="()Ljava/util/List;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Lio/sentrius/sso/genai/model/LLMResponse;Ljava/util/List;Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="12"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousMessages" desc="()Ljava/util/List;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewUserMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessages" desc="()Ljava/util/List;" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemConfines" desc="()Ljava/lang/String;" line="23"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPreviousMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemConfines" desc="(Ljava/lang/String;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="218" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="15" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest" sourcefilename="ApiEndPointRequest.java"><method name="$default$maxTokens" desc="()I" line="12"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="26" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()I" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUserInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(I)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="203" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="31" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl" sourcefilename="LLMRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl;" line="26"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="26"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest" sourcefilename="TwoPartyRequest.java"><method name="$default$systemInput" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="10"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getWhatSystemIsDoing" desc="()Ljava/lang/String;" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserObjective" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="16"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousPrompt" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptResponse" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder" sourcefilename="ApiEndPointRequest.java"><method name="&lt;init&gt;" desc="()V" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(I)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="67" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="44" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toBuilder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessages" desc="()Ljava/util/List;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="51"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTopP" desc="()Ljava/lang/Float;" line="65"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getN" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStream" desc="()Ljava/lang/Boolean;" line="87"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStop" desc="()Ljava/util/List;" line="97"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()Ljava/lang/Integer;" line="108"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPresencePenalty" desc="()Ljava/lang/Float;" line="122"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFrequencyPenalty" desc="()Ljava/lang/Float;" line="136"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogitBias" desc="()Ljava/util/Map;" line="151"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessages" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTopP" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setN" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStream" desc="(Ljava/lang/Boolean;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStop" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPresencePenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFrequencyPenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogitBias" desc="(Ljava/util/Map;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="191" covered="0"/><counter type="BRANCH" missed="66" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="25"><counter type="INSTRUCTION" missed="146" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="25" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/util/Map;)V" line="28"><counter type="INSTRUCTION" missed="33" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="525" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="72" covered="0"/><counter type="METHOD" missed="29" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder" sourcefilename="TwoPartyRequest.java"><method name="&lt;init&gt;" desc="()V" line="6"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="whatSystemIsDoing" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userObjective" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousPrompt" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="promptResponse" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest;" line="6"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="73" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule" sourcefilename="ComplianceRule.java"><method name="builder" desc="()Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRule" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRule" desc="(Ljava/lang/String;)V" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="21"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="23"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="85" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation$ConversationBuilder" sourcefilename="Conversation.java"><method name="&lt;init&gt;" desc="()V" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemConfines" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/Conversation;" line="11"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="58" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse" sourcefilename="LLMResponse.java"><method name="$default$alert" desc="()Z" line="13"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessage" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isAlert" desc="()Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="59" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessage" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAlert" desc="(Z)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V" line="14"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="15"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="206" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="33" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder" sourcefilename="ComplianceRule.java"><method name="&lt;init&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="rule" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/ComplianceRule;" line="22"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="LLMRequest.java"><line nr="25" mi="405" ci="0" mb="86" cb="0"/><line nr="26" mi="212" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="33" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="65" mi="3" ci="0" mb="0" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="3" ci="0" mb="0" cb="0"/><line nr="108" mi="3" ci="0" mb="0" cb="0"/><line nr="122" mi="3" ci="0" mb="0" cb="0"/><line nr="136" mi="3" ci="0" mb="0" cb="0"/><line nr="151" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="683" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="88" covered="0"/><counter type="METHOD" missed="45" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="LLMResponse.java"><line nr="11" mi="151" ci="0" mb="34" cb="0"/><line nr="12" mi="16" ci="0" mb="0" cb="0"/><line nr="13" mi="61" ci="0" mb="2" cb="0"/><line nr="14" mi="15" ci="0" mb="0" cb="0"/><line nr="15" mi="6" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="261" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="41" covered="0"/><counter type="METHOD" missed="23" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ComplianceRule.java"><line nr="21" mi="69" ci="0" mb="14" cb="0"/><line nr="22" mi="22" ci="0" mb="0" cb="0"/><line nr="23" mi="6" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="103" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="20" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="TwoPartyRequest.java"><line nr="6" mi="100" ci="0" mb="2" cb="0"/><line nr="10" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="18" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Conversation.java"><line nr="11" mi="81" ci="0" mb="2" cb="0"/><line nr="12" mi="167" ci="0" mb="38" cb="0"/><line nr="14" mi="16" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="276" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ApiEndPointRequest.java"><line nr="11" mi="163" ci="0" mb="32" cb="0"/><line nr="12" mi="95" ci="0" mb="2" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="270" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="39" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1711" covered="0"/><counter type="BRANCH" missed="212" covered="0"/><counter type="LINE" missed="48" covered="0"/><counter type="COMPLEXITY" missed="249" covered="0"/><counter type="METHOD" missed="143" covered="0"/><counter type="CLASS" missed="13" covered="0"/></package><counter type="INSTRUCTION" missed="3742" covered="0"/><counter type="BRANCH" missed="512" covered="0"/><counter type="LINE" missed="124" covered="0"/><counter type="COMPLEXITY" missed="559" covered="0"/><counter type="METHOD" missed="303" covered="0"/><counter type="CLASS" missed="30" covered="0"/></report>
    \ No newline at end of file
    
    From f8d2bbbed3bdccf288251287e9316eb74250f3e3 Mon Sep 17 00:00:00 2001
    From: Marc Parisi <phrocker@apache.org>
    Date: Sat, 24 May 2025 06:28:59 -0400
    Subject: [PATCH 4/5] add jwt verification
    
    ---
     .gitignore                                    |    2 +
     .../analysis/agents/agents/ChatAgent.java     |   24 +-
     .../agent/analysis/api/BotController.java     |    4 +-
     .../analysis/api/websocket/ChatWSHandler.java |  125 +-
     .../websocket/JwtHandshakeInterceptor.java    |   71 +
     .../api/websocket/WebSocketConfig.java        |   15 +-
     .../agent/config/AgentConfigOptions.java      |    4 +-
     .../sentrius/agent/config/SecurityConfig.java |    6 +-
     .../src/main/resources/chat-helper.properties |    3 +-
     .../api/AgentBootstrapController.java         |   13 +-
     .../controllers/api/ChatApiController.java    |   51 +-
     .../api/ZeroTrustATApiController.java         |   53 +-
     .../db/migration/V10__Alter_error_output.sql  |    4 +
     .../db/migration/V11__Alter_error_output.sql  |    4 +
     .../db/migration/V12__Constraints.sql         |    4 +
     .../db/migration/V13__Constraints2.sql        |    4 +
     .../db/migration/V14__Constraints2.sql        |    5 +
     .../db/migration/V15__Constraints2.sql        |    4 +
     api/src/main/resources/static/js/chat.js      |  163 +-
     .../resources/static/js/dashboard-agents.js   |   41 +
     .../resources/templates/sso/dashboard.html    |   13 +-
     .../sso/core/dto/ztat/UserTokenDTO.java       |   10 +
     .../sso/core/dto/ztat/UserTokenResponse.java  |   10 +
     .../core/dto/ztat/ZtatChallengeRequest.java   |   11 +
     .../agents/ZeroTrustClientService.java        |   37 +-
     .../sentrius/sso/core/model/ErrorOutput.java  |    6 +-
     .../model/security/AccessControlAspect.java   |    5 +-
     .../sso/core/services/UserService.java        |   10 +-
     .../core/services/agents/AgentService.java    |   61 +-
     .../core/services/security/CryptoService.java |    4 +
     .../services/security/EcdsaSignatureUtil.java |   46 +
     .../services/security/ZtatTokenService.java   |   69 +
     .../compile/default-compile/createdFiles.lst  |    2 +
     .../compile/default-compile/inputFiles.lst    |    2 +
     ops-scripts/local/run-chat-agent.sh           |    2 +-
     sentrius-llm-core/target/jacoco.exec          |  Bin 20649 -> 0 bytes
     .../target/site/jacoco/index.html             |    1 -
     ...eRequest$BaseGenerativeRequestBuilder.html |    1 -
     .../BaseGenerativeRequest.html                |    1 -
     .../BaseGenerativeRequest.java.html           |   42 -
     .../io.sentrius.sso.genai.api/index.html      |    1 -
     .../index.source.html                         |    1 -
     ...Request$ChatApiEndpointRequestBuilder.html |    1 -
     ...est$ChatApiEndpointRequestBuilderImpl.html |    1 -
     .../ChatApiEndpointRequest.html               |    1 -
     .../ChatApiEndpointRequest.java.html          |   82 -
     ...ionRequest$ConversationRequestBuilder.html |    1 -
     ...equest$ConversationRequestBuilderImpl.html |    1 -
     .../ConversationRequest.html                  |    1 -
     .../ConversationRequest.java.html             |   91 -
     ...Request$RawConversationRequestBuilder.html |    1 -
     ...est$RawConversationRequestBuilderImpl.html |    1 -
     .../RawConversationRequest.html               |    1 -
     .../RawConversationRequest.java.html          |   78 -
     .../index.html                                |    1 -
     .../index.source.html                         |    1 -
     ...ointRequest$ApiEndPointRequestBuilder.html |    1 -
     .../ApiEndPointRequest.html                   |    1 -
     .../ApiEndPointRequest.java.html              |   44 -
     .../ComplianceRule$ComplianceRuleBuilder.html |    1 -
     .../ComplianceRule.html                       |    1 -
     .../ComplianceRule.java.html                  |   29 -
     .../Conversation$ConversationBuilder.html     |    1 -
     .../Conversation.html                         |    1 -
     .../Conversation.java.html                    |   25 -
     .../LLMRequest$LLMRequestBuilder.html         |    1 -
     .../LLMRequest$LLMRequestBuilderImpl.html     |    1 -
     .../LLMRequest.html                           |    1 -
     .../LLMRequest.java.html                      |  153 --
     .../LLMResponse$LLMResponseBuilder.html       |    1 -
     .../LLMResponse.html                          |    1 -
     .../LLMResponse.java.html                     |   23 -
     ...woPartyRequest$TwoPartyRequestBuilder.html |    1 -
     .../TwoPartyRequest.html                      |    1 -
     .../TwoPartyRequest.java.html                 |   22 -
     .../io.sentrius.sso.genai.model/index.html    |    1 -
     .../index.source.html                         |    1 -
     .../Message$MessageBuilder.html               |    1 -
     .../jacoco/io.sentrius.sso.genai/Message.html |    1 -
     .../io.sentrius.sso.genai/Message.java.html   |   48 -
     .../Response$Choice.html                      |    1 -
     .../Response$ResponseBuilder.html             |    1 -
     .../io.sentrius.sso.genai/Response$Usage.html |    1 -
     .../io.sentrius.sso.genai/Response.html       |    1 -
     .../io.sentrius.sso.genai/Response.java.html  |   96 --
     .../jacoco/io.sentrius.sso.genai/index.html   |    1 -
     .../io.sentrius.sso.genai/index.source.html   |    1 -
     .../site/jacoco/jacoco-resources/branchfc.gif |  Bin 91 -> 0 bytes
     .../site/jacoco/jacoco-resources/branchnc.gif |  Bin 91 -> 0 bytes
     .../site/jacoco/jacoco-resources/branchpc.gif |  Bin 91 -> 0 bytes
     .../site/jacoco/jacoco-resources/bundle.gif   |  Bin 709 -> 0 bytes
     .../site/jacoco/jacoco-resources/class.gif    |  Bin 586 -> 0 bytes
     .../site/jacoco/jacoco-resources/down.gif     |  Bin 67 -> 0 bytes
     .../site/jacoco/jacoco-resources/greenbar.gif |  Bin 91 -> 0 bytes
     .../site/jacoco/jacoco-resources/group.gif    |  Bin 351 -> 0 bytes
     .../site/jacoco/jacoco-resources/method.gif   |  Bin 193 -> 0 bytes
     .../site/jacoco/jacoco-resources/package.gif  |  Bin 227 -> 0 bytes
     .../site/jacoco/jacoco-resources/prettify.css |   13 -
     .../site/jacoco/jacoco-resources/prettify.js  | 1510 -----------------
     .../site/jacoco/jacoco-resources/redbar.gif   |  Bin 91 -> 0 bytes
     .../site/jacoco/jacoco-resources/report.css   |  243 ---
     .../site/jacoco/jacoco-resources/report.gif   |  Bin 363 -> 0 bytes
     .../site/jacoco/jacoco-resources/session.gif  |  Bin 213 -> 0 bytes
     .../site/jacoco/jacoco-resources/sort.gif     |  Bin 58 -> 0 bytes
     .../site/jacoco/jacoco-resources/sort.js      |  148 --
     .../site/jacoco/jacoco-resources/source.gif   |  Bin 354 -> 0 bytes
     .../site/jacoco/jacoco-resources/up.gif       |  Bin 67 -> 0 bytes
     .../target/site/jacoco/jacoco-sessions.html   |    1 -
     .../target/site/jacoco/jacoco.csv             |   31 -
     .../target/site/jacoco/jacoco.xml             |    1 -
     110 files changed, 792 insertions(+), 2815 deletions(-)
     create mode 100644 ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/JwtHandshakeInterceptor.java
     create mode 100644 api/src/main/resources/db/migration/V10__Alter_error_output.sql
     create mode 100644 api/src/main/resources/db/migration/V11__Alter_error_output.sql
     create mode 100644 api/src/main/resources/db/migration/V12__Constraints.sql
     create mode 100644 api/src/main/resources/db/migration/V13__Constraints2.sql
     create mode 100644 api/src/main/resources/db/migration/V14__Constraints2.sql
     create mode 100644 api/src/main/resources/db/migration/V15__Constraints2.sql
     create mode 100644 api/src/main/resources/static/js/dashboard-agents.js
     create mode 100644 core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenDTO.java
     create mode 100644 core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenResponse.java
     create mode 100644 core/src/main/java/io/sentrius/sso/core/dto/ztat/ZtatChallengeRequest.java
     create mode 100644 dataplane/src/main/java/io/sentrius/sso/core/services/security/EcdsaSignatureUtil.java
     create mode 100644 dataplane/src/main/java/io/sentrius/sso/core/services/security/ZtatTokenService.java
     delete mode 100644 sentrius-llm-core/target/jacoco.exec
     delete mode 100644 sentrius-llm-core/target/site/jacoco/index.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.csv
     delete mode 100644 sentrius-llm-core/target/site/jacoco/jacoco.xml
    
    diff --git a/.gitignore b/.gitignore
    index a2a9ada8..81dd9485 100644
    --- a/.gitignore
    +++ b/.gitignore
    @@ -46,8 +46,10 @@ llm-proxy/target/**
     llm-proxy/target/
     llm-dataplane/target/**
     sentrius-llm-dataplane/target/**
    +sentrius-llm-core/target/**
     llm-dataplane/target/
     sentrius-llm-dataplane/target/
    +sentrius-llm-core/target/
     node/*
     node_modules/*
     api/node_modules/*
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    index 76bc374c..6cef1d37 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/agents/ChatAgent.java
    @@ -1,5 +1,6 @@
     package io.sentrius.agent.analysis.agents.agents;
     
    +import java.util.UUID;
     import java.util.concurrent.TimeUnit;
     import com.fasterxml.jackson.core.JsonProcessingException;
     import com.fasterxml.jackson.databind.node.ArrayNode;
    @@ -45,6 +46,8 @@ public class ChatAgent implements ApplicationListener<ApplicationReadyEvent> {
         private volatile boolean running = true;
         private Thread workerThread;
     
    +    private AgentExecution agentExecution;
    +
         public ArrayNode promptAgent(AgentExecution execution) throws ZtatException {
             while(true){
                 try {
    @@ -79,14 +82,15 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
             var keyPair = agentKeyService.getKeyPair();
     
             try {
    +            var agentName = agentConfigOptions.getNamePrefix() + "-" + UUID.randomUUID().toString();
                 var base64PublicKey = agentKeyService.getBase64PublicKey(keyPair.getPublic());
    -            var agentRegistrationDTO = agentClientService.bootstrap(agentConfigOptions.getName(), base64PublicKey
    +            var agentRegistrationDTO = agentClientService.bootstrap(agentName, base64PublicKey
                     , keyPair.getPublic().getAlgorithm());
     
                 var encryptedSecret = agentRegistrationDTO.getClientSecret();
                 var decryptedSecret = agentKeyService.
                     decryptWithPrivateKey(encryptedSecret, keyPair.getPrivate());
    -            keycloakService.createKeycloakClient(agentConfigOptions.getName(),
    +            keycloakService.createKeycloakClient(agentName,
                     decryptedSecret);
     
     
    @@ -100,9 +104,10 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
             final UserDTO user = UserDTO.builder()
                 .username(zeroTrustClientService.getUsername())
                 .build();
    -        var execution = agentExecutionService.getAgentExecution(user);
    +        agentExecution = agentExecutionService.getAgentExecution(user);
    +
             try {
    -            agentClientService.heartbeat(execution, execution.getUser().getUsername());
    +            agentClientService.heartbeat(agentExecution, agentExecution.getUser().getUsername());
             } catch (ZtatException e) {
                 throw new RuntimeException(e);
             }
    @@ -110,12 +115,12 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
             while(running) {
     
                 try {
    -                var register = zeroTrustClientService.registerAgent(execution);
    +                var register = zeroTrustClientService.registerAgent(agentExecution);
                     log.info("Registered agent response: {}", register);
     
                     var ztat = JsonUtil.MAPPER.readValue(register, Ztat.class);
    -                execution.setZtatToken(ztat.getZtatToken());
    -                execution.setCommunicationId(ztat.getCommunicationId());
    +                agentExecution.setZtatToken(ztat.getZtatToken());
    +                agentExecution.setCommunicationId(ztat.getCommunicationId());
                     break;
                 }catch (Exception | ZtatException e) {
     
    @@ -135,7 +140,7 @@ public void onApplicationEvent(final ApplicationReadyEvent event) {
                     try {
     
                         Thread.sleep(5_000);
    -                    agentClientService.heartbeat(execution, execution.getUser().getUsername());
    +                    agentClientService.heartbeat(agentExecution, agentExecution.getUser().getUsername());
                     } catch (InterruptedException | ZtatException ex) {
                         throw new RuntimeException(ex);
                     }
    @@ -153,4 +158,7 @@ public void shutdown() {
             }
         }
     
    +    public AgentExecution getAgentExecution() {
    +        return agentExecution;
    +    }
     }
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    index f1bad130..8a5e7d7a 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/BotController.java
    @@ -55,7 +55,7 @@ public ResponseEntity<AgentStatus> getStatus() {
         @GetMapping("/describe")
         public ResponseEntity<AgentRegistrationDTO> describeAgent() {
             AgentRegistrationDTO dto = AgentRegistrationDTO.builder()
    -            .agentName(agentConfig.getName())
    +            .agentName(agentConfig.getNamePrefix())
                 .agentPublicKey(agentKeyService.getKeyPair().getPublic().toString())
                 .agentPublicKeyAlgo(agentKeyService.getKeyPair().getPublic().getAlgorithm())
                 .agentType(agentConfig.getType())
    @@ -67,7 +67,7 @@ public ResponseEntity<AgentRegistrationDTO> describeAgent() {
         public ResponseEntity<AgentRegistrationDTO> getRegistration
             () {
             AgentRegistrationDTO dto = AgentRegistrationDTO.builder()
    -            .agentName(agentConfig.getName())
    +            .agentName(agentConfig.getNamePrefix())
                 .agentPublicKey(agentKeyService.getKeyPair().getPublic().toString())
                 .agentPublicKeyAlgo(agentKeyService.getKeyPair().getPublic().getAlgorithm())
                 .build();
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    index 6ecb464d..567c2ff0 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    @@ -6,53 +6,88 @@
     import java.security.GeneralSecurityException;
     import java.util.Base64;
     import java.util.Map;
    +import java.util.UUID;
     import java.util.stream.Collectors;
     import java.util.stream.Stream;
    +import com.fasterxml.jackson.databind.ObjectMapper;
    +import io.sentrius.agent.analysis.agents.agents.ChatAgent;
     import io.sentrius.agent.analysis.api.UserCommunicationService;
    +import io.sentrius.sso.core.services.agents.ZeroTrustClientService;
     import io.sentrius.sso.protobuf.Session;
     import lombok.RequiredArgsConstructor;
     import lombok.extern.slf4j.Slf4j;
    +import org.springframework.beans.factory.annotation.Autowired;
     import org.springframework.stereotype.Component;
    +import org.springframework.web.socket.CloseStatus;
     import org.springframework.web.socket.TextMessage;
     import org.springframework.web.socket.WebSocketSession;
     import org.springframework.web.socket.handler.TextWebSocketHandler;
     
     @Slf4j
     @Component
    -@RequiredArgsConstructor
     public class ChatWSHandler extends TextWebSocketHandler {
     
    -    UserCommunicationService userCommunicationService;
    +    final UserCommunicationService userCommunicationService;
    +    final ZeroTrustClientService zeroTrustClientService;
         // Store active sessions, using session ID or a custom identifier
     
     
    +    private final ChatAgent chatAgent;
    +
    +    @Autowired
    +    public ChatWSHandler(UserCommunicationService userCommunicationService, ZeroTrustClientService zeroTrustClientService, ChatAgent chatAgent) {
    +        this.userCommunicationService = userCommunicationService;
    +        this.zeroTrustClientService = zeroTrustClientService;
    +        this.chatAgent = chatAgent;
    +    }
    +
         @Override
         public void afterConnectionEstablished(WebSocketSession session) throws Exception {
    -        // Extract query parameters from the URI
    +        log.info("New connection established");
             URI uri = session.getUri();
    -        if (uri != null) {
    -            Map<String, String> queryParams = parseQueryParams(uri.getQuery());
    -            String sessionId = queryParams.get("sessionId");
    -
    -
    +        if (uri == null) {
    +            session.close(CloseStatus.BAD_DATA);
    +            return;
    +        }
     
    -            if (sessionId != null) {
    -                // Store the WebSocket session using the session ID from the query parameter
    -                userCommunicationService.createSession(sessionId,session);
    -                log.info("New connection established, session ID: " + sessionId);
    -                // until we have another human on the other side we don't need a thread for this.
    -                //chatListenerService.startChatListener(sessionId, session);
    +        Map<String, String> queryParams = parseQueryParams(uri.getQuery());
    +        Long sessionId = Long.valueOf( queryParams.get("sessionId") );
    +        String chatGroupId = queryParams.get("chatGroupId");
    +        String ztatToken = queryParams.get("ztat");
     
    -            } else {
    -                log.info("Session ID not found in query parameters.");
    -                session.close(); // Close the session if no valid session ID is provided
    -            }
    -        } else {
    -            log.info("No URI available for this session.");
    -            session.close(); // Close the session if URI is unavailable
    +        if (sessionId == null || ztatToken == null) {
    +            log.warn("Missing sessionId or ZTAT");
    +            session.close(CloseStatus.BAD_DATA);
    +            return;
             }
    +
    +        // Store session
    +        userCommunicationService.createSession(queryParams.get("sessionId"), session);
    +        log.info("Session {} created for incoming connection", sessionId);
    +
    +        // Generate and store nonce for this session
    +        String nonce = UUID.randomUUID().toString();
    +        session.getAttributes().put("ztatNonce", nonce);
    +        session.getAttributes().put("ztatToken", ztatToken);
    +        session.getAttributes().put("sessionId", sessionId);
    +
    +        // Send challenge to the client
    +        log.info("Sending challenge to client: {}", nonce);
    +        var challenge = Session.ChatMessage.newBuilder()
    +            .setMessage(String.format("{\"type\":\"challenge\",\"nonce\":\"%s\"}", nonce))
    +            .setSender("agent")
    +            .setChatGroupId(chatGroupId)
    +            .setSessionId(sessionId)
    +            .setTimestamp(System.currentTimeMillis())
    +            .build();
    +        byte[] messageBytes = challenge.toByteArray();
    +        String base64Message = Base64.getEncoder().encodeToString(messageBytes);
    +        session.sendMessage(new TextMessage(
    +            base64Message
    +        ));
         }
     
    +
         @Override
         protected void handleTextMessage(WebSocketSession session, TextMessage message)
             throws IOException, GeneralSecurityException {
    @@ -70,16 +105,48 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message)
                         // Handle the message (e.g., process or respond)
     
     
    +                    var connection = userCommunicationService.getSession(sessionId);
                         // Deserialize the protobuf message
    -                    byte[] messageBytes = Base64.getDecoder().decode(message.getPayload());
    -                    Session.ChatMessage auditLog =
    -                        Session.ChatMessage.parseFrom(messageBytes);
    -                    if (auditLog.getMessage().equals("heartbeat")){
    -                        log.info("heartbeat");
    -                        return;
    -                    }
     
    -                    var connection = userCommunicationService.getSession(sessionId);
    +                        byte[] messageBytes = Base64.getDecoder().decode(message.getPayload());
    +                        Session.ChatMessage auditLog =
    +                            Session.ChatMessage.parseFrom(messageBytes);
    +
    +                        if (auditLog.getMessage().equals("heartbeat")) {
    +                            log.info("heartbeat");
    +                            return;
    +                        }
    +                        var json = new ObjectMapper().readTree(auditLog.getMessage());
    +                        if ("challenge-response".equals(json.get("type").asText())) {
    +                            String signature = json.get("signature").asText();
    +                            String publicKey = json.get("publicKey").asText();
    +                            String nonce = (String) session.getAttributes().get("ztatNonce");
    +                            String ztat = (String) session.getAttributes().get("ztatToken");
    +
    +                            boolean verified =
    +                                zeroTrustClientService.verifyZtatChallenge(chatAgent.getAgentExecution(), ztat, nonce,
    +                                    signature,
    +                                    publicKey);
    +
    +                            if (verified) {
    +                                session.getAttributes().put("verified", true);
    +                                log.info("ZTAT challenge verified for session {}", session.getId());
    +                            } else {
    +                                log.warn("ZTAT challenge failed for session {}", session.getId());
    +                                session.close();
    +                            }
    +                            return;
    +                        } else if ("heartbeat".equals(auditLog.getMessage())) {
    +                            log.info("Received heartbeat from session {}", sessionId);
    +                            return; // Ignore heartbeat messages
    +                        } else {
    +                            log.info("Processing message: {}", auditLog.getMessage());
    +                            // Process the message as needed
    +                            //chatAgent.handleChatMessage(sessionId, auditLog);
    +                        }
    +
    +
    +
     
     
     
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/JwtHandshakeInterceptor.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/JwtHandshakeInterceptor.java
    new file mode 100644
    index 00000000..f2596e98
    --- /dev/null
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/JwtHandshakeInterceptor.java
    @@ -0,0 +1,71 @@
    +package io.sentrius.agent.analysis.api.websocket;
    +
    +import lombok.RequiredArgsConstructor;
    +import lombok.extern.slf4j.Slf4j;
    +import org.springframework.beans.factory.annotation.Autowired;
    +import org.springframework.http.HttpHeaders;
    +import org.springframework.http.server.ServerHttpRequest;
    +import org.springframework.http.server.ServerHttpResponse;
    +import org.springframework.security.oauth2.jwt.Jwt;
    +import org.springframework.security.oauth2.jwt.JwtDecoder;
    +import org.springframework.security.oauth2.jwt.JwtException;
    +import org.springframework.stereotype.Component;
    +import org.springframework.web.socket.server.HandshakeInterceptor;
    +import org.springframework.web.socket.WebSocketHandler;
    +
    +import java.net.URI;
    +import java.util.Arrays;
    +import java.util.Map;
    +
    +@Slf4j
    +@Component
    +public class JwtHandshakeInterceptor implements HandshakeInterceptor {
    +
    +    private final JwtDecoder jwtDecoder;
    +
    +    @Autowired
    +    public JwtHandshakeInterceptor(JwtDecoder jwtDecoder) {
    +        this.jwtDecoder = jwtDecoder;
    +    }
    +
    +    @Override
    +    public boolean beforeHandshake(ServerHttpRequest request, ServerHttpResponse response,
    +                                   WebSocketHandler wsHandler, Map<String, Object> attributes) throws Exception {
    +        log.info("Handshake attempt: {}", request.getURI());
    +
    +        URI uri = request.getURI();
    +        String query = uri.getQuery();
    +        String token = null;
    +
    +        if (query != null && query.contains("ztat=")) {
    +            token = Arrays.stream(query.split("&"))
    +                .filter(s -> s.startsWith("ztat="))
    +                .map(s -> s.substring("ztat=".length()))
    +                .findFirst()
    +                .orElse(null);
    +        }
    +
    +        log.info("Token from query: {}", token);
    +
    +        if (token != null) {
    +            try {
    +                Jwt jwt = jwtDecoder.decode(token);
    +                log.info("JWT decoded: {}", jwt.getClaims());
    +                attributes.put("jwt", jwt);
    +                return true;
    +            } catch (JwtException e) {
    +                log.warn("JWT validation failed: {}", e.getMessage());
    +                return false;
    +            }
    +        }
    +
    +        log.warn("No token found in query string.");
    +        return false;
    +    }
    +
    +    @Override
    +    public void afterHandshake(ServerHttpRequest request, ServerHttpResponse response,
    +                               WebSocketHandler wsHandler, Exception exception) {
    +        log.info("After handshake.");
    +    }
    +}
    \ No newline at end of file
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java
    index 513b89cc..a4fb8f16 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/WebSocketConfig.java
    @@ -1,28 +1,35 @@
     package io.sentrius.agent.analysis.api.websocket;
     
     import lombok.RequiredArgsConstructor;
    +import lombok.extern.slf4j.Slf4j;
     import org.springframework.beans.factory.annotation.Value;
     import org.springframework.context.annotation.Configuration;
     import org.springframework.web.socket.config.annotation.EnableWebSocket;
     import org.springframework.web.socket.config.annotation.WebSocketConfigurer;
     import org.springframework.web.socket.config.annotation.WebSocketHandlerRegistry;
    +import org.springframework.beans.factory.annotation.Autowired;
     
     @Configuration
     @EnableWebSocket
     @RequiredArgsConstructor
    +@Slf4j
     public class WebSocketConfig implements WebSocketConfigurer {
     
         @Value("${agent.listen.websocket:false}") // Default is false
         private boolean listenWebSocket;
     
         private final ChatWSHandler chatWSHandler;
    +
    +    @Autowired
    +    private JwtHandshakeInterceptor jwtHandshakeInterceptor;
    +
         @Override
         public void registerWebSocketHandlers(WebSocketHandlerRegistry registry) {
             if (listenWebSocket) {
    +            log.info("WebSocket is enabled, registering handlers.");
                 registry.addHandler(chatWSHandler, "/api/v1/chat/attach/subscribe")
    -                .setAllowedOriginPatterns("*")
    -                .withSockJS();  // SockJS fallback if needed
    -
    +                .setAllowedOriginPatterns("*");
             }
         }
    -}
    \ No newline at end of file
    +}
    +
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    index 24c2a74e..159c96ee 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/config/AgentConfigOptions.java
    @@ -4,8 +4,6 @@
     import lombok.Setter;
     import lombok.extern.slf4j.Slf4j;
     import org.springframework.boot.context.properties.ConfigurationProperties;
    -import org.springframework.context.annotation.Bean;
    -import org.springframework.context.annotation.Configuration;
     
     @Slf4j
     @ConfigurationProperties(prefix = "agent")
    @@ -14,6 +12,6 @@
     public class AgentConfigOptions {
     
     
    -    private String name;
    +    private String namePrefix;
         private String type;
     }
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java b/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java
    index 8a846bd7..398de64d 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/config/SecurityConfig.java
    @@ -39,13 +39,13 @@ public SecurityFilterChain securityFilterChain(HttpSecurity http) throws Excepti
                 .authorizeHttpRequests(auth -> auth.
                     requestMatchers("/api/v1/agent/bootstrap/**").permitAll(). // Public login endpoint
                     requestMatchers("/actuator/**").permitAll() // Public endpoints
    +                .requestMatchers("/api/v1/chat/attach/subscribe/**").permitAll() // Important!
                     .requestMatchers("/**").fullyAuthenticated())
                 .oauth2ResourceServer(oauth2 -> oauth2
                     .jwt(jwt -> jwt.jwtAuthenticationConverter(jwtAuthenticationConverterForKeycloak()))
                 )
    -            .oauth2Login(oauth2 -> oauth2
    -                .loginPage("/oauth2/authorization/keycloak")
    -                .successHandler(new SimpleUrlAuthenticationSuccessHandler())
    +            .csrf(csrf -> csrf
    +                .ignoringRequestMatchers("/api/v1/chat/subscribe/**") // ✅ Disable only for your WebSocket path
                 )
                 .cors(Customizer.withDefaults());
     
    diff --git a/ai-agent/src/main/resources/chat-helper.properties b/ai-agent/src/main/resources/chat-helper.properties
    index 09affd3b..6005237b 100644
    --- a/ai-agent/src/main/resources/chat-helper.properties
    +++ b/ai-agent/src/main/resources/chat-helper.properties
    @@ -79,4 +79,5 @@ otel.logs.exporter=none
     otel.resource.attributes.service.name=chat-helper
     otel.traces.sampler=always_on
     otel.exporter.otlp.timeout=10s
    -agent.type="chat-helper"
    \ No newline at end of file
    +agent.type="chat-helper"
    +agent.listen.websocket=true
    \ No newline at end of file
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    index 20d858a5..1e3d42ab 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/AgentBootstrapController.java
    @@ -24,6 +24,7 @@
     import io.sentrius.sso.core.services.terminal.SessionTrackingService;
     import jakarta.servlet.http.HttpServletRequest;
     import jakarta.servlet.http.HttpServletResponse;
    +import jakarta.transaction.Transactional;
     import lombok.extern.slf4j.Slf4j;
     import org.springframework.beans.factory.annotation.Value;
     import org.springframework.http.ResponseEntity;
    @@ -79,6 +80,7 @@ public AgentBootstrapController(
     
         @PostMapping("/register")
         // no LimitAccess
    +    @Transactional
         public ResponseEntity<AgentRegistrationDTO> bootstrap(
             @RequestBody AgentRegistrationDTO registrationDTO) throws GeneralSecurityException, IOException {
             log.info("Registering agent {}", registrationDTO);
    @@ -101,9 +103,12 @@ public ResponseEntity<AgentRegistrationDTO> bootstrap(
                 log.info("Registering {}", registrationDTO.getAgentName());
                 User user = userService.getUserByUsername(newDTO.getAgentName());
                 if (user == null) {
    -                    var type = userService.getUserType(
    -                        UserType.createUnknownUser());
    +                    var type = userService.getUserType(UserType.createUnknownUser());
     
    +                    if (type.isEmpty()){
    +                        throw new RuntimeException("No user type found for agent");
    +                    }
    +                    userService.saveUserType(type.get());
                         user = User.builder()
                             .username(newDTO.getAgentName())
                             .name(newDTO.getAgentName())
    @@ -113,7 +118,7 @@ public ResponseEntity<AgentRegistrationDTO> bootstrap(
                             .identityType(IdentityType.NON_PERSON_ENTITY)
                             .build();
                         log.info("Creating new user: {}", user);
    -                    userService.save(user);
    +                    user = userService.save(user);
     
                     try(InputStream terminalHelperStream = getClass().getClassLoader().getResourceAsStream(defaultPolicyFile)) {
                         if (terminalHelperStream == null) {
    @@ -140,3 +145,5 @@ public ResponseEntity<AgentRegistrationDTO> bootstrap(
     
     
     }
    +
    +
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    index b55bf7b7..23f9dbe8 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/ChatApiController.java
    @@ -1,16 +1,26 @@
     package io.sentrius.sso.controllers.api;
     
    +import java.nio.charset.StandardCharsets;
     import java.security.GeneralSecurityException;
    +import java.security.PublicKey;
    +import java.security.Signature;
     import java.time.ZoneOffset;
     import java.util.ArrayList;
    +import java.util.Base64;
     import java.util.List;
     import java.util.stream.Collectors;
     import io.sentrius.sso.core.config.SystemOptions;
     import io.sentrius.sso.core.controllers.BaseController;
     import io.sentrius.sso.core.dto.AgentDTO;
    +import io.sentrius.sso.core.dto.ZtatDTO;
    +import io.sentrius.sso.core.dto.ztat.UserTokenDTO;
    +import io.sentrius.sso.core.dto.ztat.UserTokenResponse;
    +import io.sentrius.sso.core.dto.ztat.ZtatChallengeRequest;
    +import io.sentrius.sso.core.dto.ztat.ZtatRequestDTO;
     import io.sentrius.sso.core.services.UserService;
     import io.sentrius.sso.core.services.agents.AgentService;
     import io.sentrius.sso.core.services.security.CryptoService;
    +import io.sentrius.sso.core.services.security.ZtatTokenService;
     import io.sentrius.sso.core.utils.AccessUtil;
     import io.sentrius.sso.genai.Response;
     import io.sentrius.sso.protobuf.Session.ChatMessage;
    @@ -27,6 +37,7 @@
     import org.springframework.http.ResponseEntity;
     import org.springframework.web.bind.annotation.GetMapping;
     import org.springframework.web.bind.annotation.PostMapping;
    +import org.springframework.web.bind.annotation.RequestBody;
     import org.springframework.web.bind.annotation.RequestHeader;
     import org.springframework.web.bind.annotation.RequestMapping;
     import org.springframework.web.bind.annotation.RequestParam;
    @@ -41,6 +52,7 @@ public class ChatApiController extends BaseController {
         final SessionTrackingService sessionTrackingService;
         final ChatLogRepository chatLogRepository;
         final AgentService agentService;
    +    final ZtatTokenService tokenService;
     
         public ChatApiController(
             UserService userService,
    @@ -48,7 +60,7 @@ public ChatApiController(
             ErrorOutputService errorOutputService,
             AuditService auditService,
             CryptoService cryptoService, SessionTrackingService sessionTrackingService, ChatLogRepository chatLogRepository,
    -        AgentService agentService
    +        AgentService agentService, ZtatTokenService tokenService
         ) {
             super(userService, systemOptions, errorOutputService);
             this.auditService = auditService;
    @@ -56,6 +68,7 @@ public ChatApiController(
             this.sessionTrackingService = sessionTrackingService;
             this.chatLogRepository = chatLogRepository;
             this.agentService = agentService;
    +        this.tokenService = tokenService;
         }
     
         public SessionLog createSession(@RequestParam String username, @RequestParam String ipAddress) {
    @@ -107,13 +120,45 @@ public ResponseEntity<List<AgentDTO>> listAvailableAgents(
     
             List<AgentDTO> availableAgents = agentService.getAvailableAgents();
     
    -
    -
             // get a list of registered agents.
     
             return ResponseEntity.ok(availableAgents);
         }
     
    +    @PostMapping("/ztat")
    +    public ResponseEntity<UserTokenResponse> issueZtat(@RequestBody UserTokenDTO request) {
    +        String ztat = tokenService.issueZtat(request.getUserId(), request.getSessionId(), request.getPublicKey());
    +        return ResponseEntity.ok(new UserTokenResponse(ztat));
    +    }
    +
    +
    +    @PostMapping("/ztat/verify")
    +    public ResponseEntity<Boolean> verifyZtat(@RequestBody ZtatChallengeRequest request) {
    +        try {
    +            var claims = tokenService.parseZtat(request.getZtat()).getBody();
    +
    +            // Check expiration and claims
    +            String expectedKeyfp = claims.get("keyfp", String.class);
    +            String actualKeyfp = tokenService.computeFingerprint(request.getPublicKey());
    +
    +            if (!expectedKeyfp.equals(actualKeyfp)) {
    +                return ResponseEntity.ok(false);
    +            }
    +
    +            PublicKey key = CryptoService.decodePublicKey(request.getPublicKey(), "EC");
    +
    +            Signature sig = Signature.getInstance("SHA256withECDSA");
    +            sig.initVerify(key);
    +            sig.update(request.getNonce().getBytes(StandardCharsets.UTF_8));
    +            boolean verified = sig.verify(Base64.getDecoder().decode(request.getSignature()));
    +
    +            return ResponseEntity.ok(verified);
    +        } catch (Exception e) {
    +            log.warn("ZTAT validation error", e);
    +            return ResponseEntity.ok(false);
    +        }
    +    }
    +
     
     
     
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java
    index f17dd850..a82edc5e 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/ZeroTrustATApiController.java
    @@ -1,8 +1,12 @@
     package io.sentrius.sso.controllers.api;
     
    +import java.nio.charset.StandardCharsets;
     import java.security.GeneralSecurityException;
    +import java.security.PublicKey;
    +import java.security.Signature;
     import java.sql.SQLException;
     import java.util.ArrayList;
    +import java.util.Base64;
     import java.util.List;
     import java.util.Map;
     import java.util.Objects;
    @@ -11,6 +15,9 @@
     import io.sentrius.sso.core.config.SystemOptions;
     import io.sentrius.sso.core.controllers.BaseController;
     import io.sentrius.sso.core.dto.ZtatDTO;
    +import io.sentrius.sso.core.dto.ztat.UserTokenDTO;
    +import io.sentrius.sso.core.dto.ztat.UserTokenResponse;
    +import io.sentrius.sso.core.dto.ztat.ZtatChallengeRequest;
     import io.sentrius.sso.core.dto.ztat.ZtatRequestDTO;
     import io.sentrius.sso.core.model.security.enums.ApplicationAccessEnum;
     import io.sentrius.sso.core.model.security.enums.ZeroTrustAccessTokenEnum;
    @@ -21,8 +28,11 @@
     import io.sentrius.sso.core.services.NotificationService;
     import io.sentrius.sso.core.services.UserService;
     import io.sentrius.sso.core.services.agents.AgentService;
    +import io.sentrius.sso.core.services.security.CryptoService;
    +import io.sentrius.sso.core.services.security.EcdsaSignatureUtil;
     import io.sentrius.sso.core.services.security.KeycloakService;
     import io.sentrius.sso.core.services.security.ZeroTrustAccessTokenService;
    +import io.sentrius.sso.core.services.security.ZtatTokenService;
     import jakarta.servlet.http.HttpServletRequest;
     import jakarta.servlet.http.HttpServletResponse;
     import lombok.extern.slf4j.Slf4j;
    @@ -46,19 +56,22 @@ public class ZeroTrustATApiController extends BaseController {
         private final NotificationService notificationService;
         private final KeycloakService keycloakService;
         private final AgentService agentService;
    +    final ZtatTokenService tokenService;
    +
     
     
         protected ZeroTrustATApiController(
             UserService userService, SystemOptions systemOptions,
             ErrorOutputService errorOutputService, ZeroTrustAccessTokenService ztatService, NotificationService notificationService,
             KeycloakService keycloakService,
    -        AgentService agentService
    +        AgentService agentService, ZtatTokenService tokenService
         ) {
             super(userService, systemOptions, errorOutputService);
             this.ztatService = ztatService;
             this.notificationService=notificationService;
             this.keycloakService = keycloakService;
             this.agentService = agentService;
    +        this.tokenService = tokenService;
         }
     
         @GetMapping("/my/current")
    @@ -313,4 +326,42 @@ public ResponseEntity<?> listZtatRequests(@RequestHeader("Authorization") String
             }
             return ResponseEntity.ok(ztatTracker);
         }
    +
    +    @PostMapping("/jwt/issue")
    +    public ResponseEntity<UserTokenResponse> issueZtat(@RequestBody UserTokenDTO request) {
    +        String ztat = tokenService.issueZtat(request.getUserId(), request.getSessionId(), request.getPublicKey());
    +        return ResponseEntity.ok(new UserTokenResponse(ztat));
    +    }
    +
    +
    +    @PostMapping("/jwt/verify")
    +    public ResponseEntity<Boolean> verifyZtat(@RequestBody ZtatChallengeRequest request) {
    +        try {
    +            var claims = tokenService.parseZtat(request.getZtat()).getBody();
    +
    +            // Check expiration and claims
    +            String expectedKeyfp = claims.get("keyfp", String.class);
    +            String actualKeyfp = tokenService.computeFingerprint(request.getPublicKey());
    +
    +            if (!expectedKeyfp.equals(actualKeyfp)) {
    +                return ResponseEntity.ok(false);
    +            }
    +
    +            PublicKey key = CryptoService.decodePublicKey(request.getPublicKey(), "EC");
    +
    +            byte[] rawSignature = Base64.getDecoder().decode(request.getSignature());
    +            byte[] derSignature = EcdsaSignatureUtil.convertRawSignatureToDer(rawSignature); // <- convert here
    +
    +            Signature sig = Signature.getInstance("SHA256withECDSA");
    +            sig.initVerify(key);
    +            sig.update(request.getNonce().getBytes(StandardCharsets.UTF_8));
    +            boolean verified = sig.verify(derSignature); // <- use DER-encoded signature
    +
    +            return ResponseEntity.ok(verified);
    +        } catch (Exception e) {
    +            log.warn("ZTAT validation error", e);
    +            return ResponseEntity.ok(false);
    +        }
    +    }
    +
     }
    diff --git a/api/src/main/resources/db/migration/V10__Alter_error_output.sql b/api/src/main/resources/db/migration/V10__Alter_error_output.sql
    new file mode 100644
    index 00000000..58d929f4
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V10__Alter_error_output.sql
    @@ -0,0 +1,4 @@
    +ALTER TABLE error_output
    +ALTER COLUMN error_type TYPE VARCHAR(256),
    +    ALTER COLUMN error_location TYPE VARCHAR(256),
    +    ALTER COLUMN error_hash TYPE VARCHAR(256);
    \ No newline at end of file
    diff --git a/api/src/main/resources/db/migration/V11__Alter_error_output.sql b/api/src/main/resources/db/migration/V11__Alter_error_output.sql
    new file mode 100644
    index 00000000..38ca5285
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V11__Alter_error_output.sql
    @@ -0,0 +1,4 @@
    +ALTER TABLE error_output
    +ALTER COLUMN error_type TYPE TEXT,
    +    ALTER COLUMN error_location TYPE TEXT,
    +    ALTER COLUMN error_hash TYPE VARCHAR(256);
    diff --git a/api/src/main/resources/db/migration/V12__Constraints.sql b/api/src/main/resources/db/migration/V12__Constraints.sql
    new file mode 100644
    index 00000000..614424c4
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V12__Constraints.sql
    @@ -0,0 +1,4 @@
    +ALTER TABLE operations_request
    +    ADD CONSTRAINT operations_request_user_id_fkey
    +        FOREIGN KEY (user_id) REFERENCES users(id)
    +            ON DELETE CASCADE;
    diff --git a/api/src/main/resources/db/migration/V13__Constraints2.sql b/api/src/main/resources/db/migration/V13__Constraints2.sql
    new file mode 100644
    index 00000000..6509bff6
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V13__Constraints2.sql
    @@ -0,0 +1,4 @@
    +ALTER TABLE ops_approvals
    +    ADD CONSTRAINT ops_approvals_approver_id_fkey
    +        FOREIGN KEY (approver_id) REFERENCES users(id)
    +            ON DELETE CASCADE;
    diff --git a/api/src/main/resources/db/migration/V14__Constraints2.sql b/api/src/main/resources/db/migration/V14__Constraints2.sql
    new file mode 100644
    index 00000000..56c7b305
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V14__Constraints2.sql
    @@ -0,0 +1,5 @@
    +ALTER TABLE agent_policy_assignments
    +    ADD CONSTRAINT agent_policy_assignments_user_id_fkey
    +        FOREIGN KEY (user_id) REFERENCES users(id)
    +            ON DELETE CASCADE;
    +
    diff --git a/api/src/main/resources/db/migration/V15__Constraints2.sql b/api/src/main/resources/db/migration/V15__Constraints2.sql
    new file mode 100644
    index 00000000..9810b795
    --- /dev/null
    +++ b/api/src/main/resources/db/migration/V15__Constraints2.sql
    @@ -0,0 +1,4 @@
    +ALTER TABLE ops_approvals
    +    ADD CONSTRAINT ops_approvals_ztat_request_id_fkey
    +        FOREIGN KEY (ztat_request_id) REFERENCES operations_request(id)
    +            ON DELETE CASCADE;
    diff --git a/api/src/main/resources/static/js/chat.js b/api/src/main/resources/static/js/chat.js
    index c23318fe..b2a8da54 100644
    --- a/api/src/main/resources/static/js/chat.js
    +++ b/api/src/main/resources/static/js/chat.js
    @@ -12,7 +12,7 @@ window.addEventListener("beforeunload", persistChatSessions);
     
         const chatData = JSON.parse(saved);
         for (const [agentId, data] of Object.entries(chatData)) {
    -        const session = new ChatSession(data.agentId, data.sessionId, data.agentHost, data.messages);
    +        const session = new ChatSession(data.agentName, data.agentId, data.sessionId, data.agentHost, data.messages);
             chatSessions.set(agentId, session);
         }
     })();
    @@ -21,25 +21,126 @@ window.addEventListener("beforeunload", persistChatSessions);
     // Section: ChatSession Class
     // =========================
     class ChatSession {
    -    constructor(agentId, sessionId, agentHost, preloadMessages = []) {
    +    constructor(agentName, agentId, sessionId, agentHost, preloadMessages = []) {
             this.agentId = agentId;
    +        this.agentName = agentName;
             this.sessionId = sessionId;
             this.agentHost = agentHost;
             this.chatGroupId = `${agentId}-${sessionId}`;
             this.messages = preloadMessages || [];
             this.connection = null;
    -
    -        this.connect();
         }
     
    -    connect() {
    -        const protocol = location.protocol === "https:" ? "https" : "http";
    -        const uri = `${protocol}://${this.agentHost}/api/v1/chat/attach/subscribe?sessionId=${encodeURIComponent(this.sessionId)}&chatGroupId=${this.chatGroupId}`;
    -        this.connection = new SockJS(uri);
    -        this.connection.onmessage = (e) => this.handleMessage(e);
    +    async connect() {
    +        const protocol = location.protocol === "https:" ? "wss" : "ws";
    +        const phost = this.agentHost.replace(/^(https?:\/\/)?/, `${protocol}://`);
    +        console.log("Connecting to chat server at:", phost);
    +        // Step 1: Generate ephemeral keypair
    +        const keyPair = await window.crypto.subtle.generateKey(
    +            { name: "ECDSA", namedCurve: "P-256" },
    +            true,
    +            ["sign", "verify"]
    +        );
    +        this.ephemeralKeyPair = keyPair;
    +
    +        const exportedPublicKey = await window.crypto.subtle.exportKey("spki", keyPair.publicKey);
    +        const publicKeyBase64 = btoa(String.fromCharCode(...new Uint8Array(exportedPublicKey)));
    +
    +        // Step 2: Request ZTAT token from backend
    +        const csrfToken = document.getElementById("csrf-token").value;
    +
    +        const ztatResponse = await fetch("/api/v1/zerotrust/accesstoken/jwt/issue", {
    +            method: "POST",
    +            headers: {
    +                "Content-Type": "application/json",
    +                "X-CSRF-TOKEN": csrfToken
    +            },
    +            credentials: "same-origin", // Required to include the cookie
    +            body: JSON.stringify({
    +                sessionId: this.sessionId,
    +                agentId: this.agentId,
    +                publicKey: publicKeyBase64
    +            })
    +        });
    +
    +        if (!ztatResponse.ok) {
    +            console.error("Failed to retrieve ZTAT");
    +            return;
    +        }
    +
    +        const { jwt } = await ztatResponse.json();
    +
    +
    +
    +        // Step 3: Open WebSocket with ZTAT token
    +        const uri = `${phost}/api/v1/chat/attach/subscribe?sessionId=${encodeURIComponent(this.sessionId)}&chatGroupId=${this.chatGroupId}&ztat=${encodeURIComponent(jwt)}`;
    +        console.log("Connecting to chat server with ZTAT at:", uri);
    +        this.connection = new WebSocket(uri);
    +
    +        this.connection.onmessage = async (e) => {
    +            try {
    +                console.log("got message:", e.data);
    +                const binary = Uint8Array.from(atob(e.data), c => c.charCodeAt(0));
    +                const chatMsg = proto.io.sentrius.protobuf.ChatMessage.deserializeBinary(binary);
    +
    +                const sender = chatMsg.getSender();
    +                const rawMessage = chatMsg.getMessage();
    +
    +                let parsed;
    +                try {
    +                    console.log("Parsing message:", rawMessage);
    +                    parsed = JSON.parse(rawMessage);
    +                } catch {
    +                    console.warn("Received non-JSON message, treating as raw text");
    +                    parsed = { type: "user-message", message: rawMessage };
    +                }
    +
    +                if (parsed.type === "challenge") {
    +                    const encoder = new TextEncoder();
    +                    const nonceData = encoder.encode(parsed.nonce);
    +
    +                    const signature = await window.crypto.subtle.sign(
    +                        { name: "ECDSA", hash: "SHA-256" },
    +                        this.ephemeralKeyPair.privateKey,
    +                        nonceData
    +                    );
    +
    +                    const signatureBase64 = btoa(String.fromCharCode(...new Uint8Array(signature)));
    +
    +                    const responseMsg = new proto.io.sentrius.protobuf.ChatMessage();
    +                    responseMsg.setSender("user");
    +                    responseMsg.setMessage(JSON.stringify({
    +                        type: "challenge-response",
    +                        signature: signatureBase64,
    +                        publicKey: publicKeyBase64
    +                    }));
    +
    +                    this.connection.send(btoa(String.fromCharCode(...responseMsg.serializeBinary())));
    +                    return;
    +                }
    +
    +                // Display user-message type
    +                if (parsed.type === "user-message") {
    +                    this.messages.push({ sender, message: parsed.message });
    +
    +                    const activeAgentId = document.getElementById("chat-container").dataset.agentId;
    +                    if (activeAgentId === this.agentId) {
    +                        appendToChatWindow(sender, parsed.message);
    +                    }
    +
    +                    persistChatSessions();
    +                }
    +
    +            } catch (err) {
    +                console.error("Failed to handle protobuf chat message", err);
    +            }
    +        };
    +
    +
             this.connection.onopen = () => this.heartbeat();
         }
     
    +
         handleMessage(e) {
             try {
                 const binary = Uint8Array.from(atob(e.data), c => c.charCodeAt(0));
    @@ -62,7 +163,10 @@ class ChatSession {
         send(text) {
             const msg = new proto.io.sentrius.protobuf.ChatMessage();
             msg.setSender("user");
    -        msg.setMessage(text);
    +        msg.setMessage(JSON.stringify({
    +            type: "user-message",
    +            message: text
    +        }));
     
             this.connection.send(btoa(String.fromCharCode(...msg.serializeBinary())));
             this.messages.push({ sender: "You", message: text });
    @@ -100,17 +204,25 @@ class ChatSession {
     // Section: UI Interaction
     // =========================
     
    -function switchToAgent(agentId, sessionId, agentHost) {
    +export function switchToAgent(agentName,agentId, sessionId, agentHost) {
    +    console.log("Switching to agent:", agentName, sessionId, agentHost);
         let session = chatSessions.get(agentId);
         if (!session) {
    -        session = new ChatSession(agentId, sessionId, agentHost);
    +        console.log("New session creating:");
    +        session = new ChatSession(agentName, agentId, sessionId, agentHost);
    +        session.connect().then(() => {
    +            console.log("Connected to chat server");
    +        });
    +        console.log("New session created:", session);
    +
             chatSessions.set(agentId, session);
         }
     
         const container = document.getElementById("chat-container");
         container.dataset.agentId = agentId;
    +    container.dataset.agentName = agentName;
         container.dataset.agentHost = agentHost;
    -    document.getElementById("chat-agent-name").textContent = agentId;
    +    document.getElementById("chat-agent-name").textContent = agentName;
     
         const messagesDiv = document.getElementById("chat-messages");
         messagesDiv.innerHTML = "";
    @@ -119,9 +231,10 @@ function switchToAgent(agentId, sessionId, agentHost) {
         });
     
         container.style.display = "block";
    +    console.log("Chat container displayed");
     }
     
    -function sendMessage(event) {
    +export function sendMessage(event) {
         if (event.key !== "Enter") return;
     
         const input = document.getElementById("chat-input");
    @@ -138,7 +251,7 @@ function sendMessage(event) {
         input.value = "";
     }
     
    -function appendToChatWindow(sender, message) {
    +export function appendToChatWindow(sender, message) {
         const chatBox = document.getElementById("chat-messages");
         const div = document.createElement("div");
         div.classList.add("chat-message");
    @@ -147,7 +260,7 @@ function appendToChatWindow(sender, message) {
         chatBox.scrollTop = chatBox.scrollHeight;
     }
     
    -function toggleChat() {
    +export function toggleChat() {
         const container = document.getElementById("chat-container");
         container.classList.toggle("hidden");
     }
    @@ -155,10 +268,26 @@ function toggleChat() {
     // =========================
     // Section: Persistence
     // =========================
    -function persistChatSessions() {
    +export function persistChatSessions() {
         const obj = {};
         chatSessions.forEach((session, agentId) => {
             obj[agentId] = session.toJSON();
         });
         localStorage.setItem("openChats", JSON.stringify(obj));
     }
    +
    +
    +// Fetches the list of available agents from the chat API
    +export async function fetchAvailableAgents() {
    +    try {
    +        console.log("Fetching available agents...");
    +        const response = await fetch("/api/v1/chat/agent/list");
    +        if (!response.ok) {
    +            throw new Error(`Failed to fetch agents: ${response.status}`);
    +        }
    +        return await response.json();
    +    } catch (error) {
    +        console.error("Error fetching available agents:", error);
    +        return [];
    +    }
    +}
    \ No newline at end of file
    diff --git a/api/src/main/resources/static/js/dashboard-agents.js b/api/src/main/resources/static/js/dashboard-agents.js
    new file mode 100644
    index 00000000..166d2e79
    --- /dev/null
    +++ b/api/src/main/resources/static/js/dashboard-agents.js
    @@ -0,0 +1,41 @@
    +// api/src/main/resources/static/js/dashboard-agents.js
    +import { fetchAvailableAgents, switchToAgent } from './chat.js';
    +
    +document.addEventListener('DOMContentLoaded', function () {
    +    console.log("Fetching agents 1...");
    +    const agentSelect = document.getElementById('agent-select');
    +    const startChatBtn = document.getElementById('start-chat-btn');
    +
    +    if (!agentSelect || !startChatBtn) {
    +        console.error('Agent select or start chat button not found in DOM');
    +        return;
    +    }
    +
    +    console.log("Fetching agents 2...");
    +    fetchAvailableAgents().then(agents => {
    +        agents.forEach(agent => {
    +            const option = document.createElement('option');
    +            option.value = agent.agentName;
    +            option.textContent = agent.agentName || agent.agentId;
    +            option.dataset.agentHost = agent.agentCallback;
    +            option.dataset.agentId = agent.agentId;
    +            agentSelect.appendChild(option);
    +        });
    +    });
    +
    +    agentSelect.addEventListener('change', function () {
    +        startChatBtn.disabled = !agentSelect.value;
    +    });
    +
    +    startChatBtn.addEventListener('click', function () {
    +        const selected = agentSelect.options[agentSelect.selectedIndex];
    +        if (selected && selected.value) {
    +            console.log("Switching to agent: ", selected.value);
    +            const agentName = selected.value;
    +            const agentHost = selected.dataset.agentHost;
    +            const agentId = selected.dataset.agentId;
    +            const sessionId = Date.now().toString();
    +            switchToAgent(agentName, agentId, sessionId, agentHost);
    +        }
    +    });
    +});
    \ No newline at end of file
    diff --git a/api/src/main/resources/templates/sso/dashboard.html b/api/src/main/resources/templates/sso/dashboard.html
    index 0ed1407d..37500221 100755
    --- a/api/src/main/resources/templates/sso/dashboard.html
    +++ b/api/src/main/resources/templates/sso/dashboard.html
    @@ -3,6 +3,8 @@
     <head>
         <meta th:replace="~{fragments/header}">
         <title>[[${systemOptions.systemLogoName}]] - Dashboard</title>
    +    <script th:src="@{/node/js/google-protobuf/google-protobuf.js}"></script>
    +    <script th:src="@{/js/bundled_session_pb.js}"></script>
         <script type="module" th:src="@{/js/chat.js}"></script>
         <script>
             document.addEventListener("DOMContentLoaded", function() {
    @@ -446,9 +448,16 @@ <h5 class="card-title">AI Admin Operations</h5>
                                         <a href="/api/v1/users/list" class="btn btn-danger">Build Automation</a>
                                         <a href="#" class="btn btn-primary" data-bs-toggle="modal"
                                            data-bs-target="#userFormModal">Usage Patterns</a>
    -                                    <a href="#" class="btn btn-primary" data-bs-toggle="modal"
    +                                    chat-container                                    <a href="#" class="btn btn-primary" data-bs-toggle="modal"
                                            data-bs-target="#userFormModal">Usage Patterns</a>
                                     </div>
    +                                <div class="mb-3">
    +                                    <label for="agent-select" class="form-label">Chat with Agent:</label>
    +                                    <select id="agent-select" class="form-select">
    +                                        <option value="">Select an agent...</option>
    +                                    </select>
    +                                    <button id="start-chat-btn" class="btn btn-primary mt-2" disabled>Start Chat</button>
    +                                </div>
                                 </div>
                             </div>
                         </div>
    @@ -523,6 +532,7 @@ <h3>Open Terminals</h3>
     <script type="module" th:src="@{/js/add_system.js}" defer></script>
     <script type="module" th:src="@{/js/add_user.js}" defer></script>
     <script type="module" th:src="@{/js/add_group.js}" defer></script>
    +<script type="module" th:src="@{/js/dashboard-agents.js}" defer></script>
     
     <script>
         document.addEventListener('DOMContentLoaded', function () {
    @@ -765,6 +775,7 @@ <h3>Open Terminals</h3>
             });
         });
     
    +
     </script>
     </body>
     </html>
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenDTO.java b/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenDTO.java
    new file mode 100644
    index 00000000..69c9ffb6
    --- /dev/null
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenDTO.java
    @@ -0,0 +1,10 @@
    +package io.sentrius.sso.core.dto.ztat;
    +
    +import lombok.Getter;
    +
    +@Getter
    +public class UserTokenDTO {
    +    String userId;
    +    String sessionId;
    +    String publicKey;
    +}
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenResponse.java b/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenResponse.java
    new file mode 100644
    index 00000000..605079e1
    --- /dev/null
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/ztat/UserTokenResponse.java
    @@ -0,0 +1,10 @@
    +package io.sentrius.sso.core.dto.ztat;
    +
    +import lombok.AllArgsConstructor;
    +import lombok.Getter;
    +
    +@Getter
    +@AllArgsConstructor
    +public class UserTokenResponse {
    +    String jwt;
    +}
    diff --git a/core/src/main/java/io/sentrius/sso/core/dto/ztat/ZtatChallengeRequest.java b/core/src/main/java/io/sentrius/sso/core/dto/ztat/ZtatChallengeRequest.java
    new file mode 100644
    index 00000000..8629f7bd
    --- /dev/null
    +++ b/core/src/main/java/io/sentrius/sso/core/dto/ztat/ZtatChallengeRequest.java
    @@ -0,0 +1,11 @@
    +package io.sentrius.sso.core.dto.ztat;
    +
    +import lombok.Data;
    +
    +@Data
    +public class ZtatChallengeRequest {
    +    private String ztat;
    +    private String nonce;
    +    private String signature;
    +    private String publicKey;
    +}
    \ No newline at end of file
    diff --git a/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java b/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java
    index 6e71b9a5..aad2eeee 100644
    --- a/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java
    +++ b/core/src/main/java/io/sentrius/sso/core/services/agents/ZeroTrustClientService.java
    @@ -583,4 +583,39 @@ public void approveZtat(AgentExecution execution, String requestId) throws JsonP
                 throw new RuntimeException("Failed to obtain ZTAT: " + response.getStatusCode());
             }
         }
    -}
    +
    +    public boolean verifyZtatChallenge(AgentExecution execution, String ztatToken, String nonce, String signatureBase64, String publicKeyBase64) {
    +        var builder = UriComponentsBuilder
    +            .fromHttpUrl(agentApiUrl)
    +            .path("/api/v1/zerotrust/accesstoken/jwt/verify");
    +
    +        String keycloakJwt = getKeycloakToken();
    +        HttpHeaders headers = new HttpHeaders();
    +        headers.set("ztat_token", execution.getZtatToken());
    +        headers.setBearerAuth(keycloakJwt);
    +        headers.set("communication_id", execution.getCommunicationId());
    +        headers.setContentType(MediaType.APPLICATION_JSON);
    +
    +        Map<String, String> body = Map.of(
    +            "ztat", ztatToken,
    +            "nonce", nonce,
    +            "signature", signatureBase64,
    +            "publicKey", publicKeyBase64
    +        );
    +
    +        HttpEntity<Map<String, String>> entity = new HttpEntity<>(body, headers);
    +
    +        try {
    +            ResponseEntity<Boolean> response = restTemplate.exchange(builder.build(true).toUriString(), HttpMethod.POST, entity, Boolean.class);
    +            return Boolean.TRUE.equals(response.getBody());
    +        } catch (HttpClientErrorException e) {
    +            e.printStackTrace();
    +            log.warn("ZTAT challenge verification failed: {}", e.getResponseBodyAsString());
    +            return false;
    +        } catch (Exception ex) {
    +            log.error("Error during ZTAT verification", ex);
    +            return false;
    +        }
    +    }
    +
    +    }
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/model/ErrorOutput.java b/dataplane/src/main/java/io/sentrius/sso/core/model/ErrorOutput.java
    index 05f01cbe..c4ce821b 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/model/ErrorOutput.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/model/ErrorOutput.java
    @@ -26,16 +26,16 @@ public class ErrorOutput {
         @Column(name = "system_id")
         private Integer systemId;
     
    -    @Column(name = "error_type", nullable = false)
    +    @Column(name = "error_type", nullable = false, columnDefinition = "TEXT")
         private String errorType;
     
    -    @Column(name = "error_location")
    +    @Column(name = "error_location", columnDefinition = "TEXT")
         private String errorLocation;
     
         @Column(name = "error_hash", nullable = false)
         private String errorHash;
     
    -    @Column(name = "error_logs", nullable = false)
    +    @Column(name = "error_logs", nullable = false, columnDefinition = "TEXT")
         private String errorLogs;
     
         @Column(name = "log_tm", columnDefinition = "TIMESTAMP DEFAULT CURRENT_TIMESTAMP")
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java b/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java
    index 49adffde..0241b434 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/model/security/AccessControlAspect.java
    @@ -62,6 +62,7 @@ public class AccessControlAspect {
         static List<String> allowedEndpoints = new ArrayList<>();
         static {
             allowedEndpoints.add("/api/v1/zerotrust/accesstoken/status");
    +        allowedEndpoints.add("/api/v1/zerotrust/accesstoken/jwt/verify");
             allowedEndpoints.add("/api/v1/agent/bootstrap/register");
         }
     
    @@ -124,7 +125,7 @@ public void checkLimitAccess(LimitAccess limitAccess) throws SQLException, Gener
                         span.setAttribute("access.limit", limitAccess.toString());
                         var policy = atplPolicyService.getPolicy(operatingUser);
                         if (policy.isEmpty()) {
    -                        log.debug("Access Denied to {} at {}", operatingUser, accessAnnotation);
    +                        log.info("Access Denied to {} at {}", operatingUser, accessAnnotation);
                             throw new ResponseStatusException(HttpStatus.FORBIDDEN, "Policy is required ");
                         }
                         log.info("Found policy {} for {}", policy.get().getPolicyId(), operatingUser.getUsername());
    @@ -158,7 +159,7 @@ public void checkLimitAccess(LimitAccess limitAccess) throws SQLException, Gener
                         }
     
                         if (isAllowedEndpoint(endpoint)) {
    -                        log.debug("Access Granted to {} at {}", operatingUser, accessAnnotation);
    +                        log.info("Access Granted to {} at {}", operatingUser, accessAnnotation);
                             return;
                         } else if (null != endpointRequest && containsEndpoint(endpointRequest.getEndpoints(), endpoint)) {
                             // this endpoint is approved for use.
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/UserService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/UserService.java
    index 11ae8991..0fefdc8f 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/UserService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/UserService.java
    @@ -357,6 +357,7 @@ public Optional<User> findByUsername(String username) {
          * @param user The user to save.
          * @return The saved user object.
          */
    +    @Transactional
         public User save(User user) {
             return UserDB.save(user);
         }
    @@ -378,7 +379,14 @@ public User getUserById(Long id) {
          * @return An optional containing the user type if found, or empty if not found.
          */
         public Optional<UserType> getUserType(UserType baseUser) {
    -        return userTypeRepository.findById(baseUser.getId());
    +        if (baseUser == null || baseUser.getId() == null) {
    +            log.warn("Attempted to get UserType with null baseUser or null ID");
    +            return Optional.empty();
    +        }
    +        log.info("Getting user type for baseUser: {}", baseUser);
    +        var ret = userTypeRepository.findById(baseUser.getId());
    +        log.info("Got user type for baseUser: {}", ret);
    +        return ret;
         }
     
         /**
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    index 4132bf76..61425911 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    @@ -5,7 +5,6 @@
     import java.time.LocalDateTime;
     import java.time.ZoneId;
     import java.util.List;
    -import java.util.Map;
     import java.util.Optional;
     import java.util.UUID;
     import java.util.concurrent.CompletableFuture;
    @@ -14,14 +13,10 @@
     import java.util.concurrent.TimeUnit;
     import com.github.benmanes.caffeine.cache.Cache;
     import com.github.benmanes.caffeine.cache.Caffeine;
    -import com.github.benmanes.caffeine.cache.LoadingCache;
    -import com.google.common.collect.Maps;
     import io.sentrius.sso.core.dto.AgentCommunicationDTO;
     import io.sentrius.sso.core.dto.AgentDTO;
     import io.sentrius.sso.core.dto.AgentHeartbeatDTO;
    -import io.sentrius.sso.core.dto.UserDTO;
     import io.sentrius.sso.core.dto.UserTypeDTO;
    -import io.sentrius.sso.core.dto.ztat.AgentExecution;
     import io.sentrius.sso.core.model.AgentHeartbeat;
     import io.sentrius.sso.core.model.AgentStatus;
     import io.sentrius.sso.core.model.chat.AgentCommunication;
    @@ -42,8 +37,8 @@
     import org.springframework.http.MediaType;
     import org.springframework.http.ResponseEntity;
     import org.springframework.scheduling.annotation.Async;
    +import org.springframework.scheduling.annotation.Scheduled;
     import org.springframework.stereotype.Service;
    -import org.springframework.ui.Model;
     import org.springframework.web.client.RestTemplate;
     
     @Service
    @@ -98,17 +93,25 @@ public AgentHeartbeat getHeartbeat(String agentId) {
     
     
         public List<AgentDTO> getAllAgents(boolean encryptId) {
    -     return getAllAgents(encryptId, List.of());
    +     return getAllAgents(encryptId, List.of(), false);
         }
     
    -    public List<AgentDTO> getAllAgents(boolean encryptId, List<String> filteredIds) {
    +    public List<AgentDTO> getAllAgents(boolean encryptId, List<String> filteredIds, boolean include) {
             return repository.findAll().stream()
                 .filter(heartbeat -> {
    -                var user = userService.getUserByUsername(heartbeat.getAgentId());
    -                return !filteredIds.contains(user.getUserId());
    +                var user = userService.getUserByUsername(heartbeat.getAgentName());
    +                log.info("Agent {}: {}", heartbeat.getAgentId(), user);
    +                log.info("Excluding {}: {}", heartbeat.getAgentId(), filteredIds);
    +                if (include){
    +                    return user != null && filteredIds.contains(user.getUserId());
    +                }
    +                else {
    +                    return user != null && !filteredIds.contains(user.getUserId());
    +                }
                 })
                 .map(heartbeat -> {
    -                var user = userService.getUserByUsername(heartbeat.getAgentId());
    +                log.info("Second Agent {}", heartbeat.getAgentName());
    +                var user = userService.getUserByUsername(heartbeat.getAgentName());
     
                     var dtoBuilder = AgentDTO.builder();
                     if (null != user && user.getAuthorizationType() != UserType.createUnknownUser()){
    @@ -118,6 +121,10 @@ public List<AgentDTO> getAllAgents(boolean encryptId, List<String> filteredIds)
                             dtoBuilder.isRegistered(true);
                             dtoBuilder.lastHeartbeat(heartbeat.getLastHeartbeat().toString());
                             dtoBuilder.agentName(heartbeat.getAgentName());
    +                        var callback = callbackUrls.get(heartbeat.getAgentId());
    +                        if (callback != null) {
    +                            dtoBuilder.agentCallback(callback);
    +                        }
                         }
                         if (encryptId){
                             try {
    @@ -216,7 +223,7 @@ public void setPing(User user, AgentStatus status) {
         }
     
         @Async
    -    public void ping(User user) {
    +    public CompletableFuture<Void> ping(User user) {
             AgentStatus status = pingCache.getIfPresent(user.getUserId());
             log.info("Ping user {}: {}", user.getUserId(), status);
             if (status == null) {
    @@ -254,6 +261,7 @@ public void ping(User user) {
                 }
     
             }
    +        return CompletableFuture.completedFuture(null);
         }
     
         public boolean isAgent(UserTypeDTO userDto) {
    @@ -265,6 +273,33 @@ public void setCallBack(User user, String agentCallbackUrl) {
         }
     
         public List<AgentDTO> getAvailableAgents() {
    -        return getAllAgents(false, callbackUrls.keySet().stream().toList());
    +        return getAllAgents(true, callbackUrls.keySet().stream().toList(), true);
    +    }
    +
    +    @Scheduled(fixedDelay = 60000) // Runs every 60 seconds
    +    @Async
    +    public void pingAndRemoveUnavailableAgents() {
    +        List<AgentHeartbeat> allAgents = repository.findAll();
    +        for (AgentHeartbeat heartbeat : allAgents) {
    +            String agentId = heartbeat.getAgentId();
    +            try {
    +                User user = userService.getUserByUsername(agentId);
    +                if (user == null) {
    +                    // Remove agent if user not found
    +                    repository.delete(heartbeat);
    +                    continue;
    +                }
    +                ping(user).join(); // This will update the pingCache
    +                Optional<AgentStatus> status = getPing(user);
    +                if (status.isEmpty()) {
    +                    // Remove agent if not available
    +                    repository.delete(heartbeat);
    +                    log.info("Removed unavailable agent: {}", agentId);
    +                }
    +            } catch (Exception e) {
    +                repository.delete(heartbeat);
    +                log.info("Removed agent due to exception: {}", agentId, e);
    +            }
    +        }
         }
     }
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java
    index 1ad61fab..9f7e19f3 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/security/CryptoService.java
    @@ -224,4 +224,8 @@ public static String encryptWithPublicKey(String data, PublicKey publicKey) thro
             byte[] encryptedBytes = cipher.doFinal(data.getBytes());
             return Base64.getEncoder().encodeToString(encryptedBytes);
         }
    +
    +    public byte[] getKey() {
    +        return Arrays.copyOf(key, key.length); // defensive copy
    +    }
     }
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/security/EcdsaSignatureUtil.java b/dataplane/src/main/java/io/sentrius/sso/core/services/security/EcdsaSignatureUtil.java
    new file mode 100644
    index 00000000..1f3d21b2
    --- /dev/null
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/security/EcdsaSignatureUtil.java
    @@ -0,0 +1,46 @@
    +package io.sentrius.sso.core.services.security;
    +
    +import java.io.ByteArrayOutputStream;
    +import java.math.BigInteger;
    +
    +public class EcdsaSignatureUtil {
    +
    +    public static byte[] convertRawSignatureToDer(byte[] rawSignature) {
    +        if (rawSignature.length != 64) {
    +            throw new IllegalArgumentException("Invalid ECDSA signature length. Expected 64 bytes.");
    +        }
    +
    +        byte[] r = new byte[32];
    +        byte[] s = new byte[32];
    +        System.arraycopy(rawSignature, 0, r, 0, 32);
    +        System.arraycopy(rawSignature, 32, s, 0, 32);
    +
    +        return derEncode(new BigInteger(1, r), new BigInteger(1, s));
    +    }
    +
    +    private static byte[] derEncode(BigInteger r, BigInteger s) {
    +        try {
    +            ByteArrayOutputStream out = new ByteArrayOutputStream();
    +            out.write(0x30); // SEQUENCE
    +
    +            ByteArrayOutputStream inner = new ByteArrayOutputStream();
    +            encodeInteger(inner, r);
    +            encodeInteger(inner, s);
    +
    +            byte[] encoded = inner.toByteArray();
    +            out.write(encoded.length);
    +            out.write(encoded);
    +
    +            return out.toByteArray();
    +        } catch (Exception e) {
    +            throw new RuntimeException("DER encoding failed", e);
    +        }
    +    }
    +
    +    private static void encodeInteger(ByteArrayOutputStream out, BigInteger value) throws Exception {
    +        byte[] bytes = value.toByteArray();
    +        out.write(0x02); // INTEGER tag
    +        out.write(bytes.length);
    +        out.write(bytes);
    +    }
    +}
    \ No newline at end of file
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZtatTokenService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZtatTokenService.java
    new file mode 100644
    index 00000000..71edf125
    --- /dev/null
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZtatTokenService.java
    @@ -0,0 +1,69 @@
    +package io.sentrius.sso.core.services.security;
    +
    +import io.jsonwebtoken.Claims;
    +import io.jsonwebtoken.Jws;
    +import io.jsonwebtoken.JwtException;
    +import io.jsonwebtoken.Jwts;
    +import io.jsonwebtoken.SignatureAlgorithm;
    +import org.springframework.stereotype.Service;
    +
    +import javax.crypto.SecretKey;
    +import javax.crypto.spec.SecretKeySpec;
    +import java.security.GeneralSecurityException;
    +import java.time.Instant;
    +import java.util.Date;
    +
    +@Service
    +public class ZtatTokenService {
    +
    +    private final CryptoService cryptoService;
    +    private final SecretKey signingKey;
    +
    +    public ZtatTokenService(CryptoService cryptoService) {
    +        this.cryptoService = cryptoService;
    +
    +        // Derive signing key from same key material used in CryptoService
    +        // (It's a shared AES key, but for HMAC use only the first 256 bits)
    +        byte[] sharedKey = cryptoService.getKey(); // expose a `getKey()` method
    +        this.signingKey = new SecretKeySpec(sharedKey, 0, 32, "HmacSHA256");
    +    }
    +
    +    public String issueZtat(String agentId, String sessionId, String publicKeyBase64) {
    +        String keyFingerprint = computeFingerprint(publicKeyBase64);
    +
    +        Instant now = Instant.now();
    +        Instant exp = now.plusSeconds(60); // 1-minute expiry
    +
    +        return Jwts.builder()
    +            .setSubject("ztat-auth")
    +            .claim("agentId", agentId)
    +            .claim("sessionId", sessionId)
    +            .claim("keyfp", keyFingerprint)
    +            .setIssuedAt(Date.from(now))
    +            .setExpiration(Date.from(exp))
    +            .signWith(signingKey, SignatureAlgorithm.HS256)
    +            .compact();
    +    }
    +
    +    public String computeFingerprint(String publicKeyBase64) {
    +        try {
    +            // Use CryptoService's existing hash logic
    +            return cryptoService.hash(publicKeyBase64, null);
    +        } catch (GeneralSecurityException e) {
    +            throw new RuntimeException("Unable to compute fingerprint", e);
    +        }
    +    }
    +
    +    public SecretKey getSigningKey() {
    +        return signingKey;
    +    }
    +
    +    public Jws<Claims> parseZtat(String token) throws JwtException {
    +        return Jwts.parser()
    +            .setSigningKey(signingKey)
    +            .build()
    +            .parseClaimsJws(token);
    +    }
    +
    +
    +}
    diff --git a/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst b/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
    index 545fd447..618792c1 100644
    --- a/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
    +++ b/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/createdFiles.lst
    @@ -110,6 +110,7 @@ io/sentrius/sso/core/model/zt/RequestCommunicationLink.class
     io/sentrius/sso/core/repository/OpsUseRepository.class
     io/sentrius/sso/core/repository/automation/ScriptRepository.class
     io/sentrius/sso/core/model/metadata/TerminalCommand.class
    +io/sentrius/sso/core/services/security/EcdsaSignatureUtil.class
     io/sentrius/sso/automation/RunShellScript.class
     io/sentrius/sso/core/repository/NotificationRepository.class
     io/sentrius/sso/core/services/metadata/TerminalSessionMetadataService.class
    @@ -266,6 +267,7 @@ io/sentrius/sso/core/repository/NotificationRecipientRepository.class
     io/sentrius/sso/core/model/security/AccessControl.class
     io/sentrius/sso/core/model/ErrorOutput.class
     io/sentrius/sso/core/model/install/Configuration.class
    +io/sentrius/sso/core/services/security/ZtatTokenService.class
     io/sentrius/sso/core/model/HostSystem.class
     io/sentrius/sso/core/repository/UserTypeRepository.class
     io/sentrius/sso/core/repository/AutomationExecutionRepository.class
    diff --git a/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst b/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
    index 742dd533..2a1def1e 100644
    --- a/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
    +++ b/dataplane/target/maven-status/maven-compiler-plugin/compile/default-compile/inputFiles.lst
    @@ -168,6 +168,7 @@
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/security/enums/RuleAccessEnum.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/zt/ZTATRequestBase.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/repository/UserThemeRepository.java
    +/mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/services/security/EcdsaSignatureUtil.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/services/security/CookieService.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/zt/OpsApproval.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/users/UserPublicKey.java
    @@ -213,6 +214,7 @@
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/hostgroup/TimeConfigJson.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/repository/WorkHoursRepository.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/config/SystemOptions.java
    +/mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/services/security/ZtatTokenService.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/annotations/LimitAccess.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/integrations/ticketing/TicketService.java
     /mnt/ExtraDrive/repos/Sentrius/dataplane/src/main/java/io/sentrius/sso/core/model/security/zt/JITReason.java
    diff --git a/ops-scripts/local/run-chat-agent.sh b/ops-scripts/local/run-chat-agent.sh
    index bedfe373..d7076ff1 100755
    --- a/ops-scripts/local/run-chat-agent.sh
    +++ b/ops-scripts/local/run-chat-agent.sh
    @@ -74,6 +74,6 @@ pushd ai-agent
     
     mvn spring-boot:run \
       -Dspring-boot.run.jvmArguments="-Xms${MIN_HEAP} -Xmx${MAX_HEAP}" \
    -  -Dspring-boot.run.arguments="--spring.config.location=file:./src/main/resources/chat-helper.properties --agent.ai.config=chat-helper.yaml --agent.name=${AGENT_NAME}"
    +  -Dspring-boot.run.arguments="--spring.config.location=file:./src/main/resources/chat-helper.properties --agent.ai.config=chat-helper.yaml --agent.namePrefix=${AGENT_NAME}"
     
     popd
    diff --git a/sentrius-llm-core/target/jacoco.exec b/sentrius-llm-core/target/jacoco.exec
    deleted file mode 100644
    index c2a2d925883f538fe662cdf1ef7255a12280eb05..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 20649
    zcmcIs33yXQ*Pb*jDYe@a*~(Iu$POvAP|(u7rNu&PTNaTmB)4s7nuL3kLIr8ct^ySi
    z6-3aVRa8DeET~k9sDQE+KSV*HfS{rXg6vEFGk5DvdUIR;@Bi{Vnvyn?nKS3S=RNP7
    ziK@CfR1=CqY*t%uE7LnFs$cY=$Uy@UQoUZARPY=3Y|6&7zgzl(xlg(i^{~<fy2%cU
    z$*!}R_4a%#U96)l1ttrnOPxj;9Cnk{l0!{#P>kI#2v@%S>ipfR$HLJ-@;1FqZz!a6
    z#rhJ;qGKF1m2aXc-6X5kPSHBXX40j?FYL*MdW(fJr&<hFBSpWaia_kciK;^o3T1!B
    z%QWbX;GfnFZOpiKn$j2RlC8zXdW$iIVn@~XZTbG>5x8oO&)Lp>!V}OC@2g@QHk*~U
    z>x?GGU@f8OQe7@(rVMr~okKBJGrXc5rnegkwRxpBs!1&FOzV9%Z>|0YMaqn6fLT~A
    zj1J6X)+L+u3}e&V3v&%*#q?U0id(AN|AX<(`LAqS&~<cslq54EZ+l^ug(iyD(}qHm
    zL2uR#2LtB8M&#+4qGYSZPEE6Gy5nUPGq?9`6RSgmz3&OT!Q%c79Rb^&&F^+LZ7ngu
    z#>`Pw%>Qw>s&;pm+b&&1liKP&2<xkc{nBz!XRGW?&3cCgwx8A+tg!1TV8jBw-DD|9
    zWxYpqo=g*Cr@$IbTI1abj_QFquYZA_^gdHPxD8FQJCwsdQ8X+y-&EkBVRWlSt-&4p
    z8=k)P>xT=FPR4%1j^xAS$lvSo=u&N(-ed;%Yz`ZO?{_Tg)oy<Ea_-%VE}Ukiizs6f
    z>(AOK9~F-2eSiI3`<_dvr@|+*zL0CD!4xCFEttHT#{>rm#EBa#n+-aWKB<x3lxfw&
    z*094wB)}**F?#l>j!Ry+fM9My+)j4bOeErX*Qs-C8%-I(aqJYM%V4r0DlK-C-b_4*
    zc#j@poNl@f;ZvGjM|N&F!$^0zabvR1NEH*uqJ~lSLaWh7jXTXNYSuM+RuvjlH$~C)
    z_&K_T92ksX4C64{wYhe^-NE?Z$3KQ|AF+1->bGP^ad*9Xu9j%j+rS`ApHbngew%v_
    zFHlqHDKZ)P-6k%_gBG{r5E2H8VOaDcD3BCOHn7&^Qsdf$PU9j9E*Mda%;Maql|tp~
    zVM&>MnB>BUu+HX3?u6oJ-wORI;{5nEC{<<@B?L&9zyUEn7i(d=ohsb_Y@&9(=IdIi
    z!Gv8TD+I8hEMx`%ofe~s*gUmFZ+5Uz#aTZ@kFd|qr5XCFOIFm+`_#PcUSN12R<-GT
    zXx6IzW)$n);7p+&Jd*`YMrSaabh(8NyU{w;l5VvYvCiH!3}M~f*+W8W3NvI)ErdDv
    zj#)RtLPHt=<kn9zQ>oJol#Q&8@%6_oUt9Drb5UqDO7^}Q0cwpDW1vkoNCdjXNsOJ=
    z8|=iyDdNlBTqKZj*C7Yv9$z@>M-Iif)F~LcUI+>!Wzi7FfCwW^j0rv=vZ4%za^kYz
    zW8x!YY&EE_%>3NlNx;z@ssIp`E^Xm*Mc~8VoNhJgDC&p0%e<eT3}i~16+V?pGnpYO
    zTBuMgR?RW@pLzG&=_uO!E)l0;&6{ktG88dw2E1Jlvu{y^THym{di>mM*Uk#%sdEmR
    zBIH`m&jOnJ;KFMs&yG1~{^C(#xGx|~THfT8;$IF_qr|#Zd+dO)sY5wz%qyg=Q^^vN
    zt!6ISr@{7G=~5pb+;-b*#T7vZe&H749U|=D3=C!05vSl8QRu~Fyy?co*FVy{or~h?
    zCL_X~xP@ju3o_uWCSX$;#yoJaBJc=dUwec!^+&!4tG66HQMq#U7fQ@b7(<&&6%+%i
    zKOPT$x$f40AIj(6T#CBMOoaCZcZcq(K@K_=Z%nRU{MOjg577Yc&cNeiZYd=5V!%fm
    zMcYe<=`H#KithDLUkywLcU;@2`sVjfEmjJB(W!WJ%yC%Q&`8#s4Gu^n5PVZNs1khq
    zahoBzyGn=8UVyrIUk>NdoKrR115@~B=+4T>^xBtEXYwY-MnW#1))!M#A(ac>3@nWW
    znPt8+6BA~m`*WPW5RBdA$Qr!v{c+VrLeP}@`XBFY**_jd$;?ySe~&C6Y&x(Rykf$p
    zfZCUqaDdye`@w1nOEr?MJgP#@n9fm}0cx1#M*Iyo*P|<!27@i09zUR+`iFBraH&ro
    zr$lVi@qxm}tN428Jr|xDF>unL&j!pw2}&zuSzs<jmzWF`M_b4Yx$y+d(!}F7zH`1R
    zQa7203S<W3y;KO^Iwr$Us}4rkf`m5(t>v95186M}9Mkh`PU9JJ)7>gOH?rzZz;Abp
    zP;c)a>K+;_`w#ozwi-`-CS~tUX5c2J=n%cy1f-m{09EIU9!4A0q#aKA$QZI|_CI#i
    zU*_W*auID`l?s=wNDerga$s&lPQv1K4wX+Z4pJcN=1Km+PPI=0LO$5M?XAmWn|;=f
    z16_}*&n>0$I4O+r%z)9HZ=q6zZ7nAc{!xAWd2TuK9xLF5T~FH`Ha7;}I$m9k@aIi#
    zKY8%0jhh~Um_aNHB>|7#5I*Ud54ZmGlx3;Z%SHHgUlJ+Lh65I4>+NKhIPhRi)aEV}
    z#`xsY6{?(hlb=>9Ldj0^YfI8Ilu$hJ^XdNB&a%_JR9K68E|_<^^#EzacqFJgIz}8%
    zSXZ{5fECP6aP1~4oF0ATHJ?jW-Tsdb7#(oW2j?D%`O$Fu<At&tFM1#w!d$3v#(`Sc
    z)o&&Wz)!E~JY!~2tM9oQ)5CE*qgDhD9Ur#h3y`~0`<y(y4z-`%h?#J716+{J5Kt2=
    zd;ezGcZRTC3VB~b;@l7|RbamYDnKRp;+ZVp^Q)S7LS_<{p2>pjvJOZB5M)ZHci624
    zz6_;wgd2i0>auK<B@gOe*fF}4troH!lOWSWQJh5SEes2Qf`}qOKG@(|O<rE}s0k;P
    zsgvxxHBoqk&OAD5=j|#KuY@L&z4TyTBLN|eB-8f35`h9CQGEK5Gils6i?XC7*~448
    zwZncoirr#a^jCNl_%}E%RzW1qEc>Zu`=Bo8q(Lb^VlpU5U`l?k+{O-%3I$s+cb>eP
    z7rSAotgU#@<J_!X8Q7#3UK&%Fa`8md@3?|p9;!s}7Pv^ynITAZU4x%~V$YOed;9+>
    zjbag6+=E6)?`{hajl&EIxjzk|rnM?O<HgKvy%x6kMu~Xy_yQ!K2wkjS@#2|g2wry7
    zb;&uQIvlkpyAN|OaOi2HNpB%P>k_jww0sHu05@OwKWBD!EWL(uWE{mKXc_PaN=MKU
    z6f6T}lopz~<ab)WSfq^LKMtzt0u}zVSIzlVUv^!r1Wf!|1e|oUPxEhGt?+AcDt-Eq
    z2`!{};NdEDG=S3>(o7a8ru@tC=qGNc|J7sH366Ss-(6B-LKQ^x!b}i7ve@!4)aAkp
    ztg-aqQ_Du8JQ)i;(hh6I%@&rb?dPY)MtbG%RrIoHvNf#I2WXQVCNr$EEin5)d^@h{
    z^5J9Wm;YDh*;k{+YY%<C=(|M~qhv{}Ta<}lBH$UzPiA-Ay6Ds0e|{uIW-p;4mZM&x
    zw#`Sln=jrwEMRrFo77y+aNf6;_b;N`5PIOS2-AWx7vZUqz8{!tnqT3RE$^f7p(YgT
    zxoqSK(lTFT1;z*AU0?t5`Nb&*Ka^@LUY04Z{%HHE{qXFuD|{w@d8VJNu>{IuwibX0
    zU!co`XNu<e1rS|9W#wM)tsa*MB03KEVOo(+RTPef$~dw|sMm!Pw*%si@<pvcJ%XUP
    zxw^Y%;n$N++?QRj$GC1%buP@^40V8^C`gU)-+Q0VzKbJ!OM_gro3LUz?)rgWZFz*+
    zd5<Tb!V~So|Kzl`z0TKdHu93wwTqNOr^|kNivJ7lsd^vx?Cjw017%wXR++{`t;~Oa
    zkrEDziGklsBI|>3K-23La^wwFD8l=X-CO(Fh`d)(2k&O*m{dqD!qGvW4@~Ry^?Io>
    z8-O}Dr4177Aa1eMDm-rUg%c4ytbB^~BrmKj0c;Hpng)FUDgp|g4OF_GDIBJ^3A#Zk
    zoWMvPpg!EnDvJB$?|1t(#DVQVT8S7U<V+F%n1G!stQm0e!|&TfMaw2_ci3|$d0Hax
    zyjt_^j#=~D<#9SfLxrmlw4MyFvnvQ8U;OrGA=i4}Z>C0l$QH>%fCNM+BROPAqzi&(
    zx591x%94`*4h-guAwLnJB-L@b$wTK0C*FvgM_4y6UxJsT=e)bgBh|dHy;h4*^};rj
    zlc2W5HSmje*N&NO|Kas+*(p;3BZV^?R-xvI6D#mpN~}c`?We-eEN*Lzjr`k)GV7-7
    z;j0Fg59=~4j9pI-7RcF;TYeXP0$%0FVK}IsKDf9=ub)r%{^VID-aukc@G(M!6KT6C
    zAJ}+?CEu!6;Wcx@N@iJ`k5vj^cJU(0Wa^(U6<Au>j~mo@>Xs9Wzx%nS3wIJD?-*nj
    zd~V>g067i_d=P@4(d7+Xdz|t^qwDM=ewHFI0>uI~lG3|TtU9i5rFjj-uO(i7=&wVk
    zGS|N>Rhk?1Aq01Majv}%MMvN#TAdt`zx@67O8Nn>%A56;f+!s)^s&Y9CKU<}eHJ|g
    zwTnD<!w(e+<SeBBxDLl-5-WX`gi}7Wh}k#}%hAU!^I32G^A=?*58st7J<SpqsFWA9
    z0zWMU85Mks(VK@s+-hdvpcgA|Shk;P@?W7!Q9zaaU&L1@`)l59oR}jfSAmznw*HuQ
    zt<z@53wxAFq2R3bMqmk7_xy>^?zq?G@y2lb#wL7$a|W$$gM(~|ci-v0*rs$;>mFbd
    z?!}+KomaW0r(B7{2qj38jQAtIF?29<dBHwP>fQpzkjSf(NIbD!D;6qYApj`dhpY(r
    z{ZzMvhU7i5Lgcb|V5vW@7`^3W*NzMAO6h^jh4*7XG8XL^-(bA`P(&p?{J|9t#yF@I
    zo!33dd5}R4B}oBtZ2LOu*q&tvl`0tiqm$TUXgH06b0ng1Qgm+!#xfvj&n;W|)!2xv
    zB~n2^up<vebuQp`COjOFl~a=0-UYul`1W>n*6#<Rk16dtKOrIUf}B?9hWpLBFF^Q@
    ziQRDdyFW!KAv7^8%T(&greWQx)Yy0FT8p;4@=YZkAf{h2Ogt%5h^q|yP8zi2=Yyk9
    zN-gANtHko84w50)3enp$emCCe?~8}5nR#seoGa}(kMo{9cvA`Io1HX3QPtR*_Ses?
    zTYi(@P;nz9K%SAal0Pd<`?bZ(&Qy=A+IsAmY$Ji9_qEw@3t((a%7$~_-ZpNR2A^mW
    zr36O!5t|oS9P0l^(aMNEmp?`+Bo96+4HbDQpRAgw@wv^#*ff9Qaq01whcgf5&-B1~
    zQ`ugVu<Li!xL4OFCXZkBM<;1j<?+TkKpEz+b7#f;nYeI3p-r`bl&4nXP1F6C4ZSq&
    zhHPe1G%tV7uVqh7jRJ~m5^=%1)z6%FzA_IzLrf*_GrYf$-YFrxhUp<jX;2kNO9Fqa
    z!2ioC)P??M@V#Xh+nl@+vrsDHdE3th#h$dq5BZ)I9CC@eyyV259u4`bjc+3o=Pl?U
    z{%U+T=&Q<cXSci~E2Js;8l2^u9gL}jA`#%A4OF|bf1?O|=?Qx`^?_gG8=4bu%@jwm
    zEtRH$S+PZ_-D(NHLc&m++HLZ2`sFnWDrLhSlX<HKg1Q4M(+o^l8qxZ|iDk0wXYNju
    z<*)<4p`f1Em%^+#KNj<o05`49E=D-!$(`y$nekJkk?P^tUf?~0bfIy`uE8O5pPTo>
    z-b-JibQ#9#J~>YR$RKA~Y%hhSKo$(Uw`OxWu6ZNq`^<B?wWzDi$O4O#_G5({iNNpP
    zwf*w1q_0Mx-2eAz(Ds8Oa?$v+$3s6p&>ubReS8VM7oyEW`eB8j93bnQs0!_Xzx>vu
    zgb6*pTAGx^ICD26x2a-c%7QjNfGoCyA}j9nbys=WY}LF3d~^Mlp6Bj0HF6CEinsvD
    ziHMkFLU1%A{L5jn5HQP*Kp`qP_^rNGj#cX|6V5b!@d9UE*)p)sXN0wT)UHrp3Jo!%
    zXuS<i{MkRC=pZ;d=@XWItR}}Y2SpI`%Hn<^160MnN`-tnh@4OO0T-+rvQGb3?LX3<
    zvqv|hHoFiG;WT!f`ts1>X_Y$*Wp~8`Vd@s{Nfm;9JK*3eLw}oHd4E$wnVoS!M-7ob
    zI4(KS*+f_yRN)EEw9DEd^9RVvaiWu$#h#G5DP{8AVxrdwP{6b}85fDoI|e<ddi}&6
    zPC}CR6}LK047*%tdo@G%7y~uZ<w;xGyj;>B%eFD{)&l2}b`5F!`odZ3(EDFK8^3FX
    zQq0!pbb@;gw^~@9M>{}&2Y($!o7g1G=d{PwXViFQ_3hR7(mw5{w7&YEKmZ<OHjb7g
    z!;u#E!12A_+hbobc#M*&E$A+8>LuYgkIhiy{f8~zeZKg>E+uE+lML56n8cFwJ1W=t
    z^Se*DpvFDA;-R0juzFt=DV@iSLPw_tq7MEl{LzZ>hEB|!by76;0QEYZh9^88Ndh=G
    z(S5|K?N9{X@<o$9Ek->@No&)3qY7<+iEyULk`%GJie%MACtkkXr?R5_=M_qJ^O%g_
    zrYtGUZqa}K_R&cXrTM<zH2B_f_r?=31M-V|{H<nzIQP4@6V^^$xcAW$AW2)CE(aOm
    z!Ee8+@2*d^%Lb)aj9}9znGM@6>xmc|6+VA2zhYx)r%0|6mk&u9m(^3yIL-+{g1AqL
    zTBF-b(BIJRnb)tMIb4;)+0y&)vb6%YcD9|JqMLUN4aKLv|ML9!z&ABg?ZIPf>cEIy
    zyGK^&5Pwwd#9!fi54T<)+gT}2`M_WY;TnS6szm=axY^S=&HnwZ^8*EawT^&6iv$Hn
    z@oW(!dTb}wWAVd(rsYrf?cr85)Xyfw8#0Wf2|6EuaIkCjuN?s>TH%*_oeYZHGV-`=
    zA<sKTol!(&7JPx3%T59z;DN#ecdFe#a<WEsLskLj$K*mt98U-#Xi03hK4wo~)tZ$^
    zsl%PEoD(e;E3`}teL8DY{=tI-Z(D_VK-V%%&KG}K?R#FgKl}qJ)fElo;rsQFkl2k}
    zImq63sQqofusg2(`|-NJx@`B~W_cHNlHq*(fI^qzfEoT!_TG!Y2d)p-{Wf^)rp9!U
    z)Sm@SQKR%`kf-~Cij1IT4{uzur~88*sx#7(uTiV2-wxVg2nq<s{frq|c{we5OU>jF
    z9R^PI<`tcxTq)}2*zKdxta!YC_Y2dvoqcUeW9qSbYZYNI(O6<)tn_0Vg#FJsOZIiW
    zeNom+MNUz_3r{F*n*`&46*15KxN=PZ8YQ!7;t+DQBykd4naQ&7_b9xQl(5eJ2ybiA
    ze(EghlX0Bb;vKQvm7kRQfEcv9J>F2!?D)mUUhtPKsgxWy-Lq4kJ@v5C{w`cQa7WV8
    zeNBHsljXQ8fvx|r?<bK^Ex30f6^_7V6aKBi2bWsSbMJH>qeP*2;CxgOK-*W7g=;cL
    zzxvYGo2Dz3#!_G=*OlD77eBnA!bQ4E)5i7a-dt%EH=60z7i^-KRG%iUE3Ww4tt0TE
    z13P{>yRM{GmQ09F$NH`0bepHaaB1j0pO1T`1*+2<eRMHYU!orgL>H|8Ji$RH{O99r
    zuL1(5#{b;ie7Eh=L>JO3g#bakY&Zysa}7pLRVx&UmtR+XcyXR-N24uL42IPWcN9<J
    zukZX$P68kG(T#fpoLH-{@%XikA1se}O?rAPf}Oh^h4>UQiU0vXCteDmru=oa(>-ao
    zx(CA5r8+mQnAn7rnH;Ckl;LGl@o=AYRadwqB_HR!t4YbRHYO12$Ayo7%}lBIbX6n8
    zuw1ykMJ^XMMhxr6TN<y*TfZ&iQj6y~3ED%T=dpvVN<>?(l+$vxKJ**X8_&H`{8QVd
    zN=Jl3Fu7IceFNV2!5f>QW5<L3tmOEnynP5Uq`BK}5QWg#O@T0EbJ&yN0uwA*JKSM5
    zbFXm11ayyV={9>>rx~?5Ts(NJ%H0oAS#>mn9Jz5Ff1TU+N(w|cBrWyoi3dLWALRg+
    z_!6%}(??XUBi6`D5?U|yMd5_^s364$qKUSN_=4|yza6RW_OJh_=Vlo6R9fuTmM%>`
    zzIk)}{Rf)1i&2JB$a0C#4tFZxM9=_@xell{z3FPr_mv^6$&Y@@mj3wbQi<0i6dGHC
    z5s#su-7B~v(tq>*tZ$W$bA;_C-N;-lWk5UIG>Q(307`Rec=@sy;|>=qRh(iqL7bP#
    zvw{fGGZ!!p8ZViE?~fffHXnep8njj86i6-qXP|r?9rMrYK4HnZoH8%(&q6c^H(`gM
    zy|>EQCKH@<Vn;v68%tfN7nz#;+sVp=A-I5Q-xa}iC46&*V^>=mb1vZhy`Zj<mPtWz
    za2NBE9QmXR#>l-I?dN2{73Zv)y|eF^WprZ;tQ3GD_UaIS%UA4jU;^49{Pp#1(;`;v
    zFIPH0Bdb)J=@+W&ASWYaL$9n3V<(9wR$RH8gF@A~u*>1nLC(tIO8i0e5Aj${Fo>rF
    zLxe<v>AVCJn5f1V2Lv)v_viGM)?{AN49|hZ0*3D&3xG8HpyHn(m*3Vf*}F)BB+L@P
    zOxi(ufGJ-U&YyGf)1y1~wO6to?;V62@$x4>cfMP%X}k)zp89Lm6PNOLO2xo>fi0*Y
    zB!);+iMWjd$U*1*w{O=}Hd!&hXG2WZPU4U>LrJdY!1)geaB`EJqT8@VSi$4zaEoT+
    z4r#gKF)xMO%c}&UoN?MO&Dg=T`c+QgmX&w~ZHwzuXYA2K6D>ye@^^INRJej!zYGfN
    zd_;|JKe@!zdS<h&N|DO%L$=LiOfIAhP?b4VT;8pQOu#;_;+&5^IZ>W<eXDGff_thG
    zD2p2x759Xx-(IVU!?6{A9366~XCPv$WO-EJ=jld327(xLxcA{x)8ecnW$SbIsj=rE
    zaHofO3L%9p<24D`cDee!)9Y2qN;V>K$fG?#H0e+AKZx%y#FMjM9a*EKoJe5Mo$zp&
    z7(VzagxK^^w<`8&Kgg3k02V?_wu{t%Ki=IVruV_|$+u9UQl5~j1ci+fqh27HjMnR~
    zNcT_E2P&Kw-(`2z(ac(<Zz>SMt1h{5p+qsl_0xb5AAGh`hr`*<!ZS*TCS)ifG&3x4
    zl4zui?1>^g^LKz4xLdX0x^MnM>)*pUH}W7<f+0m6oqU}@uERhMW7)40V0zR{Z8PQA
    ztFm~hRG^CI=zih&{U6c;r{wHTYebDhK$Foy4g+>Gg8U5qSIAig=RW+SpT@nZQ+U0>
    zXPi_z`9quEv(2Qnfe8H#Ek&DKWU_Gt`my%Dcy91D`^)2RTzu5n900M|<6fk0M){p3
    zkNV!|a3aLvTLo*Ts(QZZlHCz8v^j1pdNDV1El2&~h$Obfzt3DNx$(U0`ILt(>OfnN
    z1ce;JeUnHagYdE;`Ey!r9Q~nEZX^CG%M1A1ADISJ3mnlox>EptZq`%h66cN8ak)hH
    z{0*SgTl=rrcR?bPG|dIkl^4`|>BgWT9163_2CECRN3Hit4tE}NK|5V4_ltfb8k{BQ
    z^&o=h4E$|}Sh!G&obj4q{8aaOUEa9$b~Hz16|tRgflT=B5d+*uZn#yV>2(!O>vqCf
    z-r_vnh;ZY(A?w0zt9ZQBU_gQR+K9igH{x&p3xA@*bg$#{Gj?4#$rUS)=t2{|sB|^u
    zr&WSK%?>JhZ^QE3#;9}((ZYre0G!nlq8f&0o=<IiXS~kVP^J_LDw+CO-2|WN+03xw
    zdP|E^&S5cM^jIO!^ZcIc-v_<pvQPQ5x<Mt|m0(Gdxsy!L0mELC2iawR+>_T{7#BN)
    z6P6X-*^R1X1Ip(DgETtK@O>svA-sOuO-J07_^Yy!%HvX<g;@?NfKqsQJ3z<MFPi51
    zT+@FhOB>{am1mx@?c;8Ke(zz+K>SMj_lJfq_WKTvlwl7Z;8;)FCgvrl2}1jNN~uL(
    zY%-9SIU&YMw^JkEFnl5J^Zu<PZfsC0rYEuItvbFRif5t()ItJn_}fLry8EM&by5s(
    zJl|$*H_Bu$Br{{0zi}!8m%qB9DE*x!v!$8E>ws>y7ZO6cnh%<4oVIh$OA8hadsZqx
    zh(0K8L>&cVxbKhA2@uNnnThlZK+{6)*f(eA%=^;9r~Z&E5Oe8IRKBFWDTCX`o+&H4
    zUD^s~#2niCPU5>Aq?Z81@jUjq&gr<JQ-sb;>8&C*w)0%^X&tVrBMEw7+k{oCN3FQD
    zMONJL_y{*ws@EE(Wt-l)Ch-4xGGW%a&uT6!30%DE@ClbMCiyBd-EbTFXaYOTnS)1%
    z2JOk5KlT$Y>OI(@xJ_=!jjLgR$ZU>{bXCl#&6Wy~9{y5yz6k~+rMMB^&3!vhpvoVY
    zPLG+_tmcco(rEQMLLPh*lc-J@2p19_zWC)mt=a{Sfv+HF_!<mv3a-g0&J{9k)?8<8
    z7rcBx&+hNU{Oc!9nes4%K$8hOg=mCt<KY*<#EwZ&`2`0r4Z!V(M|LgVcCn9A)~$<Y
    zf}C)Wz;_-+-=7fC7FL6u8U1gK{$ukRC0;;4SRpBB0b!x~H3GC|1B<o;mj==3Nx@$D
    z(~?=vupe@NkhW%sUaz#{{5O<Is#c!Xv~tbZg|lm4oA77JM^Q2i&}MePUB9|-(1WUt
    zz0FJ1UvLK^3v<`~9s}k4&8T;~5A4<JpcI4}n4TmS$?dg}c!VeIh+BKSOTPosQyK4$
    wWh$nu4uEG~G>PSH<&RUxJ~w{b3lZhAIu9Sd!Z9$I9S%kM{aOaM^xF9RFI5rn>i_@%
    
    diff --git a/sentrius-llm-core/target/site/jacoco/index.html b/sentrius-llm-core/target/site/jacoco/index.html
    deleted file mode 100644
    index 71c732e9..00000000
    --- a/sentrius-llm-core/target/site/jacoco/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>sentrius-llm-core</title><script type="text/javascript" src="jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><span class="el_report">sentrius-llm-core</span></div><h1>sentrius-llm-core</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">3,742 of 3,742</td><td class="ctr2">0%</td><td class="bar">512 of 512</td><td class="ctr2">0%</td><td class="ctr1">559</td><td class="ctr2">559</td><td class="ctr1">124</td><td class="ctr2">124</td><td class="ctr1">303</td><td class="ctr2">303</td><td class="ctr1">30</td><td class="ctr2">30</td></tr></tfoot><tbody><tr><td id="a2"><a href="io.sentrius.sso.genai.model/index.html" class="el_package">io.sentrius.sso.genai.model</a></td><td class="bar" id="b0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="1,711" alt="1,711"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="jacoco-resources/redbar.gif" width="120" height="10" title="212" alt="212"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">249</td><td class="ctr2" id="g0">249</td><td class="ctr1" id="h0">48</td><td class="ctr2" id="i0">48</td><td class="ctr1" id="j0">143</td><td class="ctr2" id="k0">143</td><td class="ctr1" id="l0">13</td><td class="ctr2" id="m0">13</td></tr><tr><td id="a0"><a href="io.sentrius.sso.genai/index.html" class="el_package">io.sentrius.sso.genai</a></td><td class="bar" id="b1"><img src="jacoco-resources/redbar.gif" width="73" height="10" title="1,042" alt="1,042"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="jacoco-resources/redbar.gif" width="95" height="10" title="168" alt="168"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">163</td><td class="ctr2" id="g1">163</td><td class="ctr1" id="h2">29</td><td class="ctr2" id="i2">29</td><td class="ctr1" id="j1">79</td><td class="ctr2" id="k1">79</td><td class="ctr1" id="l2">6</td><td class="ctr2" id="m2">6</td></tr><tr><td id="a3"><a href="io.sentrius.sso.genai.model.endpoints/index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a></td><td class="bar" id="b2"><img src="jacoco-resources/redbar.gif" width="57" height="10" title="816" alt="816"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="jacoco-resources/redbar.gif" width="62" height="10" title="110" alt="110"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">119</td><td class="ctr2" id="g2">119</td><td class="ctr1" id="h1">41</td><td class="ctr2" id="i1">41</td><td class="ctr1" id="j2">64</td><td class="ctr2" id="k2">64</td><td class="ctr1" id="l1">9</td><td class="ctr2" id="m1">9</td></tr><tr><td id="a1"><a href="io.sentrius.sso.genai.api/index.html" class="el_package">io.sentrius.sso.genai.api</a></td><td class="bar" id="b3"><img src="jacoco-resources/redbar.gif" width="12" height="10" title="173" alt="173"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="jacoco-resources/redbar.gif" width="12" height="10" title="22" alt="22"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">28</td><td class="ctr2" id="g3">28</td><td class="ctr1" id="h3">6</td><td class="ctr2" id="i3">6</td><td class="ctr1" id="j3">17</td><td class="ctr2" id="k3">17</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
    deleted file mode 100644
    index 159d3ca2..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest$BaseGenerativeRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest.BaseGenerativeRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_class">BaseGenerativeRequest.BaseGenerativeRequestBuilder</span></div><h1>BaseGenerativeRequest.BaseGenerativeRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">$fillValuesFromInstanceIntoBuilder(BaseGenerativeRequest, BaseGenerativeRequest.BaseGenerativeRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="11" alt="11"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a0"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">$fillValuesFrom(BaseGenerativeRequest)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">user(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">model(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a4"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">BaseGenerativeRequest.BaseGenerativeRequestBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
    deleted file mode 100644
    index add621da..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_class">BaseGenerativeRequest</span></div><h1>BaseGenerativeRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">135 of 135</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">22</td><td class="ctr2">22</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a4"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="55" alt="55"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="18" alt="18"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">10</td><td class="ctr2" id="g0">10</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="74" height="10" title="34" alt="34"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="4" alt="4"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">3</td><td class="ctr2" id="g1">3</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="BaseGenerativeRequest.java.html#L25" class="el_method">BaseGenerativeRequest(BaseGenerativeRequest.BaseGenerativeRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="BaseGenerativeRequest.java.html#L27" class="el_method">BaseGenerativeRequest(String, String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a10"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">setUser(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a8"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">setModel(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a6"><a href="BaseGenerativeRequest.java.html#L34" class="el_method">getUser()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="BaseGenerativeRequest.java.html#L40" class="el_method">getModel()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="BaseGenerativeRequest.java.html#L24" class="el_method">canEqual(Object)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="BaseGenerativeRequest.java.html#L26" class="el_method">BaseGenerativeRequest()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
    deleted file mode 100644
    index 060beacb..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/BaseGenerativeRequest.java.html
    +++ /dev/null
    @@ -1,42 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>BaseGenerativeRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.api</a> &gt; <span class="el_source">BaseGenerativeRequest.java</span></div><h1>BaseGenerativeRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.api;
    -
    -import com.fasterxml.jackson.annotation.JsonInclude;
    -import com.fasterxml.jackson.annotation.JsonProperty;
    -import lombok.AllArgsConstructor;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * &lt;p&gt;
    - * Inspired by liLittleCat's ChatGPT package.
    - *
    - * Codifies the Message request
    - * &lt;/p&gt;
    - *
    - * original @author &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    - *
    - * @since 2023/3/2
    - */
    -/**
    - * Base class for generative requests, defining the necessary methods required to generate a request.
    - */
    -<span class="nc bnc" id="L24" title="All 22 branches missed.">@Data</span>
    -<span class="nc" id="L25">@SuperBuilder(toBuilder = true)</span>
    -<span class="nc" id="L26">@NoArgsConstructor</span>
    -<span class="nc" id="L27">@AllArgsConstructor</span>
    -@JsonInclude(JsonInclude.Include.NON_NULL)
    -public abstract class BaseGenerativeRequest {
    -
    -    /**
    -     * Defined end user id : https://platform.openai.com/docs/guides/safety-best-practices/end-user-ids
    -     */
    -<span class="nc" id="L34">    protected String user;</span>
    -
    -    /**
    -     * Model name, if applicable of the request&quot;
    -     */
    -    @JsonProperty(value = &quot;model&quot;)
    -<span class="nc" id="L40">    protected String model;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
    deleted file mode 100644
    index fa930c11..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.api</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.api</span></div><h1>io.sentrius.sso.genai.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">173 of 173</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="BaseGenerativeRequest.html" class="el_class">BaseGenerativeRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="135" alt="135"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">22</td><td class="ctr2" id="g0">22</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">11</td><td class="ctr2" id="k0">11</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a1"><a href="BaseGenerativeRequest$BaseGenerativeRequestBuilder.html" class="el_class">BaseGenerativeRequest.BaseGenerativeRequestBuilder</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="33" height="10" title="38" alt="38"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">6</td><td class="ctr2" id="k1">6</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
    deleted file mode 100644
    index 0ad1c999..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.api/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.api</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.api</span></div><h1>io.sentrius.sso.genai.api</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">173 of 173</td><td class="ctr2">0%</td><td class="bar">22 of 22</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">17</td><td class="ctr2">17</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="BaseGenerativeRequest.java.html" class="el_source">BaseGenerativeRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="173" alt="173"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="22" alt="22"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">28</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h0">6</td><td class="ctr2" id="i0">6</td><td class="ctr1" id="j0">17</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l0">2</td><td class="ctr2" id="m0">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
    deleted file mode 100644
    index 0b20e7a2..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</span></div><h1>ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">3</td><td class="ctr2">3</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">3</td><td class="ctr2">3</td></tr></tfoot><tbody><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">temperature(Float)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="9" alt="9"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="6" alt="6"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="40" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
    deleted file mode 100644
    index e5786048..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</span></div><h1>ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
    deleted file mode 100644
    index 721af370..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ChatApiEndpointRequest</span></div><h1>ChatApiEndpointRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">175 of 175</td><td class="ctr2">0%</td><td class="bar">28 of 28</td><td class="ctr2">0%</td><td class="ctr1">25</td><td class="ctr2">25</td><td class="ctr1">15</td><td class="ctr2">15</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a4"><a href="ChatApiEndpointRequest.java.html#L65" class="el_method">create()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">11</td><td class="ctr2" id="i0">11</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="38" alt="38"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">7</td><td class="ctr2" id="g1">7</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a8"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="20" alt="20"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">ChatApiEndpointRequest(ChatApiEndpointRequest.ChatApiEndpointRequestBuilder)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="15" alt="15"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">2</td><td class="ctr2" id="g3">2</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">builder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">toString()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html#L31" class="el_method">$default$temperature()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="ChatApiEndpointRequest.java.html#L37" class="el_method">getTemperature()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest.java.html#L30" class="el_method">canEqual(Object)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="ChatApiEndpointRequest.java.html#L41" class="el_method">getEndpoint()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
    deleted file mode 100644
    index e3cb9853..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ChatApiEndpointRequest.java.html
    +++ /dev/null
    @@ -1,82 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ChatApiEndpointRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">ChatApiEndpointRequest.java</span></div><h1>ChatApiEndpointRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -
    -import io.sentrius.sso.genai.model.ApiEndPointRequest;
    -import io.sentrius.sso.genai.model.LLMRequest;
    -import io.sentrius.sso.genai.Message;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * Represents a request to the OpenAI Chat API endpoint.
    - *
    - * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    - * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    - *
    - * Example usage:
    - *
    - * &lt;pre&gt;{@code
    - * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    - *         .build();
    - *
    - * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    - * ChatApiResponse response = endpoint.send(request);
    - * }&lt;/pre&gt;
    - *
    - */
    -<span class="nc bnc" id="L30" title="All 14 branches missed.">@Data</span>
    -<span class="nc bnc" id="L31" title="All 2 branches missed.">@SuperBuilder</span>
    -public class ChatApiEndpointRequest extends ApiEndPointRequest {
    -
    -    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    -
    -    @Builder.Default
    -<span class="nc" id="L37">    private Float temperature = 1.0F;</span>
    -
    -    @Override
    -    public String getEndpoint() {
    -<span class="nc" id="L41">        return API_ENDPOINT;</span>
    -    }
    -
    -    /**
    -     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    -     *
    -     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    -     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    -     * IllegalArgumentException will be thrown.
    -     *
    -     * Example usage:
    -     *
    -     * &lt;pre&gt;{@code
    -     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    -     * }&lt;/pre&gt;
    -     *
    -     *
    -     * @return A new instance of the ChatApiEndpoint.
    -     *
    -     * @throws IllegalArgumentException
    -     *             If the API key is null or empty.
    -     */
    -    @Override
    -    public Object create() {
    -<span class="nc" id="L65">        List&lt;Message&gt; messages = new ArrayList&lt;&gt;();</span>
    -<span class="nc bnc" id="L66" title="All 4 branches missed.">        String role = null == user || user.isEmpty() ? &quot;user&quot; : user;</span>
    -<span class="nc" id="L67">        messages.add(Message.builder().role(role).content(userInput).build());</span>
    -<span class="nc bnc" id="L68" title="All 4 branches missed.">        if (null != systemInput &amp;&amp; !systemInput.isEmpty()) {</span>
    -<span class="nc" id="L69">            messages.add(Message.builder().role(&quot;system&quot;).content(systemInput).build());</span>
    -        }
    -<span class="nc" id="L71">        var requestBody = LLMRequest.builder().model(&quot;gpt-3.5-turbo&quot;).user(role).messages(messages);</span>
    -<span class="nc bnc" id="L72" title="All 2 branches missed.">        if (temperature != 1.0F) {</span>
    -<span class="nc" id="L73">            requestBody.temperature(temperature);</span>
    -        }
    -<span class="nc bnc" id="L75" title="All 2 branches missed.">        if (maxTokens != 4096) {</span>
    -<span class="nc" id="L76">            requestBody.maxTokens(maxTokens);</span>
    -        }
    -<span class="nc" id="L78">        return requestBody.build();</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
    deleted file mode 100644
    index 9822c3c0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.ConversationRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest.ConversationRequestBuilder</span></div><h1>ConversationRequest.ConversationRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="ConversationRequest.java.html#L32" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="ConversationRequest.java.html#L32" class="el_method">temperature(Float)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">chatWithHistory(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="ConversationRequest.java.html#L32" class="el_method">newMessage(LLMResponse)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">ConversationRequest.ConversationRequestBuilder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
    deleted file mode 100644
    index cecf3a9e..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest$ConversationRequestBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.ConversationRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest.ConversationRequestBuilderImpl</span></div><h1>ConversationRequest.ConversationRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
    deleted file mode 100644
    index 8c032520..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">ConversationRequest</span></div><h1>ConversationRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">308 of 308</td><td class="ctr2">0%</td><td class="bar">46 of 46</td><td class="ctr2">0%</td><td class="ctr1">40</td><td class="ctr2">40</td><td class="ctr1">19</td><td class="ctr2">19</td><td class="ctr1">17</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a6"><a href="ConversationRequest.java.html#L73" class="el_method">create()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="97" alt="97"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="10" alt="10"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f1">6</td><td class="ctr2" id="g1">6</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="ConversationRequest.java.html#L31" class="el_method">equals(Object)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="72" alt="72"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="ConversationRequest.java.html#L31" class="el_method">hashCode()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="59" height="10" title="48" alt="48"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="ConversationRequest.java.html#L32" class="el_method">ConversationRequest(ConversationRequest.ConversationRequestBuilder)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="37" alt="37"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">4</td><td class="ctr2" id="g3">4</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a16"><a href="ConversationRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="10" alt="10"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="ConversationRequest.java.html#L32" class="el_method">$default$newMessage()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="8" height="10" title="7" alt="7"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="ConversationRequest.java.html#L32" class="el_method">$default$chatWithHistory()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="ConversationRequest.java.html#L32" class="el_method">builder()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a15"><a href="ConversationRequest.java.html#L31" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a13"><a href="ConversationRequest.java.html#L31" class="el_method">setChatWithHistory(List)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a14"><a href="ConversationRequest.java.html#L31" class="el_method">setNewMessage(LLMResponse)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="ConversationRequest.java.html#L32" class="el_method">$default$temperature()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h2">2</td><td class="ctr2" id="i2">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a11"><a href="ConversationRequest.java.html#L38" class="el_method">getTemperature()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="ConversationRequest.java.html#L46" class="el_method">getChatWithHistory()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a10"><a href="ConversationRequest.java.html#L49" class="el_method">getNewMessage()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a4"><a href="ConversationRequest.java.html#L31" class="el_method">canEqual(Object)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a9"><a href="ConversationRequest.java.html#L42" class="el_method">getEndpoint()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
    deleted file mode 100644
    index 7a48f9da..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/ConversationRequest.java.html
    +++ /dev/null
    @@ -1,91 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ConversationRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">ConversationRequest.java</span></div><h1>ConversationRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -import io.sentrius.sso.genai.Message;
    -import io.sentrius.sso.genai.model.ApiEndPointRequest;
    -import io.sentrius.sso.genai.model.LLMResponse;
    -import io.sentrius.sso.genai.model.LLMRequest;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * Represents a request to the OpenAI Chat API endpoint.
    - *
    - * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    - * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    - * using the {@link ChatApiEndpoint#send(ConversationRequest)} method.
    - *
    - * Example usage:
    - *
    - * &lt;pre&gt;{@code
    - * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    - *         .build();
    - *
    - * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    - * ChatApiResponse response = endpoint.send(request);
    - * }&lt;/pre&gt;
    - *
    - */
    -<span class="nc bnc" id="L31" title="All 30 branches missed.">@Data</span>
    -<span class="nc bnc" id="L32" title="All 6 branches missed.">@SuperBuilder</span>
    -public class ConversationRequest extends ApiEndPointRequest {
    -
    -    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    -
    -    @Builder.Default
    -<span class="nc" id="L38">    private Float temperature = 1.0F;</span>
    -
    -    @Override
    -    public String getEndpoint() {
    -<span class="nc" id="L42">        return API_ENDPOINT;</span>
    -    }
    -
    -    @Builder.Default
    -<span class="nc" id="L46">    private List&lt;LLMResponse&gt; chatWithHistory = new ArrayList&lt;&gt;();</span>
    -
    -    @Builder.Default
    -<span class="nc" id="L49">    private LLMResponse newMessage = LLMResponse.builder().role(&quot;user&quot;).content(&quot;&quot;).build();</span>
    -
    -
    -    /**
    -     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    -     *
    -     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    -     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    -     * IllegalArgumentException will be thrown.
    -     *
    -     * Example usage:
    -     *
    -     * &lt;pre&gt;{@code
    -     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    -     * }&lt;/pre&gt;
    -     *
    -     *
    -     * @return A new instance of the ChatApiEndpoint.
    -     *
    -     * @throws IllegalArgumentException
    -     *             If the API key is null or empty.
    -     */
    -    @Override
    -    public Object create() {
    -<span class="nc" id="L73">        List&lt;Message&gt; messages = new ArrayList&lt;&gt;();</span>
    -<span class="nc" id="L74">        messages.add(Message.builder().role(&quot;system&quot;).content(systemInput).build());</span>
    -<span class="nc bnc" id="L75" title="All 2 branches missed.">        for (LLMResponse chatMessage : chatWithHistory) {</span>
    -<span class="nc" id="L76">            messages.add(Message.builder().role(chatMessage.getRole()).content(chatMessage.getContent()).build());</span>
    -<span class="nc" id="L77">        }</span>
    -<span class="nc" id="L78">        messages.add(Message.builder().role(newMessage.getRole()).content(newMessage.getContent()).build());</span>
    -<span class="nc bnc" id="L79" title="All 4 branches missed.">        String role = null == user || user.isEmpty() ? &quot;user&quot; : user;</span>
    -<span class="nc" id="L80">        var requestBody = LLMRequest.builder().model(&quot;gpt-3.5-turbo&quot;).user(role).messages(messages);</span>
    -<span class="nc bnc" id="L81" title="All 2 branches missed.">        if (temperature != 1.0F) {</span>
    -<span class="nc" id="L82">            requestBody.temperature(temperature);</span>
    -        }
    -<span class="nc bnc" id="L84" title="All 2 branches missed.">        if (maxTokens != 4096) {</span>
    -<span class="nc" id="L85">            requestBody.maxTokens(maxTokens);</span>
    -        }
    -<span class="nc" id="L87">        return requestBody.build();</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
    deleted file mode 100644
    index e26e6e81..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.RawConversationRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest.RawConversationRequestBuilder</span></div><h1>RawConversationRequest.RawConversationRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">42 of 42</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">5</td><td class="ctr2">5</td></tr></tfoot><tbody><tr><td id="a4"><a href="RawConversationRequest.java.html#L31" class="el_method">toString()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a3"><a href="RawConversationRequest.java.html#L31" class="el_method">temperature(Float)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">chatWithHistory(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html#L31" class="el_method">request(LLMRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="9" alt="9"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">RawConversationRequest.RawConversationRequestBuilder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
    deleted file mode 100644
    index 7d78629a..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest$RawConversationRequestBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.RawConversationRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest.RawConversationRequestBuilderImpl</span></div><h1>RawConversationRequest.RawConversationRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
    deleted file mode 100644
    index d0eacfe1..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_class">RawConversationRequest</span></div><h1>RawConversationRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">210 of 210</td><td class="ctr2">0%</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="ctr1">35</td><td class="ctr2">35</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">17</td><td class="ctr2">17</td></tr></tfoot><tbody><tr><td id="a6"><a href="RawConversationRequest.java.html#L30" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a11"><a href="RawConversationRequest.java.html#L30" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="RawConversationRequest.java.html#L31" class="el_method">RawConversationRequest(RawConversationRequest.RawConversationRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="61" height="10" title="37" alt="37"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">4</td><td class="ctr2" id="g2">4</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a16"><a href="RawConversationRequest.java.html#L30" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$chatWithHistory()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a3"><a href="RawConversationRequest.java.html#L31" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a15"><a href="RawConversationRequest.java.html#L30" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a13"><a href="RawConversationRequest.java.html#L30" class="el_method">setChatWithHistory(List)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="RawConversationRequest.java.html#L30" class="el_method">setRequest(LLMRequest)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="RawConversationRequest.java.html#L74" class="el_method">create()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$temperature()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h0">2</td><td class="ctr2" id="i0">2</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="RawConversationRequest.java.html#L31" class="el_method">$default$request()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h1">2</td><td class="ctr2" id="i1">2</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a10"><a href="RawConversationRequest.java.html#L37" class="el_method">getTemperature()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a7"><a href="RawConversationRequest.java.html#L45" class="el_method">getChatWithHistory()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a9"><a href="RawConversationRequest.java.html#L48" class="el_method">getRequest()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a4"><a href="RawConversationRequest.java.html#L30" class="el_method">canEqual(Object)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="RawConversationRequest.java.html#L41" class="el_method">getEndpoint()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
    deleted file mode 100644
    index 044f0785..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/RawConversationRequest.java.html
    +++ /dev/null
    @@ -1,78 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>RawConversationRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model.endpoints</a> &gt; <span class="el_source">RawConversationRequest.java</span></div><h1>RawConversationRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model.endpoints;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -import io.sentrius.sso.genai.model.ApiEndPointRequest;
    -import io.sentrius.sso.genai.model.LLMRequest;
    -import io.sentrius.sso.genai.model.LLMResponse;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * Represents a request to the OpenAI Chat API endpoint.
    - *
    - * This class provides a convenient way to build a request to the OpenAI Chat API. It includes methods to set the input
    - * text, the model to use, and the parameters for the request, among others. Once the request is built, it can be sent
    - * using the {@link ChatApiEndpoint#send(io.sentrius.sso.genai.model.endpoints.RawConversationRequest)} method.
    - *
    - * Example usage:
    - *
    - * &lt;pre&gt;{@code
    - * ChatApiEndpointRequest request = new ChatApiEndpointRequest.builder().model(&quot;davinci&quot;).input(&quot;Hello, world!&quot;)
    - *         .build();
    - *
    - * ChatApiEndpoint endpoint = new ChatApiEndpoint(apiKey);
    - * ChatApiResponse response = endpoint.send(request);
    - * }&lt;/pre&gt;
    - *
    - */
    -<span class="nc bnc" id="L30" title="All 30 branches missed.">@Data</span>
    -<span class="nc bnc" id="L31" title="All 6 branches missed.">@SuperBuilder</span>
    -public class RawConversationRequest extends ApiEndPointRequest {
    -
    -    public static final String API_ENDPOINT = &quot;https://api.openai.com/v1/chat/completions&quot;;
    -
    -    @Builder.Default
    -<span class="nc" id="L37">    private Float temperature = 1.0F;</span>
    -
    -    @Override
    -    public String getEndpoint() {
    -<span class="nc" id="L41">        return API_ENDPOINT;</span>
    -    }
    -
    -    @Builder.Default
    -<span class="nc" id="L45">    private List&lt;LLMResponse&gt; chatWithHistory = new ArrayList&lt;&gt;();</span>
    -
    -    @Builder.Default
    -<span class="nc" id="L48">    private LLMRequest request = LLMRequest.builder().build();</span>
    -
    -
    -    /**
    -     * Creates a new instance of the ChatApiEndpoint with the specified API key.
    -     *
    -     * This method is used to create a new instance of the ChatApiEndpoint with the specified API key. The API key is
    -     * required to send requests to the OpenAI Chat API endpoint. If the API key is invalid or not provided, an
    -     * IllegalArgumentException will be thrown.
    -     *
    -     * Example usage:
    -     *
    -     * &lt;pre&gt;{@code
    -     * ChatApiEndpoint endpoint = ChatApiEndpoint.create(&quot;my-api-key&quot;);
    -     * }&lt;/pre&gt;
    -     *
    -     * @param apiKey
    -     *            The API key to use for requests to the OpenAI Chat API endpoint.
    -     *
    -     * @return A new instance of the ChatApiEndpoint.
    -     *
    -     * @throws IllegalArgumentException
    -     *             If the API key is null or empty.
    -     */
    -    @Override
    -    public Object create() {
    -<span class="nc" id="L74">        return request;</span>
    -    }
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
    deleted file mode 100644
    index bb26cde9..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model.endpoints</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model.endpoints</span></div><h1>io.sentrius.sso.genai.model.endpoints</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">816 of 816</td><td class="ctr2">0%</td><td class="bar">110 of 110</td><td class="ctr2">0%</td><td class="ctr1">119</td><td class="ctr2">119</td><td class="ctr1">41</td><td class="ctr2">41</td><td class="ctr1">64</td><td class="ctr2">64</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a3"><a href="ConversationRequest.html" class="el_class">ConversationRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="308" alt="308"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="46" alt="46"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">40</td><td class="ctr2" id="g0">40</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">17</td><td class="ctr2" id="k0">17</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a6"><a href="RawConversationRequest.html" class="el_class">RawConversationRequest</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="81" height="10" title="210" alt="210"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="36" alt="36"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">35</td><td class="ctr2" id="g1">35</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">17</td><td class="ctr2" id="k1">17</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.html" class="el_class">ChatApiEndpointRequest</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="68" height="10" title="175" alt="175"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="28" alt="28"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">25</td><td class="ctr2" id="g2">25</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j2">11</td><td class="ctr2" id="k2">11</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a4"><a href="ConversationRequest$ConversationRequestBuilder.html" class="el_class">ConversationRequest.ConversationRequestBuilder</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="42" alt="42"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">5</td><td class="ctr2" id="g3">5</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">5</td><td class="ctr2" id="k3">5</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="RawConversationRequest$RawConversationRequestBuilder.html" class="el_class">RawConversationRequest.RawConversationRequestBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="42" alt="42"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">5</td><td class="ctr2" id="g4">5</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">5</td><td class="ctr2" id="k4">5</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a1"><a href="ChatApiEndpointRequest$ChatApiEndpointRequestBuilder.html" class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilder</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="18" alt="18"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">3</td><td class="ctr2" id="g5">3</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">3</td><td class="ctr2" id="k5">3</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a5"><a href="ConversationRequest$ConversationRequestBuilderImpl.html" class="el_class">ConversationRequest.ConversationRequestBuilderImpl</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">2</td><td class="ctr2" id="g6">2</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">2</td><td class="ctr2" id="k6">2</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a2"><a href="ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl.html" class="el_class">ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">2</td><td class="ctr2" id="g7">2</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">2</td><td class="ctr2" id="k7">2</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a8"><a href="RawConversationRequest$RawConversationRequestBuilderImpl.html" class="el_class">RawConversationRequest.RawConversationRequestBuilderImpl</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="7" alt="7"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">2</td><td class="ctr2" id="g8">2</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">2</td><td class="ctr2" id="k8">2</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
    deleted file mode 100644
    index 4ed056a0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model.endpoints/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model.endpoints</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model.endpoints</span></div><h1>io.sentrius.sso.genai.model.endpoints</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">816 of 816</td><td class="ctr2">0%</td><td class="bar">110 of 110</td><td class="ctr2">0%</td><td class="ctr1">119</td><td class="ctr2">119</td><td class="ctr1">41</td><td class="ctr2">41</td><td class="ctr1">64</td><td class="ctr2">64</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a1"><a href="ConversationRequest.java.html" class="el_source">ConversationRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="357" alt="357"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="46" alt="46"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">47</td><td class="ctr2" id="g0">47</td><td class="ctr1" id="h0">19</td><td class="ctr2" id="i0">19</td><td class="ctr1" id="j0">24</td><td class="ctr2" id="k0">24</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a2"><a href="RawConversationRequest.java.html" class="el_source">RawConversationRequest.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="87" height="10" title="259" alt="259"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="93" height="10" title="36" alt="36"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">42</td><td class="ctr2" id="g1">42</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j1">24</td><td class="ctr2" id="k1">24</td><td class="ctr1" id="l1">3</td><td class="ctr2" id="m1">3</td></tr><tr><td id="a0"><a href="ChatApiEndpointRequest.java.html" class="el_source">ChatApiEndpointRequest.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="67" height="10" title="200" alt="200"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="28" alt="28"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">30</td><td class="ctr2" id="g2">30</td><td class="ctr1" id="h1">15</td><td class="ctr2" id="i1">15</td><td class="ctr1" id="j2">16</td><td class="ctr2" id="k2">16</td><td class="ctr1" id="l2">3</td><td class="ctr2" id="m2">3</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
    deleted file mode 100644
    index 59463204..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest$ApiEndPointRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest.ApiEndPointRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ApiEndPointRequest.ApiEndPointRequestBuilder</span></div><h1>ApiEndPointRequest.ApiEndPointRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">67 of 67</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">8</td><td class="ctr2">8</td></tr></tfoot><tbody><tr><td id="a1"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$fillValuesFromInstanceIntoBuilder(ApiEndPointRequest, ApiEndPointRequest.ApiEndPointRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="ApiEndPointRequest.java.html#L12" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="57" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ApiEndPointRequest.java.html#L12" class="el_method">maxTokens(int)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="9" alt="9"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$fillValuesFrom(ApiEndPointRequest)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="ApiEndPointRequest.java.html#L12" class="el_method">user(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a7"><a href="ApiEndPointRequest.java.html#L12" class="el_method">userInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a4"><a href="ApiEndPointRequest.java.html#L12" class="el_method">systemInput(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="ApiEndPointRequest.java.html#L12" class="el_method">ApiEndPointRequest.ApiEndPointRequestBuilder()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
    deleted file mode 100644
    index 4f665136..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ApiEndPointRequest</span></div><h1>ApiEndPointRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">203 of 203</td><td class="ctr2">0%</td><td class="bar">34 of 34</td><td class="ctr2">0%</td><td class="ctr1">31</td><td class="ctr2">31</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a3"><a href="ApiEndPointRequest.java.html#L11" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">14</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a8"><a href="ApiEndPointRequest.java.html#L11" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="55" alt="55"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a1"><a href="ApiEndPointRequest.java.html#L12" class="el_method">ApiEndPointRequest(ApiEndPointRequest.ApiEndPointRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="39" height="10" title="26" alt="26"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="2" alt="2"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">2</td><td class="ctr2" id="g2">2</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a13"><a href="ApiEndPointRequest.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setUser(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a12"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setUserInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setSystemInput(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a9"><a href="ApiEndPointRequest.java.html#L11" class="el_method">setMaxTokens(int)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a6"><a href="ApiEndPointRequest.java.html#L15" class="el_method">getUser()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a7"><a href="ApiEndPointRequest.java.html#L17" class="el_method">getUserInput()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a5"><a href="ApiEndPointRequest.java.html#L19" class="el_method">getSystemInput()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="ApiEndPointRequest.java.html#L22" class="el_method">getMaxTokens()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a2"><a href="ApiEndPointRequest.java.html#L11" class="el_method">canEqual(Object)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html#L12" class="el_method">$default$maxTokens()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
    deleted file mode 100644
    index e6c948c4..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ApiEndPointRequest.java.html
    +++ /dev/null
    @@ -1,44 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ApiEndPointRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">ApiEndPointRequest.java</span></div><h1>ApiEndPointRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * This class represents an API endpoint request that can be used to get the endpoint and create an object.
    - * It provides methods to get the endpoint as a string and create an object from the endpoint.
    - */
    -<span class="nc bnc" id="L11" title="All 32 branches missed.">@Data</span>
    -<span class="nc bnc" id="L12" title="All 2 branches missed.">@SuperBuilder(toBuilder = true)</span>
    -public abstract class ApiEndPointRequest {
    -
    -<span class="nc" id="L15">    protected String user;</span>
    -
    -<span class="nc" id="L17">    protected String userInput;</span>
    -
    -<span class="nc" id="L19">    protected String systemInput;</span>
    -
    -    @Builder.Default
    -<span class="nc" id="L22">    protected int maxTokens = 4096;</span>
    -
    -    /**
    -     * Returns the endpoint of the API request. The endpoint refers to the specific location of the resource being accessed by the request.
    -     * Examples of endpoints may include &quot;/users&quot; or &quot;/products&quot;.
    -     *
    -     * @return a String representing the endpoint of the request.
    -     */
    -    public abstract String getEndpoint();
    -
    -    /**
    -     * Creates an instance of the API endpoint request.
    -     *
    -     * @return An {@code Object} representing the API endpoint request. The actual
    -     *         type of the returned object depends on the implementation of this
    -     *         method in the subclass.
    -     *
    -     * @see ApiEndPointRequestBuilder
    -     *
    -     */
    -    public abstract Object create();
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
    deleted file mode 100644
    index 320c853b..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule$ComplianceRuleBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule.ComplianceRuleBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ComplianceRule.ComplianceRuleBuilder</span></div><h1>ComplianceRule.ComplianceRuleBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">18 of 18</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">4</td><td class="ctr2">4</td></tr></tfoot><tbody><tr><td id="a0"><a href="ComplianceRule.java.html#L22" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="6" alt="6"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a2"><a href="ComplianceRule.java.html#L22" class="el_method">rule(String)</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="100" height="10" title="5" alt="5"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ComplianceRule.java.html#L22" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="4" alt="4"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html#L22" class="el_method">ComplianceRule.ComplianceRuleBuilder()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
    deleted file mode 100644
    index bc9aa33c..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">ComplianceRule</span></div><h1>ComplianceRule</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">85 of 85</td><td class="ctr2">0%</td><td class="bar">14 of 14</td><td class="ctr2">0%</td><td class="ctr1">16</td><td class="ctr2">16</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a4"><a href="ComplianceRule.java.html#L21" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="38" alt="38"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="12" alt="12"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">7</td><td class="ctr2" id="g0">7</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="ComplianceRule.java.html#L21" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="2" alt="2"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">2</td><td class="ctr2" id="g1">2</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="ComplianceRule.java.html#L23" class="el_method">ComplianceRule(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="6" alt="6"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a0"><a href="ComplianceRule.java.html#L22" class="el_method">builder()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="ComplianceRule.java.html#L21" class="el_method">setRule(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="ComplianceRule.java.html#L21" class="el_method">toString()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a5"><a href="ComplianceRule.java.html#L27" class="el_method">getRule()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html#L21" class="el_method">canEqual(Object)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="ComplianceRule.java.html#L24" class="el_method">ComplianceRule()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
    deleted file mode 100644
    index 430df2f7..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/ComplianceRule.java.html
    +++ /dev/null
    @@ -1,29 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>ComplianceRule.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">ComplianceRule.java</span></div><h1>ComplianceRule.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -
    -/**
    - * The ComplianceRule class represents a set of rules that must be followed to comply with a certain standard or regulation.
    - * It provides various methods for defining and enforcing compliance rules.
    - *
    - * This class contains the following methods:
    - * &lt;ul&gt;
    - *     &lt;li&gt;addRule(): Adds a new rule to the set of compliance rules&lt;/li&gt;
    - *     &lt;li&gt;deleteRule(): Removes a rule from the set of compliance rules&lt;/li&gt;
    - *     &lt;li&gt;checkCompliance(): Checks whether a given set of data complies with the defined rules&lt;/li&gt;
    - * &lt;/ul&gt;
    - *
    - * For more information about each method, refer to their respective Javadoc.
    - */
    -<span class="nc bnc" id="L21" title="All 14 branches missed.">@Data</span>
    -<span class="nc" id="L22">@Builder</span>
    -<span class="nc" id="L23">@AllArgsConstructor</span>
    -<span class="nc" id="L24">@NoArgsConstructor</span>
    -public class ComplianceRule {
    -
    -<span class="nc" id="L27">    String rule;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
    deleted file mode 100644
    index 0d64ac25..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation$ConversationBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation.ConversationBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">Conversation.ConversationBuilder</span></div><h1>Conversation.ConversationBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">58 of 58</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a0"><a href="Conversation.java.html#L11" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Conversation.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="82" height="10" title="13" alt="13"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a5"><a href="Conversation.java.html#L11" class="el_method">terminalMessages(List)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a3"><a href="Conversation.java.html#L11" class="el_method">previousMessages(List)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Conversation.java.html#L11" class="el_method">newUserMessage(LLMResponse)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Conversation.java.html#L11" class="el_method">systemConfines(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Conversation.java.html#L11" class="el_method">Conversation.ConversationBuilder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
    deleted file mode 100644
    index b6e0bbb9..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">Conversation</span></div><h1>Conversation</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">218 of 218</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">34</td><td class="ctr2">34</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">15</td><td class="ctr2">15</td></tr></tfoot><tbody><tr><td id="a4"><a href="Conversation.java.html#L12" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="Conversation.java.html#L12" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Conversation.java.html#L11" class="el_method">Conversation(List, LLMResponse, List, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="15" alt="15"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a14"><a href="Conversation.java.html#L12" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="13" alt="13"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="Conversation.java.html#L11" class="el_method">$default$terminalMessages()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="Conversation.java.html#L11" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a11"><a href="Conversation.java.html#L14" class="el_method">setPreviousMessages(List)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Conversation.java.html#L14" class="el_method">setNewUserMessage(LLMResponse)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a13"><a href="Conversation.java.html#L14" class="el_method">setTerminalMessages(List)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a12"><a href="Conversation.java.html#L14" class="el_method">setSystemConfines(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="Conversation.java.html#L12" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a6"><a href="Conversation.java.html#L17" class="el_method">getPreviousMessages()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a5"><a href="Conversation.java.html#L18" class="el_method">getNewUserMessage()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="Conversation.java.html#L21" class="el_method">getTerminalMessages()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a7"><a href="Conversation.java.html#L23" class="el_method">getSystemConfines()</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
    deleted file mode 100644
    index 90fae4fa..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/Conversation.java.html
    +++ /dev/null
    @@ -1,25 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Conversation.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">Conversation.java</span></div><h1>Conversation.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import java.util.ArrayList;
    -import java.util.List;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.Getter;
    -import lombok.Setter;
    -
    -
    -<span class="nc bnc" id="L11" title="All 2 branches missed.">@Builder</span>
    -<span class="nc bnc" id="L12" title="All 38 branches missed.">@Data</span>
    -@Getter
    -<span class="nc" id="L14">@Setter</span>
    -public class Conversation {
    -
    -<span class="nc" id="L17">    List&lt;LLMResponse&gt; previousMessages;</span>
    -<span class="nc" id="L18">    LLMResponse newUserMessage;</span>
    -
    -    @Builder.Default
    -<span class="nc" id="L21">    List&lt;String&gt; terminalMessages = new ArrayList&lt;&gt;();</span>
    -
    -<span class="nc" id="L23">    String systemConfines;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
    deleted file mode 100644
    index 400df938..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.LLMRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest.LLMRequestBuilder</span></div><h1>LLMRequest.LLMRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">151 of 151</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">14</td><td class="ctr2">14</td></tr></tfoot><tbody><tr><td id="a1"><a href="LLMRequest.java.html#L26" class="el_method">$fillValuesFromInstanceIntoBuilder(LLMRequest, LLMRequest.LLMRequestBuilder)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="51" alt="51"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a13"><a href="LLMRequest.java.html#L26" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="27" alt="27"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">$fillValuesFrom(LLMRequest)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="23" height="10" title="10" alt="10"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a6"><a href="LLMRequest.java.html#L26" class="el_method">messages(List)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="LLMRequest.java.html#L26" class="el_method">temperature(Float)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a12"><a href="LLMRequest.java.html#L26" class="el_method">topP(Float)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a7"><a href="LLMRequest.java.html#L26" class="el_method">n(Integer)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="LLMRequest.java.html#L26" class="el_method">stream(Boolean)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a9"><a href="LLMRequest.java.html#L26" class="el_method">stop(List)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="LLMRequest.java.html#L26" class="el_method">maxTokens(Integer)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a8"><a href="LLMRequest.java.html#L26" class="el_method">presencePenalty(Float)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a2"><a href="LLMRequest.java.html#L26" class="el_method">frequencyPenalty(Float)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a4"><a href="LLMRequest.java.html#L26" class="el_method">logitBias(Map)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="6" alt="6"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a3"><a href="LLMRequest.java.html#L26" class="el_method">LLMRequest.LLMRequestBuilder()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="7" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
    deleted file mode 100644
    index cb995990..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest$LLMRequestBuilderImpl.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.LLMRequestBuilderImpl</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest.LLMRequestBuilderImpl</span></div><h1>LLMRequest.LLMRequestBuilderImpl</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">7 of 7</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">2</td><td class="ctr2">2</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">2</td><td class="ctr2">2</td></tr></tfoot><tbody><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="5" alt="5"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="LLMRequest.java.html#L26" class="el_method">self()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="2" alt="2"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
    deleted file mode 100644
    index 20851bae..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMRequest</span></div><h1>LLMRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">525 of 525</td><td class="ctr2">0%</td><td class="bar">86 of 86</td><td class="ctr2">0%</td><td class="ctr1">72</td><td class="ctr2">72</td><td class="ctr1">14</td><td class="ctr2">14</td><td class="ctr1">29</td><td class="ctr2">29</td></tr></tfoot><tbody><tr><td id="a2"><a href="LLMRequest.java.html#L25" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="191" alt="191"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="66" alt="66"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">34</td><td class="ctr2" id="g0">34</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a13"><a href="LLMRequest.java.html#L25" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="91" height="10" title="146" alt="146"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="20" alt="20"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">11</td><td class="ctr2" id="g1">11</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a16"><a href="LLMRequest.java.html#L26" class="el_method">LLMRequest(LLMRequest.LLMRequestBuilder)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="27" height="10" title="44" alt="44"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a15"><a href="LLMRequest.java.html#L28" class="el_method">LLMRequest(List, Float, Float, Integer, Boolean, List, Integer, Float, Float, Map)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="33" alt="33"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a28"><a href="LLMRequest.java.html#L25" class="el_method">toString()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="25" alt="25"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a27"><a href="LLMRequest.java.html#L26" class="el_method">toBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="6" alt="6"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a0"><a href="LLMRequest.java.html#L26" class="el_method">builder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="LLMRequest.java.html#L25" class="el_method">setMessages(List)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a25"><a href="LLMRequest.java.html#L25" class="el_method">setTemperature(Float)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a26"><a href="LLMRequest.java.html#L25" class="el_method">setTopP(Float)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a21"><a href="LLMRequest.java.html#L25" class="el_method">setN(Integer)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a24"><a href="LLMRequest.java.html#L25" class="el_method">setStream(Boolean)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a23"><a href="LLMRequest.java.html#L25" class="el_method">setStop(List)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a19"><a href="LLMRequest.java.html#L25" class="el_method">setMaxTokens(Integer)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a22"><a href="LLMRequest.java.html#L25" class="el_method">setPresencePenalty(Float)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a17"><a href="LLMRequest.java.html#L25" class="el_method">setFrequencyPenalty(Float)</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a18"><a href="LLMRequest.java.html#L25" class="el_method">setLogitBias(Map)</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="4" alt="4"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a6"><a href="LLMRequest.java.html#L38" class="el_method">getMessages()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a11"><a href="LLMRequest.java.html#L51" class="el_method">getTemperature()</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a12"><a href="LLMRequest.java.html#L65" class="el_method">getTopP()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a7"><a href="LLMRequest.java.html#L75" class="el_method">getN()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a10"><a href="LLMRequest.java.html#L87" class="el_method">getStream()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a9"><a href="LLMRequest.java.html#L97" class="el_method">getStop()</a></td><td class="bar" id="b22"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a5"><a href="LLMRequest.java.html#L108" class="el_method">getMaxTokens()</a></td><td class="bar" id="b23"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a8"><a href="LLMRequest.java.html#L122" class="el_method">getPresencePenalty()</a></td><td class="bar" id="b24"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr><tr><td id="a3"><a href="LLMRequest.java.html#L136" class="el_method">getFrequencyPenalty()</a></td><td class="bar" id="b25"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c25">0%</td><td class="bar" id="d25"/><td class="ctr2" id="e25">n/a</td><td class="ctr1" id="f25">1</td><td class="ctr2" id="g25">1</td><td class="ctr1" id="h25">1</td><td class="ctr2" id="i25">1</td><td class="ctr1" id="j25">1</td><td class="ctr2" id="k25">1</td></tr><tr><td id="a4"><a href="LLMRequest.java.html#L151" class="el_method">getLogitBias()</a></td><td class="bar" id="b26"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c26">0%</td><td class="bar" id="d26"/><td class="ctr2" id="e26">n/a</td><td class="ctr1" id="f26">1</td><td class="ctr2" id="g26">1</td><td class="ctr1" id="h26">1</td><td class="ctr2" id="i26">1</td><td class="ctr1" id="j26">1</td><td class="ctr2" id="k26">1</td></tr><tr><td id="a1"><a href="LLMRequest.java.html#L25" class="el_method">canEqual(Object)</a></td><td class="bar" id="b27"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c27">0%</td><td class="bar" id="d27"/><td class="ctr2" id="e27">n/a</td><td class="ctr1" id="f27">1</td><td class="ctr2" id="g27">1</td><td class="ctr1" id="h27">1</td><td class="ctr2" id="i27">1</td><td class="ctr1" id="j27">1</td><td class="ctr2" id="k27">1</td></tr><tr><td id="a14"><a href="LLMRequest.java.html#L27" class="el_method">LLMRequest()</a></td><td class="bar" id="b28"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="3" alt="3"/></td><td class="ctr2" id="c28">0%</td><td class="bar" id="d28"/><td class="ctr2" id="e28">n/a</td><td class="ctr1" id="f28">1</td><td class="ctr2" id="g28">1</td><td class="ctr1" id="h28">1</td><td class="ctr2" id="i28">1</td><td class="ctr1" id="j28">1</td><td class="ctr2" id="k28">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
    deleted file mode 100644
    index 619f2f7a..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMRequest.java.html
    +++ /dev/null
    @@ -1,153 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">LLMRequest.java</span></div><h1>LLMRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import java.util.List;
    -import java.util.Map;
    -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    -import com.fasterxml.jackson.annotation.JsonProperty;
    -import io.sentrius.sso.genai.Message;
    -import io.sentrius.sso.genai.api.BaseGenerativeRequest;
    -import lombok.AllArgsConstructor;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -import lombok.experimental.SuperBuilder;
    -
    -/**
    - * &lt;p&gt;
    - * Inspired by LiLittleCat's ChatCopmletionRequestBody
    - * &lt;/p&gt;
    - * see:
    - * &lt;a href=&quot;https://platform.openai.com/docs/api-reference/chat&quot;&gt;https://platform.openai.com/docs/api-reference/chat&lt;/a&gt;
    - *
    - * borrowed from &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    - *
    - * @since 2023/3/2
    - */
    -<span class="nc bnc" id="L25" title="All 86 branches missed.">@Data</span>
    -<span class="nc" id="L26">@SuperBuilder(toBuilder = true)</span>
    -<span class="nc" id="L27">@NoArgsConstructor</span>
    -<span class="nc" id="L28">@AllArgsConstructor</span>
    -@JsonIgnoreProperties(ignoreUnknown = true)
    -public class LLMRequest extends BaseGenerativeRequest {
    -    /**
    -     * Required
    -     * &lt;p&gt;
    -     * The messages to generate chat completions for, in the &lt;a
    -     * href=https://platform.openai.com/docs/guides/chat/introduction&gt;chat format&lt;/a&gt;.
    -     */
    -    @JsonProperty(value = &quot;messages&quot;)
    -<span class="nc" id="L38">    private List&lt;Message&gt; messages;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to 1
    -     * &lt;p&gt;
    -     * What sampling temperature to use, between 0 and 2. Higher values like 0.8 will make the output more random, while
    -     * lower values like 0.2 will make it more focused and deterministic.
    -     * &lt;p&gt;
    -     * We generally recommend altering this or `top_p` but not both.
    -     */
    -    @JsonProperty(value = &quot;temperature&quot;)
    -<span class="nc" id="L51">    private Float temperature;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to 1
    -     * &lt;p&gt;
    -     * An alternative to sampling with temperature, called nucleus sampling, where the model considers the results of
    -     * the tokens with top_p probability mass. So 0.1 means only the tokens comprising the top 10% probability mass are
    -     * considered.
    -     * &lt;p&gt;
    -     * We generally recommend altering this or `temperature` but not both.
    -     */
    -    @JsonProperty(value = &quot;top_p&quot;)
    -<span class="nc" id="L65">    private Float topP;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to 1
    -     * &lt;p&gt;
    -     * How many chat completions to generate for each message.
    -     */
    -    @JsonProperty(value = &quot;n&quot;)
    -<span class="nc" id="L75">    private Integer n;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to false
    -     * &lt;p&gt;
    -     * If set, partial message deltas will be sent, like in ChatGPT. Tokens will be sent as data-only &lt;a
    -     * href=https://developer.mozilla.org/en-US/docs/Web/API/Server-sent_events/Using_server-sent_events#event_stream_format&gt;server-sent
    -     * events&lt;/a&gt; as they become available, with the stream terminated by a `data: [DONE]` message.
    -     */
    -    @JsonProperty(value = &quot;stream&quot;)
    -<span class="nc" id="L87">    private Boolean stream;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to null
    -     * &lt;p&gt;
    -     * Up to 4 sequences where the API will stop generating further tokens.
    -     */
    -    @JsonProperty(value = &quot;stop&quot;)
    -<span class="nc" id="L97">    private List&lt;String&gt; stop;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to inf
    -     * &lt;p&gt;
    -     * The maximum number of tokens allowed for the generated answer. By default, the number of tokens the model can
    -     * return will be (4096 - prompt tokens).
    -     */
    -    @JsonProperty(value = &quot;max_tokens&quot;)
    -<span class="nc" id="L108">    private Integer maxTokens;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to 0
    -     * &lt;p&gt;
    -     * Number between -2.0 and 2.0. Positive values penalize new tokens based on whether they appear in the text so far,
    -     * increasing the model's likelihood to talk about new topics.
    -     * &lt;p&gt;
    -     * &lt;a href=https://platform.openai.com/docs/api-reference/parameter-details&gt;See more information about frequency and
    -     * presence penalties.&lt;/a&gt;
    -     */
    -    @JsonProperty(value = &quot;presence_penalty&quot;)
    -<span class="nc" id="L122">    private Float presencePenalty;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to 0
    -     * &lt;p&gt;
    -     * Number between -2.0 and 2.0. Positive values penalize new tokens based on their existing frequency in the text so
    -     * far, decreasing the model's likelihood to repeat the same line verbatim.
    -     * &lt;p&gt;
    -     * &lt;a href=https://platform.openai.com/docs/api-reference/parameter-details&gt;See more information about frequency and
    -     * presence penalties.&lt;/a&gt;
    -     */
    -    @JsonProperty(value = &quot;frequency_penalty&quot;)
    -<span class="nc" id="L136">    private Float frequencyPenalty;</span>
    -
    -    /**
    -     * Optional
    -     * &lt;p&gt;
    -     * Defaults to null
    -     * &lt;p&gt;
    -     * Modify the likelihood of specified tokens appearing in the completion.
    -     * &lt;p&gt;
    -     * Accepts a json object that maps tokens (specified by their token ID in the tokenizer) to an associated bias value
    -     * from -100 to 100. Mathematically, the bias is added to the logits generated by the model prior to sampling. The
    -     * exact effect will vary per model, but values between -1 and 1 should decrease or increase likelihood of
    -     * selection; values like -100 or 100 should result in a ban or exclusive selection of the relevant token.
    -     */
    -    @JsonProperty(value = &quot;logit_bias&quot;)
    -<span class="nc" id="L151">    private Map&lt;Object, Object&gt; logitBias;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
    deleted file mode 100644
    index 0d46c9c7..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse$LLMResponseBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse.LLMResponseBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMResponse.LLMResponseBuilder</span></div><h1>LLMResponse.LLMResponseBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">55 of 55</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">8</td><td class="ctr2">8</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">7</td><td class="ctr2">7</td></tr></tfoot><tbody><tr><td id="a1"><a href="LLMResponse.java.html#L13" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="19" alt="19"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="LLMResponse.java.html#L13" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="63" height="10" title="10" alt="10"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a0"><a href="LLMResponse.java.html#L13" class="el_method">alert(boolean)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a4"><a href="LLMResponse.java.html#L13" class="el_method">role(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="LLMResponse.java.html#L13" class="el_method">content(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="LLMResponse.java.html#L13" class="el_method">terminalMessage(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="31" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a3"><a href="LLMResponse.java.html#L13" class="el_method">LLMResponse.LLMResponseBuilder()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
    deleted file mode 100644
    index f85f58ef..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">LLMResponse</span></div><h1>LLMResponse</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">206 of 206</td><td class="ctr2">0%</td><td class="bar">34 of 34</td><td class="ctr2">0%</td><td class="ctr1">33</td><td class="ctr2">33</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">16</td><td class="ctr2">16</td></tr></tfoot><tbody><tr><td id="a3"><a href="LLMResponse.java.html#L11" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="79" alt="79"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="26" alt="26"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">14</td><td class="ctr2" id="g0">14</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a7"><a href="LLMResponse.java.html#L11" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="89" height="10" title="59" alt="59"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="LLMResponse.java.html#L14" class="el_method">LLMResponse(String, String, String, boolean)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="15" alt="15"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a15"><a href="LLMResponse.java.html#L11" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="10" alt="10"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a9"><a href="LLMResponse.java.html#L15" class="el_method">LLMResponse()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="9" height="10" title="6" alt="6"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a1"><a href="LLMResponse.java.html#L13" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a13"><a href="LLMResponse.java.html#L12" class="el_method">setRole(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a12"><a href="LLMResponse.java.html#L12" class="el_method">setContent(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a14"><a href="LLMResponse.java.html#L12" class="el_method">setTerminalMessage(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a11"><a href="LLMResponse.java.html#L12" class="el_method">setAlert(boolean)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a5"><a href="LLMResponse.java.html#L17" class="el_method">getRole()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="LLMResponse.java.html#L18" class="el_method">getContent()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a6"><a href="LLMResponse.java.html#L19" class="el_method">getTerminalMessage()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a8"><a href="LLMResponse.java.html#L21" class="el_method">isAlert()</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a2"><a href="LLMResponse.java.html#L11" class="el_method">canEqual(Object)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a0"><a href="LLMResponse.java.html#L13" class="el_method">$default$alert()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="2" alt="2"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
    deleted file mode 100644
    index 0d4f7450..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/LLMResponse.java.html
    +++ /dev/null
    @@ -1,23 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>LLMResponse.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">LLMResponse.java</span></div><h1>LLMResponse.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.Getter;
    -import lombok.RequiredArgsConstructor;
    -import lombok.Setter;
    -
    -@Getter
    -<span class="nc bnc" id="L11" title="All 34 branches missed.">@Data</span>
    -<span class="nc" id="L12">@Setter</span>
    -<span class="nc bnc" id="L13" title="All 2 branches missed.">@Builder</span>
    -<span class="nc" id="L14">@AllArgsConstructor</span>
    -<span class="nc" id="L15">@RequiredArgsConstructor</span>
    -public class LLMResponse {
    -<span class="nc" id="L17">    private String role;</span>
    -<span class="nc" id="L18">    private String content;</span>
    -<span class="nc" id="L19">    private String terminalMessage;</span>
    -    @Builder.Default
    -<span class="nc" id="L21">    private boolean alert = false;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
    deleted file mode 100644
    index 25b70592..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest$TwoPartyRequestBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest.TwoPartyRequestBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">TwoPartyRequest.TwoPartyRequestBuilder</span></div><h1>TwoPartyRequest.TwoPartyRequestBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">73 of 73</td><td class="ctr2">0%</td><td class="bar">2 of 2</td><td class="ctr2">0%</td><td class="ctr1">10</td><td class="ctr2">10</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a0"><a href="TwoPartyRequest.java.html#L6" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="23" alt="23"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="2" alt="2"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">2</td><td class="ctr2" id="g0">2</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a4"><a href="TwoPartyRequest.java.html#L6" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="73" height="10" title="14" alt="14"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="TwoPartyRequest.java.html#L6" class="el_method">systemInput(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="41" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="TwoPartyRequest.java.html#L6" class="el_method">whatSystemIsDoing(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="TwoPartyRequest.java.html#L6" class="el_method">userObjective(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a6"><a href="TwoPartyRequest.java.html#L6" class="el_method">userInput(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="TwoPartyRequest.java.html#L6" class="el_method">previousPrompt(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a2"><a href="TwoPartyRequest.java.html#L6" class="el_method">promptResponse(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html#L6" class="el_method">TwoPartyRequest.TwoPartyRequestBuilder()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
    deleted file mode 100644
    index a072e103..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_class">TwoPartyRequest</span></div><h1>TwoPartyRequest</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">45 of 45</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">9</td><td class="ctr2">9</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">9</td><td class="ctr2">9</td></tr></tfoot><tbody><tr><td id="a8"><a href="TwoPartyRequest.java.html#L6" class="el_method">TwoPartyRequest(String, String, String, String, String, String)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="21" alt="21"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a1"><a href="TwoPartyRequest.java.html#L6" class="el_method">builder()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="22" height="10" title="4" alt="4"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="TwoPartyRequest.java.html#L10" class="el_method">getSystemInput()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a7"><a href="TwoPartyRequest.java.html#L14" class="el_method">getWhatSystemIsDoing()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a6"><a href="TwoPartyRequest.java.html#L15" class="el_method">getUserObjective()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html#L16" class="el_method">getUserInput()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a2"><a href="TwoPartyRequest.java.html#L18" class="el_method">getPreviousPrompt()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="TwoPartyRequest.java.html#L19" class="el_method">getPromptResponse()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="17" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a0"><a href="TwoPartyRequest.java.html#L6" class="el_method">$default$systemInput()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="11" height="10" title="2" alt="2"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
    deleted file mode 100644
    index 29e3d82e..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/TwoPartyRequest.java.html
    +++ /dev/null
    @@ -1,22 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>TwoPartyRequest.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai.model</a> &gt; <span class="el_source">TwoPartyRequest.java</span></div><h1>TwoPartyRequest.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai.model;
    -
    -import lombok.Builder;
    -import lombok.Getter;
    -
    -<span class="nc bnc" id="L6" title="All 2 branches missed.">@Builder</span>
    -@Getter
    -public class TwoPartyRequest {
    -    @Builder.Default
    -<span class="nc" id="L10">    private String systemInput = &quot;This is a mission critical system with admins performing break glass activities &quot; +</span>
    -        &quot;through ssh. You are monitoring as a two party system and acting as a second human monitoring a &quot; +
    -        &quot;session.  &quot;;
    -
    -<span class="nc" id="L14">    private String whatSystemIsDoing;</span>
    -<span class="nc" id="L15">    private String userObjective;</span>
    -<span class="nc" id="L16">    private String userInput;</span>
    -
    -<span class="nc" id="L18">    private String previousPrompt;</span>
    -<span class="nc" id="L19">    private String promptResponse;</span>
    -
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
    deleted file mode 100644
    index 7c70c36f..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model</span></div><h1>io.sentrius.sso.genai.model</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,711 of 1,711</td><td class="ctr2">0%</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="ctr1">249</td><td class="ctr2">249</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">143</td><td class="ctr2">143</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a6"><a href="LLMRequest.html" class="el_class">LLMRequest</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="525" alt="525"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="86" alt="86"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">72</td><td class="ctr2" id="g0">72</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">29</td><td class="ctr2" id="k0">29</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a4"><a href="Conversation.html" class="el_class">Conversation</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="49" height="10" title="218" alt="218"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="53" height="10" title="38" alt="38"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">34</td><td class="ctr2" id="g1">34</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">15</td><td class="ctr2" id="k2">15</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a9"><a href="LLMResponse.html" class="el_class">LLMResponse</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="206" alt="206"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">33</td><td class="ctr2" id="g2">33</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">16</td><td class="ctr2" id="k1">16</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.html" class="el_class">ApiEndPointRequest</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="203" alt="203"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">31</td><td class="ctr2" id="g3">31</td><td class="ctr1" id="h4">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j3">14</td><td class="ctr2" id="k3">14</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a7"><a href="LLMRequest$LLMRequestBuilder.html" class="el_class">LLMRequest.LLMRequestBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="34" height="10" title="151" alt="151"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f5">14</td><td class="ctr2" id="g5">14</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j4">14</td><td class="ctr2" id="k4">14</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a2"><a href="ComplianceRule.html" class="el_class">ComplianceRule</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="85" alt="85"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f4">16</td><td class="ctr2" id="g4">16</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">9</td><td class="ctr2" id="k5">9</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr><tr><td id="a12"><a href="TwoPartyRequest$TwoPartyRequestBuilder.html" class="el_class">TwoPartyRequest.TwoPartyRequestBuilder</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="16" height="10" title="73" alt="73"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f6">10</td><td class="ctr2" id="g6">10</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j6">9</td><td class="ctr2" id="k6">9</td><td class="ctr1" id="l6">1</td><td class="ctr2" id="m6">1</td></tr><tr><td id="a1"><a href="ApiEndPointRequest$ApiEndPointRequestBuilder.html" class="el_class">ApiEndPointRequest.ApiEndPointRequestBuilder</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="67" alt="67"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f8">8</td><td class="ctr2" id="g8">8</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">8</td><td class="ctr2" id="k8">8</td><td class="ctr1" id="l7">1</td><td class="ctr2" id="m7">1</td></tr><tr><td id="a5"><a href="Conversation$ConversationBuilder.html" class="el_class">Conversation.ConversationBuilder</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="58" alt="58"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d6"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e6">0%</td><td class="ctr1" id="f9">8</td><td class="ctr2" id="g9">8</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">7</td><td class="ctr2" id="k9">7</td><td class="ctr1" id="l8">1</td><td class="ctr2" id="m8">1</td></tr><tr><td id="a10"><a href="LLMResponse$LLMResponseBuilder.html" class="el_class">LLMResponse.LLMResponseBuilder</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="12" height="10" title="55" alt="55"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d7"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e7">0%</td><td class="ctr1" id="f10">8</td><td class="ctr2" id="g10">8</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">7</td><td class="ctr2" id="k10">7</td><td class="ctr1" id="l9">1</td><td class="ctr2" id="m9">1</td></tr><tr><td id="a11"><a href="TwoPartyRequest.html" class="el_class">TwoPartyRequest</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="45" alt="45"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f7">9</td><td class="ctr2" id="g7">9</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j7">9</td><td class="ctr2" id="k7">9</td><td class="ctr1" id="l10">1</td><td class="ctr2" id="m10">1</td></tr><tr><td id="a3"><a href="ComplianceRule$ComplianceRuleBuilder.html" class="el_class">ComplianceRule.ComplianceRuleBuilder</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="18" alt="18"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">4</td><td class="ctr2" id="g11">4</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">4</td><td class="ctr2" id="k11">4</td><td class="ctr1" id="l11">1</td><td class="ctr2" id="m11">1</td></tr><tr><td id="a8"><a href="LLMRequest$LLMRequestBuilderImpl.html" class="el_class">LLMRequest.LLMRequestBuilderImpl</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="1" height="10" title="7" alt="7"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">2</td><td class="ctr2" id="g12">2</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">2</td><td class="ctr2" id="k12">2</td><td class="ctr1" id="l12">1</td><td class="ctr2" id="m12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
    deleted file mode 100644
    index 1a423af4..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai.model/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai.model</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai.model</span></div><h1>io.sentrius.sso.genai.model</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,711 of 1,711</td><td class="ctr2">0%</td><td class="bar">212 of 212</td><td class="ctr2">0%</td><td class="ctr1">249</td><td class="ctr2">249</td><td class="ctr1">48</td><td class="ctr2">48</td><td class="ctr1">143</td><td class="ctr2">143</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a3"><a href="LLMRequest.java.html" class="el_source">LLMRequest.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="683" alt="683"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="86" alt="86"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">88</td><td class="ctr2" id="g0">88</td><td class="ctr1" id="h0">14</td><td class="ctr2" id="i0">14</td><td class="ctr1" id="j0">45</td><td class="ctr2" id="k0">45</td><td class="ctr1" id="l0">3</td><td class="ctr2" id="m0">3</td></tr><tr><td id="a2"><a href="Conversation.java.html" class="el_source">Conversation.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="48" height="10" title="276" alt="276"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="55" height="10" title="40" alt="40"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">42</td><td class="ctr2" id="g1">42</td><td class="ctr1" id="h2">7</td><td class="ctr2" id="i2">7</td><td class="ctr1" id="j2">22</td><td class="ctr2" id="k2">22</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr><tr><td id="a0"><a href="ApiEndPointRequest.java.html" class="el_source">ApiEndPointRequest.java</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="270" alt="270"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="47" height="10" title="34" alt="34"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f3">39</td><td class="ctr2" id="g3">39</td><td class="ctr1" id="h4">6</td><td class="ctr2" id="i4">6</td><td class="ctr1" id="j3">22</td><td class="ctr2" id="k3">22</td><td class="ctr1" id="l2">2</td><td class="ctr2" id="m2">2</td></tr><tr><td id="a4"><a href="LLMResponse.java.html" class="el_source">LLMResponse.java</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="45" height="10" title="261" alt="261"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="50" height="10" title="36" alt="36"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f2">41</td><td class="ctr2" id="g2">41</td><td class="ctr1" id="h1">9</td><td class="ctr2" id="i1">9</td><td class="ctr1" id="j1">23</td><td class="ctr2" id="k1">23</td><td class="ctr1" id="l3">2</td><td class="ctr2" id="m3">2</td></tr><tr><td id="a5"><a href="TwoPartyRequest.java.html" class="el_source">TwoPartyRequest.java</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="118" alt="118"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d5"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="2" alt="2"/></td><td class="ctr2" id="e4">0%</td><td class="ctr1" id="f5">19</td><td class="ctr2" id="g5">19</td><td class="ctr1" id="h3">7</td><td class="ctr2" id="i3">7</td><td class="ctr1" id="j4">18</td><td class="ctr2" id="k4">18</td><td class="ctr1" id="l4">2</td><td class="ctr2" id="m4">2</td></tr><tr><td id="a1"><a href="ComplianceRule.java.html" class="el_source">ComplianceRule.java</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="103" alt="103"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d4"><img src="../jacoco-resources/redbar.gif" width="19" height="10" title="14" alt="14"/></td><td class="ctr2" id="e5">0%</td><td class="ctr1" id="f4">20</td><td class="ctr2" id="g4">20</td><td class="ctr1" id="h5">5</td><td class="ctr2" id="i5">5</td><td class="ctr1" id="j5">13</td><td class="ctr2" id="k5">13</td><td class="ctr1" id="l5">2</td><td class="ctr2" id="m5">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
    deleted file mode 100644
    index c0135543..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message$MessageBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message.MessageBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Message.MessageBuilder</span></div><h1>Message.MessageBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">36 of 36</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">6</td><td class="ctr2">6</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a0"><a href="Message.java.html#L33" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="10" alt="10"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="Message.java.html#L33" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="96" height="10" title="8" alt="8"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a4"><a href="Message.java.html#L33" class="el_method">role(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a1"><a href="Message.java.html#L33" class="el_method">content(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a3"><a href="Message.java.html#L33" class="el_method">refusal(String)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="60" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a2"><a href="Message.java.html#L33" class="el_method">Message.MessageBuilder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="36" height="10" title="3" alt="3"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
    deleted file mode 100644
    index e9671bc6..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Message</span></div><h1>Message</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">171 of 171</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">28</td><td class="ctr2">28</td><td class="ctr1">7</td><td class="ctr2">7</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a2"><a href="Message.java.html#L32" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Message.java.html#L32" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a8"><a href="Message.java.html#L35" class="el_method">Message(String, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="12" alt="12"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a12"><a href="Message.java.html#L32" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a0"><a href="Message.java.html#L33" class="el_method">builder()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a11"><a href="Message.java.html#L32" class="el_method">setRole(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a9"><a href="Message.java.html#L32" class="el_method">setContent(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Message.java.html#L32" class="el_method">setRefusal(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a5"><a href="Message.java.html#L40" class="el_method">getRole()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a3"><a href="Message.java.html#L43" class="el_method">getContent()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a4"><a href="Message.java.html#L46" class="el_method">getRefusal()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a1"><a href="Message.java.html#L32" class="el_method">canEqual(Object)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a7"><a href="Message.java.html#L34" class="el_method">Message()</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
    deleted file mode 100644
    index dde8f1c2..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Message.java.html
    +++ /dev/null
    @@ -1,48 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Message.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">Message.java</span></div><h1>Message.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    -import com.fasterxml.jackson.annotation.JsonProperty;
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -
    -/**
    - * &lt;p&gt;
    - * Inspired by liLittleCat's ChatGPT package.
    - *
    - * Codifies the Message request
    - * &lt;/p&gt;
    - *
    - * original @author &lt;a href=&quot;https://github.com/LiLittleCat&quot;&gt;LiLittleCat&lt;/a&gt;
    - *
    - * @since 2023/3/2
    - */
    -
    -/**
    - * The Message class represents a message that can be sent between users. This class is immutable and contains information about the message.
    - * It has the following methods:
    - *
    - * 1. getMessageText(): returns the text of the message
    - * 2. getSender(): returns the user who sent the message
    - * 3. getRecipient(): returns the user who received the message
    - * 4. getTimestamp(): returns the timestamp of the message
    - * 5. toString(): returns the string representation of the message
    - */
    -<span class="nc bnc" id="L32" title="All 30 branches missed.">@Data</span>
    -<span class="nc" id="L33">@Builder</span>
    -<span class="nc" id="L34">@NoArgsConstructor</span>
    -<span class="nc" id="L35">@AllArgsConstructor</span>
    -@JsonIgnoreProperties(ignoreUnknown = true)
    -public class Message {
    -
    -    @JsonProperty(value = &quot;role&quot;)
    -<span class="nc" id="L40">    public String role;</span>
    -
    -    @JsonProperty(value = &quot;content&quot;)
    -<span class="nc" id="L43">    public String content;</span>
    -
    -    @JsonProperty(value = &quot;refusal&quot;)
    -<span class="nc" id="L46">    public String refusal;</span>
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    deleted file mode 100644
    index 5c19ad3b..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Choice.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Choice</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Choice</span></div><h1>Response.Choice</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">196 of 196</td><td class="ctr2">0%</td><td class="bar">38 of 38</td><td class="ctr2">0%</td><td class="ctr1">32</td><td class="ctr2">32</td><td class="ctr1">5</td><td class="ctr2">5</td><td class="ctr1">13</td><td class="ctr2">13</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L49" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="89" alt="89"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="30" alt="30"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">16</td><td class="ctr2" id="g0">16</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a6"><a href="Response.java.html#L49" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="83" height="10" title="62" alt="62"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="32" height="10" title="8" alt="8"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">5</td><td class="ctr2" id="g1">5</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a12"><a href="Response.java.html#L49" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="14" height="10" title="11" alt="11"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a9"><a href="Response.java.html#L49" class="el_method">setIndex(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a11"><a href="Response.java.html#L49" class="el_method">setMessage(Message)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a8"><a href="Response.java.html#L49" class="el_method">setFinishReason(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a10"><a href="Response.java.html#L49" class="el_method">setLogprobs(Integer)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a7"><a href="Response.java.html#L49" class="el_method">Response.Choice()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a3"><a href="Response.java.html#L53" class="el_method">getIndex()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a5"><a href="Response.java.html#L56" class="el_method">getMessage()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a2"><a href="Response.java.html#L59" class="el_method">getFinishReason()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a4"><a href="Response.java.html#L62" class="el_method">getLogprobs()</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a0"><a href="Response.java.html#L49" class="el_method">canEqual(Object)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="4" height="10" title="3" alt="3"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    deleted file mode 100644
    index 0310a02e..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$ResponseBuilder.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.ResponseBuilder</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.ResponseBuilder</span></div><h1>Response.ResponseBuilder</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">83 of 83</td><td class="ctr2">0%</td><td class="bar">0 of 0</td><td class="ctr2">n/a</td><td class="ctr1">11</td><td class="ctr2">11</td><td class="ctr1">1</td><td class="ctr2">1</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">build()</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"/><td class="ctr2" id="e0">n/a</td><td class="ctr1" id="f0">1</td><td class="ctr2" id="g0">1</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a9"><a href="Response.java.html#L18" class="el_method">toString()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="20" alt="20"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"/><td class="ctr2" id="e1">n/a</td><td class="ctr1" id="f1">1</td><td class="ctr2" id="g1">1</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a3"><a href="Response.java.html#L18" class="el_method">id(String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a5"><a href="Response.java.html#L18" class="el_method">object(String)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L18" class="el_method">created(Long)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a4"><a href="Response.java.html#L18" class="el_method">model(String)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a1"><a href="Response.java.html#L18" class="el_method">choices(List)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a10"><a href="Response.java.html#L18" class="el_method">usage(Response.Usage)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a7"><a href="Response.java.html#L18" class="el_method">serviceTier(String)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a8"><a href="Response.java.html#L18" class="el_method">systemFingerprint(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="5" alt="5"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a6"><a href="Response.java.html#L18" class="el_method">Response.ResponseBuilder()</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="18" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    deleted file mode 100644
    index b41705af..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response$Usage.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.Usage</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response.Usage</span></div><h1>Response.Usage</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">155 of 155</td><td class="ctr2">0%</td><td class="bar">30 of 30</td><td class="ctr2">0%</td><td class="ctr1">26</td><td class="ctr2">26</td><td class="ctr1">4</td><td class="ctr2">4</td><td class="ctr1">11</td><td class="ctr2">11</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html#L70" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="72" alt="72"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="24" alt="24"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">13</td><td class="ctr2" id="g0">13</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a5"><a href="Response.java.html#L70" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="80" height="10" title="48" alt="48"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="30" height="10" title="6" alt="6"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">4</td><td class="ctr2" id="g1">4</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a10"><a href="Response.java.html#L70" class="el_method">toString()</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="13" height="10" title="8" alt="8"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a8"><a href="Response.java.html#L70" class="el_method">setPromptTokens(Integer)</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a7"><a href="Response.java.html#L70" class="el_method">setCompletionTokens(Integer)</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a9"><a href="Response.java.html#L70" class="el_method">setTotalTokens(Integer)</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a6"><a href="Response.java.html#L70" class="el_method">Response.Usage()</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a3"><a href="Response.java.html#L75" class="el_method">getPromptTokens()</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a2"><a href="Response.java.html#L78" class="el_method">getCompletionTokens()</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a4"><a href="Response.java.html#L81" class="el_method">getTotalTokens()</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a0"><a href="Response.java.html#L70" class="el_method">canEqual(Object)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="5" height="10" title="3" alt="3"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
    deleted file mode 100644
    index 9ef6c7b1..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_class">Response</span></div><h1>Response</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">401 of 401</td><td class="ctr2">0%</td><td class="bar">70 of 70</td><td class="ctr2">0%</td><td class="ctr1">60</td><td class="ctr2">60</td><td class="ctr1">13</td><td class="ctr2">13</td><td class="ctr1">25</td><td class="ctr2">25</td></tr></tfoot><tbody><tr><td id="a3"><a href="Response.java.html#L17" class="el_method">equals(Object)</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="157" alt="157"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="54" alt="54"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">28</td><td class="ctr2" id="g0">28</td><td class="ctr1" id="h0">1</td><td class="ctr2" id="i0">1</td><td class="ctr1" id="j0">1</td><td class="ctr2" id="k0">1</td></tr><tr><td id="a12"><a href="Response.java.html#L17" class="el_method">hashCode()</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="90" height="10" title="118" alt="118"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="35" height="10" title="16" alt="16"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">9</td><td class="ctr2" id="g1">9</td><td class="ctr1" id="h1">1</td><td class="ctr2" id="i1">1</td><td class="ctr1" id="j1">1</td><td class="ctr2" id="k1">1</td></tr><tr><td id="a15"><a href="Response.java.html#L20" class="el_method">Response(String, String, Long, String, List, Response.Usage, String, String)</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="20" height="10" title="27" alt="27"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"/><td class="ctr2" id="e2">n/a</td><td class="ctr1" id="f2">1</td><td class="ctr2" id="g2">1</td><td class="ctr1" id="h2">1</td><td class="ctr2" id="i2">1</td><td class="ctr1" id="j2">1</td><td class="ctr2" id="k2">1</td></tr><tr><td id="a24"><a href="Response.java.html#L17" class="el_method">toString()</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="15" height="10" title="20" alt="20"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"/><td class="ctr2" id="e3">n/a</td><td class="ctr1" id="f3">1</td><td class="ctr2" id="g3">1</td><td class="ctr1" id="h3">1</td><td class="ctr2" id="i3">1</td><td class="ctr1" id="j3">1</td><td class="ctr2" id="k3">1</td></tr><tr><td id="a2"><a href="Response.java.html#L93" class="el_method">concatenateResponses()</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="6" height="10" title="9" alt="9"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">1</td><td class="ctr2" id="g4">1</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">1</td><td class="ctr2" id="k4">1</td></tr><tr><td id="a0"><a href="Response.java.html#L18" class="el_method">builder()</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">1</td><td class="ctr2" id="g5">1</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">1</td><td class="ctr2" id="k5">1</td></tr><tr><td id="a18"><a href="Response.java.html#L17" class="el_method">setId(String)</a></td><td class="bar" id="b6"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c6">0%</td><td class="bar" id="d6"/><td class="ctr2" id="e6">n/a</td><td class="ctr1" id="f6">1</td><td class="ctr2" id="g6">1</td><td class="ctr1" id="h6">1</td><td class="ctr2" id="i6">1</td><td class="ctr1" id="j6">1</td><td class="ctr2" id="k6">1</td></tr><tr><td id="a20"><a href="Response.java.html#L17" class="el_method">setObject(String)</a></td><td class="bar" id="b7"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c7">0%</td><td class="bar" id="d7"/><td class="ctr2" id="e7">n/a</td><td class="ctr1" id="f7">1</td><td class="ctr2" id="g7">1</td><td class="ctr1" id="h7">1</td><td class="ctr2" id="i7">1</td><td class="ctr1" id="j7">1</td><td class="ctr2" id="k7">1</td></tr><tr><td id="a17"><a href="Response.java.html#L17" class="el_method">setCreated(Long)</a></td><td class="bar" id="b8"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c8">0%</td><td class="bar" id="d8"/><td class="ctr2" id="e8">n/a</td><td class="ctr1" id="f8">1</td><td class="ctr2" id="g8">1</td><td class="ctr1" id="h8">1</td><td class="ctr2" id="i8">1</td><td class="ctr1" id="j8">1</td><td class="ctr2" id="k8">1</td></tr><tr><td id="a19"><a href="Response.java.html#L17" class="el_method">setModel(String)</a></td><td class="bar" id="b9"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c9">0%</td><td class="bar" id="d9"/><td class="ctr2" id="e9">n/a</td><td class="ctr1" id="f9">1</td><td class="ctr2" id="g9">1</td><td class="ctr1" id="h9">1</td><td class="ctr2" id="i9">1</td><td class="ctr1" id="j9">1</td><td class="ctr2" id="k9">1</td></tr><tr><td id="a16"><a href="Response.java.html#L17" class="el_method">setChoices(List)</a></td><td class="bar" id="b10"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c10">0%</td><td class="bar" id="d10"/><td class="ctr2" id="e10">n/a</td><td class="ctr1" id="f10">1</td><td class="ctr2" id="g10">1</td><td class="ctr1" id="h10">1</td><td class="ctr2" id="i10">1</td><td class="ctr1" id="j10">1</td><td class="ctr2" id="k10">1</td></tr><tr><td id="a23"><a href="Response.java.html#L17" class="el_method">setUsage(Response.Usage)</a></td><td class="bar" id="b11"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c11">0%</td><td class="bar" id="d11"/><td class="ctr2" id="e11">n/a</td><td class="ctr1" id="f11">1</td><td class="ctr2" id="g11">1</td><td class="ctr1" id="h11">1</td><td class="ctr2" id="i11">1</td><td class="ctr1" id="j11">1</td><td class="ctr2" id="k11">1</td></tr><tr><td id="a21"><a href="Response.java.html#L17" class="el_method">setServiceTier(String)</a></td><td class="bar" id="b12"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c12">0%</td><td class="bar" id="d12"/><td class="ctr2" id="e12">n/a</td><td class="ctr1" id="f12">1</td><td class="ctr2" id="g12">1</td><td class="ctr1" id="h12">1</td><td class="ctr2" id="i12">1</td><td class="ctr1" id="j12">1</td><td class="ctr2" id="k12">1</td></tr><tr><td id="a22"><a href="Response.java.html#L17" class="el_method">setSystemFingerprint(String)</a></td><td class="bar" id="b13"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c13">0%</td><td class="bar" id="d13"/><td class="ctr2" id="e13">n/a</td><td class="ctr1" id="f13">1</td><td class="ctr2" id="g13">1</td><td class="ctr1" id="h13">1</td><td class="ctr2" id="i13">1</td><td class="ctr1" id="j13">1</td><td class="ctr2" id="k13">1</td></tr><tr><td id="a13"><a href="Response.java.html#L93" class="el_method">lambda$concatenateResponses$0(Response.Choice)</a></td><td class="bar" id="b14"><img src="../jacoco-resources/redbar.gif" width="3" height="10" title="4" alt="4"/></td><td class="ctr2" id="c14">0%</td><td class="bar" id="d14"/><td class="ctr2" id="e14">n/a</td><td class="ctr1" id="f14">1</td><td class="ctr2" id="g14">1</td><td class="ctr1" id="h14">1</td><td class="ctr2" id="i14">1</td><td class="ctr1" id="j14">1</td><td class="ctr2" id="k14">1</td></tr><tr><td id="a6"><a href="Response.java.html#L24" class="el_method">getId()</a></td><td class="bar" id="b15"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c15">0%</td><td class="bar" id="d15"/><td class="ctr2" id="e15">n/a</td><td class="ctr1" id="f15">1</td><td class="ctr2" id="g15">1</td><td class="ctr1" id="h15">1</td><td class="ctr2" id="i15">1</td><td class="ctr1" id="j15">1</td><td class="ctr2" id="k15">1</td></tr><tr><td id="a8"><a href="Response.java.html#L27" class="el_method">getObject()</a></td><td class="bar" id="b16"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c16">0%</td><td class="bar" id="d16"/><td class="ctr2" id="e16">n/a</td><td class="ctr1" id="f16">1</td><td class="ctr2" id="g16">1</td><td class="ctr1" id="h16">1</td><td class="ctr2" id="i16">1</td><td class="ctr1" id="j16">1</td><td class="ctr2" id="k16">1</td></tr><tr><td id="a5"><a href="Response.java.html#L30" class="el_method">getCreated()</a></td><td class="bar" id="b17"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c17">0%</td><td class="bar" id="d17"/><td class="ctr2" id="e17">n/a</td><td class="ctr1" id="f17">1</td><td class="ctr2" id="g17">1</td><td class="ctr1" id="h17">1</td><td class="ctr2" id="i17">1</td><td class="ctr1" id="j17">1</td><td class="ctr2" id="k17">1</td></tr><tr><td id="a7"><a href="Response.java.html#L33" class="el_method">getModel()</a></td><td class="bar" id="b18"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c18">0%</td><td class="bar" id="d18"/><td class="ctr2" id="e18">n/a</td><td class="ctr1" id="f18">1</td><td class="ctr2" id="g18">1</td><td class="ctr1" id="h18">1</td><td class="ctr2" id="i18">1</td><td class="ctr1" id="j18">1</td><td class="ctr2" id="k18">1</td></tr><tr><td id="a4"><a href="Response.java.html#L36" class="el_method">getChoices()</a></td><td class="bar" id="b19"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c19">0%</td><td class="bar" id="d19"/><td class="ctr2" id="e19">n/a</td><td class="ctr1" id="f19">1</td><td class="ctr2" id="g19">1</td><td class="ctr1" id="h19">1</td><td class="ctr2" id="i19">1</td><td class="ctr1" id="j19">1</td><td class="ctr2" id="k19">1</td></tr><tr><td id="a11"><a href="Response.java.html#L39" class="el_method">getUsage()</a></td><td class="bar" id="b20"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c20">0%</td><td class="bar" id="d20"/><td class="ctr2" id="e20">n/a</td><td class="ctr1" id="f20">1</td><td class="ctr2" id="g20">1</td><td class="ctr1" id="h20">1</td><td class="ctr2" id="i20">1</td><td class="ctr1" id="j20">1</td><td class="ctr2" id="k20">1</td></tr><tr><td id="a9"><a href="Response.java.html#L42" class="el_method">getServiceTier()</a></td><td class="bar" id="b21"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c21">0%</td><td class="bar" id="d21"/><td class="ctr2" id="e21">n/a</td><td class="ctr1" id="f21">1</td><td class="ctr2" id="g21">1</td><td class="ctr1" id="h21">1</td><td class="ctr2" id="i21">1</td><td class="ctr1" id="j21">1</td><td class="ctr2" id="k21">1</td></tr><tr><td id="a10"><a href="Response.java.html#L85" class="el_method">getSystemFingerprint()</a></td><td class="bar" id="b22"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c22">0%</td><td class="bar" id="d22"/><td class="ctr2" id="e22">n/a</td><td class="ctr1" id="f22">1</td><td class="ctr2" id="g22">1</td><td class="ctr1" id="h22">1</td><td class="ctr2" id="i22">1</td><td class="ctr1" id="j22">1</td><td class="ctr2" id="k22">1</td></tr><tr><td id="a1"><a href="Response.java.html#L17" class="el_method">canEqual(Object)</a></td><td class="bar" id="b23"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c23">0%</td><td class="bar" id="d23"/><td class="ctr2" id="e23">n/a</td><td class="ctr1" id="f23">1</td><td class="ctr2" id="g23">1</td><td class="ctr1" id="h23">1</td><td class="ctr2" id="i23">1</td><td class="ctr1" id="j23">1</td><td class="ctr2" id="k23">1</td></tr><tr><td id="a14"><a href="Response.java.html#L19" class="el_method">Response()</a></td><td class="bar" id="b24"><img src="../jacoco-resources/redbar.gif" width="2" height="10" title="3" alt="3"/></td><td class="ctr2" id="c24">0%</td><td class="bar" id="d24"/><td class="ctr2" id="e24">n/a</td><td class="ctr1" id="f24">1</td><td class="ctr2" id="g24">1</td><td class="ctr1" id="h24">1</td><td class="ctr2" id="i24">1</td><td class="ctr1" id="j24">1</td><td class="ctr2" id="k24">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    deleted file mode 100644
    index 67c78ba9..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/Response.java.html
    +++ /dev/null
    @@ -1,96 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>Response.java</title><link rel="stylesheet" href="../jacoco-resources/prettify.css" type="text/css"/><script type="text/javascript" src="../jacoco-resources/prettify.js"></script></head><body onload="window['PR_TAB_WIDTH']=4;prettyPrint()"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <a href="index.source.html" class="el_package">io.sentrius.sso.genai</a> &gt; <span class="el_source">Response.java</span></div><h1>Response.java</h1><pre class="source lang-java linenums">package io.sentrius.sso.genai;
    -
    -import java.util.List;
    -import java.util.stream.Collectors;
    -import com.fasterxml.jackson.annotation.JsonIgnoreProperties;
    -import com.fasterxml.jackson.annotation.JsonProperty;
    -import lombok.AllArgsConstructor;
    -import lombok.Builder;
    -import lombok.Data;
    -import lombok.NoArgsConstructor;
    -
    -/**
    - * Response class is responsible for collecting and storing user responses. It provides a string
    - * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    - * responses and the 'concatenateResponses' method to combine them into a single string.
    - */
    -<span class="nc bnc" id="L17" title="All 70 branches missed.">@Data</span>
    -<span class="nc" id="L18">@Builder</span>
    -<span class="nc" id="L19">@NoArgsConstructor</span>
    -<span class="nc" id="L20">@AllArgsConstructor</span>
    -public class Response {
    -
    -    @JsonProperty(value = &quot;id&quot;)
    -<span class="nc" id="L24">    public String id;</span>
    -
    -    @JsonProperty(value = &quot;object&quot;)
    -<span class="nc" id="L27">    public String object;</span>
    -
    -    @JsonProperty(value = &quot;created&quot;)
    -<span class="nc" id="L30">    public Long created;</span>
    -
    -    @JsonProperty(value = &quot;model&quot;)
    -<span class="nc" id="L33">    public String model;</span>
    -
    -    @JsonProperty(value = &quot;choices&quot;)
    -<span class="nc" id="L36">    public List&lt;Choice&gt; choices;</span>
    -
    -    @JsonProperty(value = &quot;usage&quot;)
    -<span class="nc" id="L39">    public Usage usage;</span>
    -
    -    @JsonProperty(value = &quot;service_tier&quot;, required = false)
    -<span class="nc" id="L42">    public String serviceTier;</span>
    -
    -    /**
    -     * Response class is responsible for collecting and storing user responses. It provides a string
    -     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    -     * responses and the 'concatenateResponses' method to combine them into a single string.
    -     */
    -<span class="nc bnc" id="L49" title="All 38 branches missed.">    @Data</span>
    -    public static class Choice {
    -
    -        @JsonProperty(value = &quot;index&quot;)
    -<span class="nc" id="L53">        public Integer index;</span>
    -
    -        @JsonProperty(value = &quot;message&quot;)
    -<span class="nc" id="L56">        public Message message;</span>
    -
    -        @JsonProperty(value = &quot;finish_reason&quot;)
    -<span class="nc" id="L59">        public String finishReason;</span>
    -
    -        @JsonProperty(value = &quot;logprobs&quot;)
    -<span class="nc" id="L62">        public Integer logprobs;</span>
    -    }
    -
    -    /**
    -     * Response class is responsible for collecting and storing user responses. It provides a string
    -     * concatenation method to combine all responses. Use the 'addResponse' method to collect user
    -     * responses and the 'concatenateResponses' method to combine them into a single string.
    -     */
    -<span class="nc bnc" id="L70" title="All 30 branches missed.">    @Data</span>
    -    @JsonIgnoreProperties(ignoreUnknown = true)
    -    public static class Usage {
    -
    -        @JsonProperty(value = &quot;prompt_tokens&quot;)
    -<span class="nc" id="L75">        public Integer promptTokens;</span>
    -
    -        @JsonProperty(value = &quot;completion_tokens&quot;)
    -<span class="nc" id="L78">        public Integer completionTokens;</span>
    -
    -        @JsonProperty(value = &quot;total_tokens&quot;)
    -<span class="nc" id="L81">        public Integer totalTokens;</span>
    -    }
    -
    -    @JsonProperty(value = &quot;system_fingerprint&quot;)
    -<span class="nc" id="L85">    String systemFingerprint;</span>
    -
    -    /**
    -     * This method concatenates all responses in a Response object and returns a string.
    -     *
    -     * @return      a string that contains all responses in a Response object
    -     */
    -    public String concatenateResponses() {
    -<span class="nc" id="L93">        return getChoices().stream().map(x -&gt; x.getMessage().getContent()).collect(Collectors.joining());</span>
    -    }
    -}
    -</pre><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
    deleted file mode 100644
    index 2ffc0bc6..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.source.html" class="el_source">Source Files</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,042 of 1,042</td><td class="ctr2">0%</td><td class="bar">168 of 168</td><td class="ctr2">0%</td><td class="ctr1">163</td><td class="ctr2">163</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">79</td><td class="ctr2">79</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a2"><a href="Response.html" class="el_class">Response</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="401" alt="401"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="70" alt="70"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">60</td><td class="ctr2" id="g0">60</td><td class="ctr1" id="h0">13</td><td class="ctr2" id="i0">13</td><td class="ctr1" id="j0">25</td><td class="ctr2" id="k0">25</td><td class="ctr1" id="l0">1</td><td class="ctr2" id="m0">1</td></tr><tr><td id="a3"><a href="Response$Choice.html" class="el_class">Response.Choice</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="58" height="10" title="196" alt="196"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="65" height="10" title="38" alt="38"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">32</td><td class="ctr2" id="g1">32</td><td class="ctr1" id="h2">5</td><td class="ctr2" id="i2">5</td><td class="ctr1" id="j1">13</td><td class="ctr2" id="k1">13</td><td class="ctr1" id="l1">1</td><td class="ctr2" id="m1">1</td></tr><tr><td id="a0"><a href="Message.html" class="el_class">Message</a></td><td class="bar" id="b2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="171" alt="171"/></td><td class="ctr2" id="c2">0%</td><td class="bar" id="d2"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="30" alt="30"/></td><td class="ctr2" id="e2">0%</td><td class="ctr1" id="f2">28</td><td class="ctr2" id="g2">28</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j2">13</td><td class="ctr2" id="k2">13</td><td class="ctr1" id="l2">1</td><td class="ctr2" id="m2">1</td></tr><tr><td id="a5"><a href="Response$Usage.html" class="el_class">Response.Usage</a></td><td class="bar" id="b3"><img src="../jacoco-resources/redbar.gif" width="46" height="10" title="155" alt="155"/></td><td class="ctr2" id="c3">0%</td><td class="bar" id="d3"><img src="../jacoco-resources/redbar.gif" width="51" height="10" title="30" alt="30"/></td><td class="ctr2" id="e3">0%</td><td class="ctr1" id="f3">26</td><td class="ctr2" id="g3">26</td><td class="ctr1" id="h3">4</td><td class="ctr2" id="i3">4</td><td class="ctr1" id="j3">11</td><td class="ctr2" id="k3">11</td><td class="ctr1" id="l3">1</td><td class="ctr2" id="m3">1</td></tr><tr><td id="a4"><a href="Response$ResponseBuilder.html" class="el_class">Response.ResponseBuilder</a></td><td class="bar" id="b4"><img src="../jacoco-resources/redbar.gif" width="24" height="10" title="83" alt="83"/></td><td class="ctr2" id="c4">0%</td><td class="bar" id="d4"/><td class="ctr2" id="e4">n/a</td><td class="ctr1" id="f4">11</td><td class="ctr2" id="g4">11</td><td class="ctr1" id="h4">1</td><td class="ctr2" id="i4">1</td><td class="ctr1" id="j4">11</td><td class="ctr2" id="k4">11</td><td class="ctr1" id="l4">1</td><td class="ctr2" id="m4">1</td></tr><tr><td id="a1"><a href="Message$MessageBuilder.html" class="el_class">Message.MessageBuilder</a></td><td class="bar" id="b5"><img src="../jacoco-resources/redbar.gif" width="10" height="10" title="36" alt="36"/></td><td class="ctr2" id="c5">0%</td><td class="bar" id="d5"/><td class="ctr2" id="e5">n/a</td><td class="ctr1" id="f5">6</td><td class="ctr2" id="g5">6</td><td class="ctr1" id="h5">1</td><td class="ctr2" id="i5">1</td><td class="ctr1" id="j5">6</td><td class="ctr2" id="k5">6</td><td class="ctr1" id="l5">1</td><td class="ctr2" id="m5">1</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html b/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    deleted file mode 100644
    index 6f016859..00000000
    --- a/sentrius-llm-core/target/site/jacoco/io.sentrius.sso.genai/index.source.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="../jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="../jacoco-resources/report.gif" type="image/gif"/><title>io.sentrius.sso.genai</title><script type="text/javascript" src="../jacoco-resources/sort.js"></script></head><body onload="initialSort(['breadcrumb', 'coveragetable'])"><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="index.html" class="el_class">Classes</a><a href="../jacoco-sessions.html" class="el_session">Sessions</a></span><a href="../index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_package">io.sentrius.sso.genai</span></div><h1>io.sentrius.sso.genai</h1><table class="coverage" cellspacing="0" id="coveragetable"><thead><tr><td class="sortable" id="a" onclick="toggleSort(this)">Element</td><td class="down sortable bar" id="b" onclick="toggleSort(this)">Missed Instructions</td><td class="sortable ctr2" id="c" onclick="toggleSort(this)">Cov.</td><td class="sortable bar" id="d" onclick="toggleSort(this)">Missed Branches</td><td class="sortable ctr2" id="e" onclick="toggleSort(this)">Cov.</td><td class="sortable ctr1" id="f" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="g" onclick="toggleSort(this)">Cxty</td><td class="sortable ctr1" id="h" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="i" onclick="toggleSort(this)">Lines</td><td class="sortable ctr1" id="j" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="k" onclick="toggleSort(this)">Methods</td><td class="sortable ctr1" id="l" onclick="toggleSort(this)">Missed</td><td class="sortable ctr2" id="m" onclick="toggleSort(this)">Classes</td></tr></thead><tfoot><tr><td>Total</td><td class="bar">1,042 of 1,042</td><td class="ctr2">0%</td><td class="bar">168 of 168</td><td class="ctr2">0%</td><td class="ctr1">163</td><td class="ctr2">163</td><td class="ctr1">29</td><td class="ctr2">29</td><td class="ctr1">79</td><td class="ctr2">79</td><td class="ctr1">6</td><td class="ctr2">6</td></tr></tfoot><tbody><tr><td id="a1"><a href="Response.java.html" class="el_source">Response.java</a></td><td class="bar" id="b0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="835" alt="835"/></td><td class="ctr2" id="c0">0%</td><td class="bar" id="d0"><img src="../jacoco-resources/redbar.gif" width="120" height="10" title="138" alt="138"/></td><td class="ctr2" id="e0">0%</td><td class="ctr1" id="f0">129</td><td class="ctr2" id="g0">129</td><td class="ctr1" id="h0">22</td><td class="ctr2" id="i0">22</td><td class="ctr1" id="j0">60</td><td class="ctr2" id="k0">60</td><td class="ctr1" id="l0">4</td><td class="ctr2" id="m0">4</td></tr><tr><td id="a0"><a href="Message.java.html" class="el_source">Message.java</a></td><td class="bar" id="b1"><img src="../jacoco-resources/redbar.gif" width="29" height="10" title="207" alt="207"/></td><td class="ctr2" id="c1">0%</td><td class="bar" id="d1"><img src="../jacoco-resources/redbar.gif" width="26" height="10" title="30" alt="30"/></td><td class="ctr2" id="e1">0%</td><td class="ctr1" id="f1">34</td><td class="ctr2" id="g1">34</td><td class="ctr1" id="h1">7</td><td class="ctr2" id="i1">7</td><td class="ctr1" id="j1">19</td><td class="ctr2" id="k1">19</td><td class="ctr1" id="l1">2</td><td class="ctr2" id="m1">2</td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchfc.gif
    deleted file mode 100644
    index 989b46d30469b56b014758f846ee6c5abfda16aa..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;xhkjB6;lY!w31H*rY|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-NwhSNb
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchnc.gif
    deleted file mode 100644
    index 1933e07c376bb71bdd9aac91cf858da3fcdb0f1c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;xxz`$^Zf#E#^!~cec|42abCkrDN13QBb0}z1JGB7JtR5AQc
    j;9zf`qaAf{?!7xKElvq+aTP&4>6=b<*h$V|V6X-N9U38B
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/branchpc.gif
    deleted file mode 100644
    index cbf711b7030929b733f22f7a0cf3dbf61fe7868f..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHb<YM4rIK;v*A(Y{H7sIRF44*zR{6_+cKUo;L7}yzf7=QqzmVsHJqKe^n
    j0tb8h9POxsbMM_@X>m$mi>nCYN#As;!%lJz1A{dHmlPuc
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/bundle.gif
    deleted file mode 100644
    index fca9c53e629a7a5c07186ac1e2a1e37d8d6e88f4..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 709
    zcmZ?wbhEHb6krfwxXQrrpW*-7BK;<J$sad5=B26sxKQ!q!Hgdl8q(~HUL2e9<Hd#-
    z7dn1?IPw4g|HIv8zrOAI@nFG^8xwkB-G027acOnKpKtdcpWnHq-sr)BinT@BA8t%o
    znxj(b?=UZ3c5RMIe~{#!dZYLEkL_tSI^1f;Km(xolZ6pvtPY3(`H6w8*rB1oLr1Fr
    zgz}>o8CDEUD?$vun5^UNelT%D!ODh<DT^W#oSIlz7qWFr6j-<`INnfgQuR3aJbW7`
    zN4%4`K$`$#XID3aq+mZI+oZ{pxEUFwnVA`9&7C{VNtTt7ed)5L3!LN`S=X*xyV99u
    u^Omii+jqD*GFUt3=ar=9mFR|47NlA!WacKOr|PF?rg3q(j|Mjlf*SzSChrLV
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/class.gif
    deleted file mode 100644
    index eb348fb0d498d75976150047b1b5c2fefc9dc220..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 586
    zcmZ?wbhEHb6krfwI2Or}v!c<s$=9se-=Q<YsXNN8KQ3fOR@Cf*m^p=Yn<q4Gopkom
    z6_qkOy&5;;MsLfufQUJ{vGWR(7nLtMxlXsnMX%OXzt+v54k+vCJt@I!LR|T}_8Twn
    z8a23^wRl;#``dR0_3fQy*Wqv15n$II;MN!J-X9S(Eh&3>RsX(Ohwq+z^!{nkw1lu(
    zDPc2HV&`P7KEHX-jYA>R6T@ewM9fTyo0E0x)!k<wUj$8y`}qA+!h+12O)Zt{8e4bt
    z^z51Z;rqwPnTZ)o@)H-NC(KKmcWmLES9jAFW#uj_C|_66u(_dnV^!t4^7b9Ajhky9
    zzJD-rU(e=C8}{7Xx$oBQ`NwB1I6iy#jqQi->_2wz@P-Sk{|^LE{K>+|z);Vi!vF-J
    zIALI4-caAv+|t_C-oY&>$uA|y-ND80=rPrik*keM);A(7JS@bMXJ#`uzjsjN>eYc>
    zj1!vJoq|_~`Ugb%`8WwRvs$=Bx;h_qcXM-KZDthLjMNep5fPP;Q{vk%FCD3^prRsd
    zAfR@-Nl4k$GSW~(G16XNhoM=9$H>NPjk%o(&&DPp6ODz*?)|b>X&fF28jY>Ox-nZU
    Y5*r^bWMyL$kZ52~Skzz7#K>R`0G8r7i~s-t
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/down.gif
    deleted file mode 100644
    index 440a14db74e76c2b6e854eacac1c44414b166271..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ>Z%p}jXB
    Ub$^Lu-Ncq(ygK&ScM%3_0Po}%Qvd(}
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/greenbar.gif
    deleted file mode 100644
    index 0ba65672530ee09f086821a26156836d0c91bd74..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+ADXzmZ>do2<@m9j_x^v8Q5duh#b5>RIq$!Lmoo);w9mu$BQ0
    eDgI<(1nOeYVE_V<84N5O20cYWMlKB;4AuaIXBwOU
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/group.gif
    deleted file mode 100644
    index a4ea580d278fb727e4ae692838877fa63c4becf9..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 351
    zcmZ?wbhEHb6krfwxXQpVwXtJrV`pb|Z&Bgo_>{Q`Df1G5Wa`}H^qKLgbHn221;#86
    zie2Oyy23SVg;&(l)`=%9{nuIstg#PSrQx<&&vS#m*G7G>4W@o;CvAN*Y1^AgTVGGw
    z_ImEoPjiobns@ZmyknnMUi-Q7>W`Jzer$aB_t(pL-|kQQ|MAfO*PGv5?Ee3B$^ToO
    z|A8VGOaEW3eSEO?=BC06Ybq|Tt-P?N@;?|b;0205Sr{1@Oc``Qsz82XV5>PWtH47?
    zs^4Q~P@BxTjDV;&5*!R(s==>VnJe}-&SEIintfiq!@<H~=ly~!2^|49-&cqxtw`7?
    z#Ky|j%)-vX)?mu7-NU2OKVbs5sj!|NpR$sovf|v?yiO9jg7Wfm3i1lF3JOBbqGFPg
    YGSX7gGMmL+MfU97=X>Cwn<IlY03tk+6951J
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/method.gif
    deleted file mode 100644
    index 7d24707ee82f54aa9fb10d1d9050013cbf161a7a..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 193
    zcmV;y06zamNk%w1VGsZi0K@<Q1As^cfk_>VRxXubL!4|)qjO}gg>klxZ?TGXw~#-V
    zU_Y2&N}FX?r*L1YbYiM-aj|xBv2}#Mgo3?-guaA=wSS1Yfrz+)iMWB7#*ml2h^x<;
    ztIwFU(w+bR{{R30A^8LW0015UEC2ui01yBW000F(peK%GX`X1Rt}L1aL$Vf5mpMgx
    vG+WO#2NYmJDM}^)l;8n@L?90V%CN9pFcyU&MPO(u48jTlL$uClRtNw)MiWcq
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/package.gif
    deleted file mode 100644
    index 131c28da405493661e3253ef79a68bd273039295..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 227
    zcmZ?wbhEHb6krfwIKsg2^W*Nf7neOfxp04z;n8NJ+xzDotkS){bH@Hst%K#-*LO_c
    zo~yCDQ0v_4?v)A3lSAd#C95utQCbkGxF}NT_=2WF8}WGs5taT9|NsAIzy=h5vM@3*
    zNHFMtBtdpEuqG&|^`&Ia(}-MpBVo@mW@+b{B25<}cFdc?!Kkoc14n0vkh1`XOwU>7
    z#al8o_@;D=?hdfkdC)D9Q@O@%Lfqp;ZBt~9C*29`GMF2XzQp8akWQVjDvMC75PzEx
    Mi%z;upCW@b03m@=3jhEB
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
    deleted file mode 100644
    index be5166e0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.css
    +++ /dev/null
    @@ -1,13 +0,0 @@
    -/* Pretty printing styles. Used with prettify.js. */
    -
    -.str { color: #2A00FF; }
    -.kwd { color: #7F0055; font-weight:bold; }
    -.com { color: #3F5FBF; }
    -.typ { color: #606; }
    -.lit { color: #066; }
    -.pun { color: #660; }
    -.pln { color: #000; }
    -.tag { color: #008; }
    -.atn { color: #606; }
    -.atv { color: #080; }
    -.dec { color: #606; }
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
    deleted file mode 100644
    index b2766fe0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/prettify.js
    +++ /dev/null
    @@ -1,1510 +0,0 @@
    -// Copyright (C) 2006 Google Inc.
    -//
    -// Licensed under the Apache License, Version 2.0 (the "License");
    -// you may not use this file except in compliance with the License.
    -// You may obtain a copy of the License at
    -//
    -//      http://www.apache.org/licenses/LICENSE-2.0
    -//
    -// Unless required by applicable law or agreed to in writing, software
    -// distributed under the License is distributed on an "AS IS" BASIS,
    -// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
    -// See the License for the specific language governing permissions and
    -// limitations under the License.
    -
    -
    -/**
    - * @fileoverview
    - * some functions for browser-side pretty printing of code contained in html.
    - * <p>
    - *
    - * For a fairly comprehensive set of languages see the
    - * <a href="http://google-code-prettify.googlecode.com/svn/trunk/README.html#langs">README</a>
    - * file that came with this source.  At a minimum, the lexer should work on a
    - * number of languages including C and friends, Java, Python, Bash, SQL, HTML,
    - * XML, CSS, Javascript, and Makefiles.  It works passably on Ruby, PHP and Awk
    - * and a subset of Perl, but, because of commenting conventions, doesn't work on
    - * Smalltalk, Lisp-like, or CAML-like languages without an explicit lang class.
    - * <p>
    - * Usage: <ol>
    - * <li> include this source file in an html page via
    - *   {@code <script type="text/javascript" src="/path/to/prettify.js"></script>}
    - * <li> define style rules.  See the example page for examples.
    - * <li> mark the {@code <pre>} and {@code <code>} tags in your source with
    - *    {@code class=prettyprint.}
    - *    You can also use the (html deprecated) {@code <xmp>} tag, but the pretty
    - *    printer needs to do more substantial DOM manipulations to support that, so
    - *    some css styles may not be preserved.
    - * </ol>
    - * That's it.  I wanted to keep the API as simple as possible, so there's no
    - * need to specify which language the code is in, but if you wish, you can add
    - * another class to the {@code <pre>} or {@code <code>} element to specify the
    - * language, as in {@code <pre class="prettyprint lang-java">}.  Any class that
    - * starts with "lang-" followed by a file extension, specifies the file type.
    - * See the "lang-*.js" files in this directory for code that implements
    - * per-language file handlers.
    - * <p>
    - * Change log:<br>
    - * cbeust, 2006/08/22
    - * <blockquote>
    - *   Java annotations (start with "@") are now captured as literals ("lit")
    - * </blockquote>
    - * @requires console
    - */
    -
    -// JSLint declarations
    -/*global console, document, navigator, setTimeout, window */
    -
    -/**
    - * Split {@code prettyPrint} into multiple timeouts so as not to interfere with
    - * UI events.
    - * If set to {@code false}, {@code prettyPrint()} is synchronous.
    - */
    -window['PR_SHOULD_USE_CONTINUATION'] = true;
    -
    -/** the number of characters between tab columns */
    -window['PR_TAB_WIDTH'] = 8;
    -
    -/** Walks the DOM returning a properly escaped version of innerHTML.
    -  * @param {Node} node
    -  * @param {Array.<string>} out output buffer that receives chunks of HTML.
    -  */
    -window['PR_normalizedHtml']
    -
    -/** Contains functions for creating and registering new language handlers.
    -  * @type {Object}
    -  */
    -  = window['PR']
    -
    -/** Pretty print a chunk of code.
    -  *
    -  * @param {string} sourceCodeHtml code as html
    -  * @return {string} code as html, but prettier
    -  */
    -  = window['prettyPrintOne']
    -/** Find all the {@code <pre>} and {@code <code>} tags in the DOM with
    -  * {@code class=prettyprint} and prettify them.
    -  * @param {Function?} opt_whenDone if specified, called when the last entry
    -  *     has been finished.
    -  */
    -  = window['prettyPrint'] = void 0;
    -
    -/** browser detection. @extern @returns false if not IE, otherwise the major version. */
    -window['_pr_isIE6'] = function () {
    -  var ieVersion = navigator && navigator.userAgent &&
    -      navigator.userAgent.match(/\bMSIE ([678])\./);
    -  ieVersion = ieVersion ? +ieVersion[1] : false;
    -  window['_pr_isIE6'] = function () { return ieVersion; };
    -  return ieVersion;
    -};
    -
    -
    -(function () {
    -  // Keyword lists for various languages.
    -  var FLOW_CONTROL_KEYWORDS =
    -      "break continue do else for if return while ";
    -  var C_KEYWORDS = FLOW_CONTROL_KEYWORDS + "auto case char const default " +
    -      "double enum extern float goto int long register short signed sizeof " +
    -      "static struct switch typedef union unsigned void volatile ";
    -  var COMMON_KEYWORDS = C_KEYWORDS + "catch class delete false import " +
    -      "new operator private protected public this throw true try typeof ";
    -  var CPP_KEYWORDS = COMMON_KEYWORDS + "alignof align_union asm axiom bool " +
    -      "concept concept_map const_cast constexpr decltype " +
    -      "dynamic_cast explicit export friend inline late_check " +
    -      "mutable namespace nullptr reinterpret_cast static_assert static_cast " +
    -      "template typeid typename using virtual wchar_t where ";
    -  var JAVA_KEYWORDS = COMMON_KEYWORDS +
    -      "abstract boolean byte extends final finally implements import " +
    -      "instanceof null native package strictfp super synchronized throws " +
    -      "transient ";
    -  var CSHARP_KEYWORDS = JAVA_KEYWORDS +
    -      "as base by checked decimal delegate descending event " +
    -      "fixed foreach from group implicit in interface internal into is lock " +
    -      "object out override orderby params partial readonly ref sbyte sealed " +
    -      "stackalloc string select uint ulong unchecked unsafe ushort var ";
    -  var JSCRIPT_KEYWORDS = COMMON_KEYWORDS +
    -      "debugger eval export function get null set undefined var with " +
    -      "Infinity NaN ";
    -  var PERL_KEYWORDS = "caller delete die do dump elsif eval exit foreach for " +
    -      "goto if import last local my next no our print package redo require " +
    -      "sub undef unless until use wantarray while BEGIN END ";
    -  var PYTHON_KEYWORDS = FLOW_CONTROL_KEYWORDS + "and as assert class def del " +
    -      "elif except exec finally from global import in is lambda " +
    -      "nonlocal not or pass print raise try with yield " +
    -      "False True None ";
    -  var RUBY_KEYWORDS = FLOW_CONTROL_KEYWORDS + "alias and begin case class def" +
    -      " defined elsif end ensure false in module next nil not or redo rescue " +
    -      "retry self super then true undef unless until when yield BEGIN END ";
    -  var SH_KEYWORDS = FLOW_CONTROL_KEYWORDS + "case done elif esac eval fi " +
    -      "function in local set then until ";
    -  var ALL_KEYWORDS = (
    -      CPP_KEYWORDS + CSHARP_KEYWORDS + JSCRIPT_KEYWORDS + PERL_KEYWORDS +
    -      PYTHON_KEYWORDS + RUBY_KEYWORDS + SH_KEYWORDS);
    -
    -  // token style names.  correspond to css classes
    -  /** token style for a string literal */
    -  var PR_STRING = 'str';
    -  /** token style for a keyword */
    -  var PR_KEYWORD = 'kwd';
    -  /** token style for a comment */
    -  var PR_COMMENT = 'com';
    -  /** token style for a type */
    -  var PR_TYPE = 'typ';
    -  /** token style for a literal value.  e.g. 1, null, true. */
    -  var PR_LITERAL = 'lit';
    -  /** token style for a punctuation string. */
    -  var PR_PUNCTUATION = 'pun';
    -  /** token style for a punctuation string. */
    -  var PR_PLAIN = 'pln';
    -
    -  /** token style for an sgml tag. */
    -  var PR_TAG = 'tag';
    -  /** token style for a markup declaration such as a DOCTYPE. */
    -  var PR_DECLARATION = 'dec';
    -  /** token style for embedded source. */
    -  var PR_SOURCE = 'src';
    -  /** token style for an sgml attribute name. */
    -  var PR_ATTRIB_NAME = 'atn';
    -  /** token style for an sgml attribute value. */
    -  var PR_ATTRIB_VALUE = 'atv';
    -
    -  /**
    -   * A class that indicates a section of markup that is not code, e.g. to allow
    -   * embedding of line numbers within code listings.
    -   */
    -  var PR_NOCODE = 'nocode';
    -
    -  /** A set of tokens that can precede a regular expression literal in
    -    * javascript.
    -    * http://www.mozilla.org/js/language/js20/rationale/syntax.html has the full
    -    * list, but I've removed ones that might be problematic when seen in
    -    * languages that don't support regular expression literals.
    -    *
    -    * <p>Specifically, I've removed any keywords that can't precede a regexp
    -    * literal in a syntactically legal javascript program, and I've removed the
    -    * "in" keyword since it's not a keyword in many languages, and might be used
    -    * as a count of inches.
    -    *
    -    * <p>The link a above does not accurately describe EcmaScript rules since
    -    * it fails to distinguish between (a=++/b/i) and (a++/b/i) but it works
    -    * very well in practice.
    -    *
    -    * @private
    -    */
    -  var REGEXP_PRECEDER_PATTERN = function () {
    -      var preceders = [
    -          "!", "!=", "!==", "#", "%", "%=", "&", "&&", "&&=",
    -          "&=", "(", "*", "*=", /* "+", */ "+=", ",", /* "-", */ "-=",
    -          "->", /*".", "..", "...", handled below */ "/", "/=", ":", "::", ";",
    -          "<", "<<", "<<=", "<=", "=", "==", "===", ">",
    -          ">=", ">>", ">>=", ">>>", ">>>=", "?", "@", "[",
    -          "^", "^=", "^^", "^^=", "{", "|", "|=", "||",
    -          "||=", "~" /* handles =~ and !~ */,
    -          "break", "case", "continue", "delete",
    -          "do", "else", "finally", "instanceof",
    -          "return", "throw", "try", "typeof"
    -          ];
    -      var pattern = '(?:^^|[+-]';
    -      for (var i = 0; i < preceders.length; ++i) {
    -        pattern += '|' + preceders[i].replace(/([^=<>:&a-z])/g, '\\$1');
    -      }
    -      pattern += ')\\s*';  // matches at end, and matches empty string
    -      return pattern;
    -      // CAVEAT: this does not properly handle the case where a regular
    -      // expression immediately follows another since a regular expression may
    -      // have flags for case-sensitivity and the like.  Having regexp tokens
    -      // adjacent is not valid in any language I'm aware of, so I'm punting.
    -      // TODO: maybe style special characters inside a regexp as punctuation.
    -    }();
    -
    -  // Define regexps here so that the interpreter doesn't have to create an
    -  // object each time the function containing them is called.
    -  // The language spec requires a new object created even if you don't access
    -  // the $1 members.
    -  var pr_amp = /&/g;
    -  var pr_lt = /</g;
    -  var pr_gt = />/g;
    -  var pr_quot = /\"/g;
    -  /** like textToHtml but escapes double quotes to be attribute safe. */
    -  function attribToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;')
    -        .replace(pr_quot, '&quot;');
    -  }
    -
    -  /** escapest html special characters to html. */
    -  function textToHtml(str) {
    -    return str.replace(pr_amp, '&amp;')
    -        .replace(pr_lt, '&lt;')
    -        .replace(pr_gt, '&gt;');
    -  }
    -
    -
    -  var pr_ltEnt = /&lt;/g;
    -  var pr_gtEnt = /&gt;/g;
    -  var pr_aposEnt = /&apos;/g;
    -  var pr_quotEnt = /&quot;/g;
    -  var pr_ampEnt = /&amp;/g;
    -  var pr_nbspEnt = /&nbsp;/g;
    -  /** unescapes html to plain text. */
    -  function htmlToText(html) {
    -    var pos = html.indexOf('&');
    -    if (pos < 0) { return html; }
    -    // Handle numeric entities specially.  We can't use functional substitution
    -    // since that doesn't work in older versions of Safari.
    -    // These should be rare since most browsers convert them to normal chars.
    -    for (--pos; (pos = html.indexOf('&#', pos + 1)) >= 0;) {
    -      var end = html.indexOf(';', pos);
    -      if (end >= 0) {
    -        var num = html.substring(pos + 3, end);
    -        var radix = 10;
    -        if (num && num.charAt(0) === 'x') {
    -          num = num.substring(1);
    -          radix = 16;
    -        }
    -        var codePoint = parseInt(num, radix);
    -        if (!isNaN(codePoint)) {
    -          html = (html.substring(0, pos) + String.fromCharCode(codePoint) +
    -                  html.substring(end + 1));
    -        }
    -      }
    -    }
    -
    -    return html.replace(pr_ltEnt, '<')
    -        .replace(pr_gtEnt, '>')
    -        .replace(pr_aposEnt, "'")
    -        .replace(pr_quotEnt, '"')
    -        .replace(pr_nbspEnt, ' ')
    -        .replace(pr_ampEnt, '&');
    -  }
    -
    -  /** is the given node's innerHTML normally unescaped? */
    -  function isRawContent(node) {
    -    return 'XMP' === node.tagName;
    -  }
    -
    -  var newlineRe = /[\r\n]/g;
    -  /**
    -   * Are newlines and adjacent spaces significant in the given node's innerHTML?
    -   */
    -  function isPreformatted(node, content) {
    -    // PRE means preformatted, and is a very common case, so don't create
    -    // unnecessary computed style objects.
    -    if ('PRE' === node.tagName) { return true; }
    -    if (!newlineRe.test(content)) { return true; }  // Don't care
    -    var whitespace = '';
    -    // For disconnected nodes, IE has no currentStyle.
    -    if (node.currentStyle) {
    -      whitespace = node.currentStyle.whiteSpace;
    -    } else if (window.getComputedStyle) {
    -      // Firefox makes a best guess if node is disconnected whereas Safari
    -      // returns the empty string.
    -      whitespace = window.getComputedStyle(node, null).whiteSpace;
    -    }
    -    return !whitespace || whitespace === 'pre';
    -  }
    -
    -  function normalizedHtml(node, out, opt_sortAttrs) {
    -    switch (node.nodeType) {
    -      case 1:  // an element
    -        var name = node.tagName.toLowerCase();
    -
    -        out.push('<', name);
    -        var attrs = node.attributes;
    -        var n = attrs.length;
    -        if (n) {
    -          if (opt_sortAttrs) {
    -            var sortedAttrs = [];
    -            for (var i = n; --i >= 0;) { sortedAttrs[i] = attrs[i]; }
    -            sortedAttrs.sort(function (a, b) {
    -                return (a.name < b.name) ? -1 : a.name === b.name ? 0 : 1;
    -              });
    -            attrs = sortedAttrs;
    -          }
    -          for (var i = 0; i < n; ++i) {
    -            var attr = attrs[i];
    -            if (!attr.specified) { continue; }
    -            out.push(' ', attr.name.toLowerCase(),
    -                     '="', attribToHtml(attr.value), '"');
    -          }
    -        }
    -        out.push('>');
    -        for (var child = node.firstChild; child; child = child.nextSibling) {
    -          normalizedHtml(child, out, opt_sortAttrs);
    -        }
    -        if (node.firstChild || !/^(?:br|link|img)$/.test(name)) {
    -          out.push('<\/', name, '>');
    -        }
    -        break;
    -      case 3: case 4: // text
    -        out.push(textToHtml(node.nodeValue));
    -        break;
    -    }
    -  }
    -
    -  /**
    -   * Given a group of {@link RegExp}s, returns a {@code RegExp} that globally
    -   * matches the union o the sets o strings matched d by the input RegExp.
    -   * Since it matches globally, if the input strings have a start-of-input
    -   * anchor (/^.../), it is ignored for the purposes of unioning.
    -   * @param {Array.<RegExp>} regexs non multiline, non-global regexs.
    -   * @return {RegExp} a global regex.
    -   */
    -  function combinePrefixPatterns(regexs) {
    -    var capturedGroupIndex = 0;
    -
    -    var needToFoldCase = false;
    -    var ignoreCase = false;
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.ignoreCase) {
    -        ignoreCase = true;
    -      } else if (/[a-z]/i.test(regex.source.replace(
    -                     /\\u[0-9a-f]{4}|\\x[0-9a-f]{2}|\\[^ux]/gi, ''))) {
    -        needToFoldCase = true;
    -        ignoreCase = false;
    -        break;
    -      }
    -    }
    -
    -    function decodeEscape(charsetPart) {
    -      if (charsetPart.charAt(0) !== '\\') { return charsetPart.charCodeAt(0); }
    -      switch (charsetPart.charAt(1)) {
    -        case 'b': return 8;
    -        case 't': return 9;
    -        case 'n': return 0xa;
    -        case 'v': return 0xb;
    -        case 'f': return 0xc;
    -        case 'r': return 0xd;
    -        case 'u': case 'x':
    -          return parseInt(charsetPart.substring(2), 16)
    -              || charsetPart.charCodeAt(1);
    -        case '0': case '1': case '2': case '3': case '4':
    -        case '5': case '6': case '7':
    -          return parseInt(charsetPart.substring(1), 8);
    -        default: return charsetPart.charCodeAt(1);
    -      }
    -    }
    -
    -    function encodeEscape(charCode) {
    -      if (charCode < 0x20) {
    -        return (charCode < 0x10 ? '\\x0' : '\\x') + charCode.toString(16);
    -      }
    -      var ch = String.fromCharCode(charCode);
    -      if (ch === '\\' || ch === '-' || ch === '[' || ch === ']') {
    -        ch = '\\' + ch;
    -      }
    -      return ch;
    -    }
    -
    -    function caseFoldCharset(charSet) {
    -      var charsetParts = charSet.substring(1, charSet.length - 1).match(
    -          new RegExp(
    -              '\\\\u[0-9A-Fa-f]{4}'
    -              + '|\\\\x[0-9A-Fa-f]{2}'
    -              + '|\\\\[0-3][0-7]{0,2}'
    -              + '|\\\\[0-7]{1,2}'
    -              + '|\\\\[\\s\\S]'
    -              + '|-'
    -              + '|[^-\\\\]',
    -              'g'));
    -      var groups = [];
    -      var ranges = [];
    -      var inverse = charsetParts[0] === '^';
    -      for (var i = inverse ? 1 : 0, n = charsetParts.length; i < n; ++i) {
    -        var p = charsetParts[i];
    -        switch (p) {
    -          case '\\B': case '\\b':
    -          case '\\D': case '\\d':
    -          case '\\S': case '\\s':
    -          case '\\W': case '\\w':
    -            groups.push(p);
    -            continue;
    -        }
    -        var start = decodeEscape(p);
    -        var end;
    -        if (i + 2 < n && '-' === charsetParts[i + 1]) {
    -          end = decodeEscape(charsetParts[i + 2]);
    -          i += 2;
    -        } else {
    -          end = start;
    -        }
    -        ranges.push([start, end]);
    -        // If the range might intersect letters, then expand it.
    -        if (!(end < 65 || start > 122)) {
    -          if (!(end < 65 || start > 90)) {
    -            ranges.push([Math.max(65, start) | 32, Math.min(end, 90) | 32]);
    -          }
    -          if (!(end < 97 || start > 122)) {
    -            ranges.push([Math.max(97, start) & ~32, Math.min(end, 122) & ~32]);
    -          }
    -        }
    -      }
    -
    -      // [[1, 10], [3, 4], [8, 12], [14, 14], [16, 16], [17, 17]]
    -      // -> [[1, 12], [14, 14], [16, 17]]
    -      ranges.sort(function (a, b) { return (a[0] - b[0]) || (b[1]  - a[1]); });
    -      var consolidatedRanges = [];
    -      var lastRange = [NaN, NaN];
    -      for (var i = 0; i < ranges.length; ++i) {
    -        var range = ranges[i];
    -        if (range[0] <= lastRange[1] + 1) {
    -          lastRange[1] = Math.max(lastRange[1], range[1]);
    -        } else {
    -          consolidatedRanges.push(lastRange = range);
    -        }
    -      }
    -
    -      var out = ['['];
    -      if (inverse) { out.push('^'); }
    -      out.push.apply(out, groups);
    -      for (var i = 0; i < consolidatedRanges.length; ++i) {
    -        var range = consolidatedRanges[i];
    -        out.push(encodeEscape(range[0]));
    -        if (range[1] > range[0]) {
    -          if (range[1] + 1 > range[0]) { out.push('-'); }
    -          out.push(encodeEscape(range[1]));
    -        }
    -      }
    -      out.push(']');
    -      return out.join('');
    -    }
    -
    -    function allowAnywhereFoldCaseAndRenumberGroups(regex) {
    -      // Split into character sets, escape sequences, punctuation strings
    -      // like ('(', '(?:', ')', '^'), and runs of characters that do not
    -      // include any of the above.
    -      var parts = regex.source.match(
    -          new RegExp(
    -              '(?:'
    -              + '\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]'  // a character set
    -              + '|\\\\u[A-Fa-f0-9]{4}'  // a unicode escape
    -              + '|\\\\x[A-Fa-f0-9]{2}'  // a hex escape
    -              + '|\\\\[0-9]+'  // a back-reference or octal escape
    -              + '|\\\\[^ux0-9]'  // other escape sequence
    -              + '|\\(\\?[:!=]'  // start of a non-capturing group
    -              + '|[\\(\\)\\^]'  // start/emd of a group, or line start
    -              + '|[^\\x5B\\x5C\\(\\)\\^]+'  // run of other characters
    -              + ')',
    -              'g'));
    -      var n = parts.length;
    -
    -      // Maps captured group numbers to the number they will occupy in
    -      // the output or to -1 if that has not been determined, or to
    -      // undefined if they need not be capturing in the output.
    -      var capturedGroups = [];
    -
    -      // Walk over and identify back references to build the capturedGroups
    -      // mapping.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          // groups are 1-indexed, so max group index is count of '('
    -          ++groupIndex;
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            capturedGroups[decimalValue] = -1;
    -          }
    -        }
    -      }
    -
    -      // Renumber groups and reduce capturing groups to non-capturing groups
    -      // where possible.
    -      for (var i = 1; i < capturedGroups.length; ++i) {
    -        if (-1 === capturedGroups[i]) {
    -          capturedGroups[i] = ++capturedGroupIndex;
    -        }
    -      }
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        var p = parts[i];
    -        if (p === '(') {
    -          ++groupIndex;
    -          if (capturedGroups[groupIndex] === undefined) {
    -            parts[i] = '(?:';
    -          }
    -        } else if ('\\' === p.charAt(0)) {
    -          var decimalValue = +p.substring(1);
    -          if (decimalValue && decimalValue <= groupIndex) {
    -            parts[i] = '\\' + capturedGroups[groupIndex];
    -          }
    -        }
    -      }
    -
    -      // Remove any prefix anchors so that the output will match anywhere.
    -      // ^^ really does mean an anchored match though.
    -      for (var i = 0, groupIndex = 0; i < n; ++i) {
    -        if ('^' === parts[i] && '^' !== parts[i + 1]) { parts[i] = ''; }
    -      }
    -
    -      // Expand letters to groupts to handle mixing of case-sensitive and
    -      // case-insensitive patterns if necessary.
    -      if (regex.ignoreCase && needToFoldCase) {
    -        for (var i = 0; i < n; ++i) {
    -          var p = parts[i];
    -          var ch0 = p.charAt(0);
    -          if (p.length >= 2 && ch0 === '[') {
    -            parts[i] = caseFoldCharset(p);
    -          } else if (ch0 !== '\\') {
    -            // TODO: handle letters in numeric escapes.
    -            parts[i] = p.replace(
    -                /[a-zA-Z]/g,
    -                function (ch) {
    -                  var cc = ch.charCodeAt(0);
    -                  return '[' + String.fromCharCode(cc & ~32, cc | 32) + ']';
    -                });
    -          }
    -        }
    -      }
    -
    -      return parts.join('');
    -    }
    -
    -    var rewritten = [];
    -    for (var i = 0, n = regexs.length; i < n; ++i) {
    -      var regex = regexs[i];
    -      if (regex.global || regex.multiline) { throw new Error('' + regex); }
    -      rewritten.push(
    -          '(?:' + allowAnywhereFoldCaseAndRenumberGroups(regex) + ')');
    -    }
    -
    -    return new RegExp(rewritten.join('|'), ignoreCase ? 'gi' : 'g');
    -  }
    -
    -  var PR_innerHtmlWorks = null;
    -  function getInnerHtml(node) {
    -    // inner html is hopelessly broken in Safari 2.0.4 when the content is
    -    // an html description of well formed XML and the containing tag is a PRE
    -    // tag, so we detect that case and emulate innerHTML.
    -    if (null === PR_innerHtmlWorks) {
    -      var testNode = document.createElement('PRE');
    -      testNode.appendChild(
    -          document.createTextNode('<!DOCTYPE foo PUBLIC "foo bar">\n<foo />'));
    -      PR_innerHtmlWorks = !/</.test(testNode.innerHTML);
    -    }
    -
    -    if (PR_innerHtmlWorks) {
    -      var content = node.innerHTML;
    -      // XMP tags contain unescaped entities so require special handling.
    -      if (isRawContent(node)) {
    -        content = textToHtml(content);
    -      } else if (!isPreformatted(node, content)) {
    -        content = content.replace(/(<br\s*\/?>)[\r\n]+/g, '$1')
    -            .replace(/(?:[\r\n]+[ \t]*)+/g, ' ');
    -      }
    -      return content;
    -    }
    -
    -    var out = [];
    -    for (var child = node.firstChild; child; child = child.nextSibling) {
    -      normalizedHtml(child, out);
    -    }
    -    return out.join('');
    -  }
    -
    -  /** returns a function that expand tabs to spaces.  This function can be fed
    -    * successive chunks of text, and will maintain its own internal state to
    -    * keep track of how tabs are expanded.
    -    * @return {function (string) : string} a function that takes
    -    *   plain text and return the text with tabs expanded.
    -    * @private
    -    */
    -  function makeTabExpander(tabWidth) {
    -    var SPACES = '                ';
    -    var charInLine = 0;
    -
    -    return function (plainText) {
    -      // walk over each character looking for tabs and newlines.
    -      // On tabs, expand them.  On newlines, reset charInLine.
    -      // Otherwise increment charInLine
    -      var out = null;
    -      var pos = 0;
    -      for (var i = 0, n = plainText.length; i < n; ++i) {
    -        var ch = plainText.charAt(i);
    -
    -        switch (ch) {
    -          case '\t':
    -            if (!out) { out = []; }
    -            out.push(plainText.substring(pos, i));
    -            // calculate how much space we need in front of this part
    -            // nSpaces is the amount of padding -- the number of spaces needed
    -            // to move us to the next column, where columns occur at factors of
    -            // tabWidth.
    -            var nSpaces = tabWidth - (charInLine % tabWidth);
    -            charInLine += nSpaces;
    -            for (; nSpaces >= 0; nSpaces -= SPACES.length) {
    -              out.push(SPACES.substring(0, nSpaces));
    -            }
    -            pos = i + 1;
    -            break;
    -          case '\n':
    -            charInLine = 0;
    -            break;
    -          default:
    -            ++charInLine;
    -        }
    -      }
    -      if (!out) { return plainText; }
    -      out.push(plainText.substring(pos));
    -      return out.join('');
    -    };
    -  }
    -
    -  var pr_chunkPattern = new RegExp(
    -      '[^<]+'  // A run of characters other than '<'
    -      + '|<\!--[\\s\\S]*?--\>'  // an HTML comment
    -      + '|<!\\[CDATA\\[[\\s\\S]*?\\]\\]>'  // a CDATA section
    -      // a probable tag that should not be highlighted
    -      + '|<\/?[a-zA-Z](?:[^>\"\']|\'[^\']*\'|\"[^\"]*\")*>'
    -      + '|<',  // A '<' that does not begin a larger chunk
    -      'g');
    -  var pr_commentPrefix = /^<\!--/;
    -  var pr_cdataPrefix = /^<!\[CDATA\[/;
    -  var pr_brPrefix = /^<br\b/i;
    -  var pr_tagNameRe = /^<(\/?)([a-zA-Z][a-zA-Z0-9]*)/;
    -
    -  /** split markup into chunks of html tags (style null) and
    -    * plain text (style {@link #PR_PLAIN}), converting tags which are
    -    * significant for tokenization (<br>) into their textual equivalent.
    -    *
    -    * @param {string} s html where whitespace is considered significant.
    -    * @return {Object} source code and extracted tags.
    -    * @private
    -    */
    -  function extractTags(s) {
    -    // since the pattern has the 'g' modifier and defines no capturing groups,
    -    // this will return a list of all chunks which we then classify and wrap as
    -    // PR_Tokens
    -    var matches = s.match(pr_chunkPattern);
    -    var sourceBuf = [];
    -    var sourceBufLen = 0;
    -    var extractedTags = [];
    -    if (matches) {
    -      for (var i = 0, n = matches.length; i < n; ++i) {
    -        var match = matches[i];
    -        if (match.length > 1 && match.charAt(0) === '<') {
    -          if (pr_commentPrefix.test(match)) { continue; }
    -          if (pr_cdataPrefix.test(match)) {
    -            // strip CDATA prefix and suffix.  Don't unescape since it's CDATA
    -            sourceBuf.push(match.substring(9, match.length - 3));
    -            sourceBufLen += match.length - 12;
    -          } else if (pr_brPrefix.test(match)) {
    -            // <br> tags are lexically significant so convert them to text.
    -            // This is undone later.
    -            sourceBuf.push('\n');
    -            ++sourceBufLen;
    -          } else {
    -            if (match.indexOf(PR_NOCODE) >= 0 && isNoCodeTag(match)) {
    -              // A <span class="nocode"> will start a section that should be
    -              // ignored.  Continue walking the list until we see a matching end
    -              // tag.
    -              var name = match.match(pr_tagNameRe)[2];
    -              var depth = 1;
    -              var j;
    -              end_tag_loop:
    -              for (j = i + 1; j < n; ++j) {
    -                var name2 = matches[j].match(pr_tagNameRe);
    -                if (name2 && name2[2] === name) {
    -                  if (name2[1] === '/') {
    -                    if (--depth === 0) { break end_tag_loop; }
    -                  } else {
    -                    ++depth;
    -                  }
    -                }
    -              }
    -              if (j < n) {
    -                extractedTags.push(
    -                    sourceBufLen, matches.slice(i, j + 1).join(''));
    -                i = j;
    -              } else {  // Ignore unclosed sections.
    -                extractedTags.push(sourceBufLen, match);
    -              }
    -            } else {
    -              extractedTags.push(sourceBufLen, match);
    -            }
    -          }
    -        } else {
    -          var literalText = htmlToText(match);
    -          sourceBuf.push(literalText);
    -          sourceBufLen += literalText.length;
    -        }
    -      }
    -    }
    -    return { source: sourceBuf.join(''), tags: extractedTags };
    -  }
    -
    -  /** True if the given tag contains a class attribute with the nocode class. */
    -  function isNoCodeTag(tag) {
    -    return !!tag
    -        // First canonicalize the representation of attributes
    -        .replace(/\s(\w+)\s*=\s*(?:\"([^\"]*)\"|'([^\']*)'|(\S+))/g,
    -                 ' $1="$2$3$4"')
    -        // Then look for the attribute we want.
    -        .match(/[cC][lL][aA][sS][sS]=\"[^\"]*\bnocode\b/);
    -  }
    -
    -  /**
    -   * Apply the given language handler to sourceCode and add the resulting
    -   * decorations to out.
    -   * @param {number} basePos the index of sourceCode within the chunk of source
    -   *    whose decorations are already present on out.
    -   */
    -  function appendDecorations(basePos, sourceCode, langHandler, out) {
    -    if (!sourceCode) { return; }
    -    var job = {
    -      source: sourceCode,
    -      basePos: basePos
    -    };
    -    langHandler(job);
    -    out.push.apply(out, job.decorations);
    -  }
    -
    -  /** Given triples of [style, pattern, context] returns a lexing function,
    -    * The lexing function interprets the patterns to find token boundaries and
    -    * returns a decoration list of the form
    -    * [index_0, style_0, index_1, style_1, ..., index_n, style_n]
    -    * where index_n is an index into the sourceCode, and style_n is a style
    -    * constant like PR_PLAIN.  index_n-1 <= index_n, and style_n-1 applies to
    -    * all characters in sourceCode[index_n-1:index_n].
    -    *
    -    * The stylePatterns is a list whose elements have the form
    -    * [style : string, pattern : RegExp, DEPRECATED, shortcut : string].
    -    *
    -    * Style is a style constant like PR_PLAIN, or can be a string of the
    -    * form 'lang-FOO', where FOO is a language extension describing the
    -    * language of the portion of the token in $1 after pattern executes.
    -    * E.g., if style is 'lang-lisp', and group 1 contains the text
    -    * '(hello (world))', then that portion of the token will be passed to the
    -    * registered lisp handler for formatting.
    -    * The text before and after group 1 will be restyled using this decorator
    -    * so decorators should take care that this doesn't result in infinite
    -    * recursion.  For example, the HTML lexer rule for SCRIPT elements looks
    -    * something like ['lang-js', /<[s]cript>(.+?)<\/script>/].  This may match
    -    * '<script>foo()<\/script>', which would cause the current decorator to
    -    * be called with '<script>' which would not match the same rule since
    -    * group 1 must not be empty, so it would be instead styled as PR_TAG by
    -    * the generic tag rule.  The handler registered for the 'js' extension would
    -    * then be called with 'foo()', and finally, the current decorator would
    -    * be called with '<\/script>' which would not match the original rule and
    -    * so the generic tag rule would identify it as a tag.
    -    *
    -    * Pattern must only match prefixes, and if it matches a prefix, then that
    -    * match is considered a token with the same style.
    -    *
    -    * Context is applied to the last non-whitespace, non-comment token
    -    * recognized.
    -    *
    -    * Shortcut is an optional string of characters, any of which, if the first
    -    * character, gurantee that this pattern and only this pattern matches.
    -    *
    -    * @param {Array} shortcutStylePatterns patterns that always start with
    -    *   a known character.  Must have a shortcut string.
    -    * @param {Array} fallthroughStylePatterns patterns that will be tried in
    -    *   order if the shortcut ones fail.  May have shortcuts.
    -    *
    -    * @return {function (Object)} a
    -    *   function that takes source code and returns a list of decorations.
    -    */
    -  function createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns) {
    -    var shortcuts = {};
    -    var tokenizer;
    -    (function () {
    -      var allPatterns = shortcutStylePatterns.concat(fallthroughStylePatterns);
    -      var allRegexs = [];
    -      var regexKeys = {};
    -      for (var i = 0, n = allPatterns.length; i < n; ++i) {
    -        var patternParts = allPatterns[i];
    -        var shortcutChars = patternParts[3];
    -        if (shortcutChars) {
    -          for (var c = shortcutChars.length; --c >= 0;) {
    -            shortcuts[shortcutChars.charAt(c)] = patternParts;
    -          }
    -        }
    -        var regex = patternParts[1];
    -        var k = '' + regex;
    -        if (!regexKeys.hasOwnProperty(k)) {
    -          allRegexs.push(regex);
    -          regexKeys[k] = null;
    -        }
    -      }
    -      allRegexs.push(/[\0-\uffff]/);
    -      tokenizer = combinePrefixPatterns(allRegexs);
    -    })();
    -
    -    var nPatterns = fallthroughStylePatterns.length;
    -    var notWs = /\S/;
    -
    -    /**
    -     * Lexes job.source and produces an output array job.decorations of style
    -     * classes preceded by the position at which they start in job.source in
    -     * order.
    -     *
    -     * @param {Object} job an object like {@code
    -     *    source: {string} sourceText plain text,
    -     *    basePos: {int} position of job.source in the larger chunk of
    -     *        sourceCode.
    -     * }
    -     */
    -    var decorate = function (job) {
    -      var sourceCode = job.source, basePos = job.basePos;
    -      /** Even entries are positions in source in ascending order.  Odd enties
    -        * are style markers (e.g., PR_COMMENT) that run from that position until
    -        * the end.
    -        * @type {Array.<number|string>}
    -        */
    -      var decorations = [basePos, PR_PLAIN];
    -      var pos = 0;  // index into sourceCode
    -      var tokens = sourceCode.match(tokenizer) || [];
    -      var styleCache = {};
    -
    -      for (var ti = 0, nTokens = tokens.length; ti < nTokens; ++ti) {
    -        var token = tokens[ti];
    -        var style = styleCache[token];
    -        var match = void 0;
    -
    -        var isEmbedded;
    -        if (typeof style === 'string') {
    -          isEmbedded = false;
    -        } else {
    -          var patternParts = shortcuts[token.charAt(0)];
    -          if (patternParts) {
    -            match = token.match(patternParts[1]);
    -            style = patternParts[0];
    -          } else {
    -            for (var i = 0; i < nPatterns; ++i) {
    -              patternParts = fallthroughStylePatterns[i];
    -              match = token.match(patternParts[1]);
    -              if (match) {
    -                style = patternParts[0];
    -                break;
    -              }
    -            }
    -
    -            if (!match) {  // make sure that we make progress
    -              style = PR_PLAIN;
    -            }
    -          }
    -
    -          isEmbedded = style.length >= 5 && 'lang-' === style.substring(0, 5);
    -          if (isEmbedded && !(match && typeof match[1] === 'string')) {
    -            isEmbedded = false;
    -            style = PR_SOURCE;
    -          }
    -
    -          if (!isEmbedded) { styleCache[token] = style; }
    -        }
    -
    -        var tokenStart = pos;
    -        pos += token.length;
    -
    -        if (!isEmbedded) {
    -          decorations.push(basePos + tokenStart, style);
    -        } else {  // Treat group 1 as an embedded block of source code.
    -          var embeddedSource = match[1];
    -          var embeddedSourceStart = token.indexOf(embeddedSource);
    -          var embeddedSourceEnd = embeddedSourceStart + embeddedSource.length;
    -          if (match[2]) {
    -            // If embeddedSource can be blank, then it would match at the
    -            // beginning which would cause us to infinitely recurse on the
    -            // entire token, so we catch the right context in match[2].
    -            embeddedSourceEnd = token.length - match[2].length;
    -            embeddedSourceStart = embeddedSourceEnd - embeddedSource.length;
    -          }
    -          var lang = style.substring(5);
    -          // Decorate the left of the embedded source
    -          appendDecorations(
    -              basePos + tokenStart,
    -              token.substring(0, embeddedSourceStart),
    -              decorate, decorations);
    -          // Decorate the embedded source
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceStart,
    -              embeddedSource,
    -              langHandlerForExtension(lang, embeddedSource),
    -              decorations);
    -          // Decorate the right of the embedded section
    -          appendDecorations(
    -              basePos + tokenStart + embeddedSourceEnd,
    -              token.substring(embeddedSourceEnd),
    -              decorate, decorations);
    -        }
    -      }
    -      job.decorations = decorations;
    -    };
    -    return decorate;
    -  }
    -
    -  /** returns a function that produces a list of decorations from source text.
    -    *
    -    * This code treats ", ', and ` as string delimiters, and \ as a string
    -    * escape.  It does not recognize perl's qq() style strings.
    -    * It has no special handling for double delimiter escapes as in basic, or
    -    * the tripled delimiters used in python, but should work on those regardless
    -    * although in those cases a single string literal may be broken up into
    -    * multiple adjacent string literals.
    -    *
    -    * It recognizes C, C++, and shell style comments.
    -    *
    -    * @param {Object} options a set of optional parameters.
    -    * @return {function (Object)} a function that examines the source code
    -    *     in the input job and builds the decoration list.
    -    */
    -  function sourceDecorator(options) {
    -    var shortcutStylePatterns = [], fallthroughStylePatterns = [];
    -    if (options['tripleQuotedStrings']) {
    -      // '''multi-line-string''', 'single-line-string', and double-quoted
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,
    -           null, '\'"']);
    -    } else if (options['multiLineStrings']) {
    -      // 'multi-line-string', "multi-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,  /^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,
    -           null, '\'"`']);
    -    } else {
    -      // 'single-line-string', "single-line-string"
    -      shortcutStylePatterns.push(
    -          [PR_STRING,
    -           /^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,
    -           null, '"\'']);
    -    }
    -    if (options['verbatimStrings']) {
    -      // verbatim-string-literal production from the C# grammar.  See issue 93.
    -      fallthroughStylePatterns.push(
    -          [PR_STRING, /^@\"(?:[^\"]|\"\")*(?:\"|$)/, null]);
    -    }
    -    if (options['hashComments']) {
    -      if (options['cStyleComments']) {
    -        // Stop C preprocessor declarations at an unclosed open comment
    -        shortcutStylePatterns.push(
    -            [PR_COMMENT, /^#(?:(?:define|elif|else|endif|error|ifdef|include|ifndef|line|pragma|undef|warning)\b|[^\r\n]*)/,
    -             null, '#']);
    -        fallthroughStylePatterns.push(
    -            [PR_STRING,
    -             /^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h|[a-z]\w*)>/,
    -             null]);
    -      } else {
    -        shortcutStylePatterns.push([PR_COMMENT, /^#[^\r\n]*/, null, '#']);
    -      }
    -    }
    -    if (options['cStyleComments']) {
    -      fallthroughStylePatterns.push([PR_COMMENT, /^\/\/[^\r\n]*/, null]);
    -      fallthroughStylePatterns.push(
    -          [PR_COMMENT, /^\/\*[\s\S]*?(?:\*\/|$)/, null]);
    -    }
    -    if (options['regexLiterals']) {
    -      var REGEX_LITERAL = (
    -          // A regular expression literal starts with a slash that is
    -          // not followed by * or / so that it is not confused with
    -          // comments.
    -          '/(?=[^/*])'
    -          // and then contains any number of raw characters,
    -          + '(?:[^/\\x5B\\x5C]'
    -          // escape sequences (\x5C),
    -          +    '|\\x5C[\\s\\S]'
    -          // or non-nesting character sets (\x5B\x5D);
    -          +    '|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+'
    -          // finally closed by a /.
    -          + '/');
    -      fallthroughStylePatterns.push(
    -          ['lang-regex',
    -           new RegExp('^' + REGEXP_PRECEDER_PATTERN + '(' + REGEX_LITERAL + ')')
    -           ]);
    -    }
    -
    -    var keywords = options['keywords'].replace(/^\s+|\s+$/g, '');
    -    if (keywords.length) {
    -      fallthroughStylePatterns.push(
    -          [PR_KEYWORD,
    -           new RegExp('^(?:' + keywords.replace(/\s+/g, '|') + ')\\b'), null]);
    -    }
    -
    -    shortcutStylePatterns.push([PR_PLAIN,       /^\s+/, null, ' \r\n\t\xA0']);
    -    fallthroughStylePatterns.push(
    -        // TODO(mikesamuel): recognize non-latin letters and numerals in idents
    -        [PR_LITERAL,     /^@[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_TYPE,        /^@?[A-Z]+[a-z][A-Za-z_$@0-9]*/, null],
    -        [PR_PLAIN,       /^[a-z_$][a-z_$@0-9]*/i, null],
    -        [PR_LITERAL,
    -         new RegExp(
    -             '^(?:'
    -             // A hex number
    -             + '0x[a-f0-9]+'
    -             // or an octal or decimal number,
    -             + '|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)'
    -             // possibly in scientific notation
    -             + '(?:e[+\\-]?\\d+)?'
    -             + ')'
    -             // with an optional modifier like UL for unsigned long
    -             + '[a-z]*', 'i'),
    -         null, '0123456789'],
    -        [PR_PUNCTUATION, /^.[^\s\w\.$@\'\"\`\/\#]*/, null]);
    -
    -    return createSimpleLexer(shortcutStylePatterns, fallthroughStylePatterns);
    -  }
    -
    -  var decorateSource = sourceDecorator({
    -        'keywords': ALL_KEYWORDS,
    -        'hashComments': true,
    -        'cStyleComments': true,
    -        'multiLineStrings': true,
    -        'regexLiterals': true
    -      });
    -
    -  /** Breaks {@code job.source} around style boundaries in
    -    * {@code job.decorations} while re-interleaving {@code job.extractedTags},
    -    * and leaves the result in {@code job.prettyPrintedHtml}.
    -    * @param {Object} job like {
    -    *    source: {string} source as plain text,
    -    *    extractedTags: {Array.<number|string>} extractedTags chunks of raw
    -    *                   html preceded by their position in {@code job.source}
    -    *                   in order
    -    *    decorations: {Array.<number|string} an array of style classes preceded
    -    *                 by the position at which they start in job.source in order
    -    * }
    -    * @private
    -    */
    -  function recombineTagsAndDecorations(job) {
    -    var sourceText = job.source;
    -    var extractedTags = job.extractedTags;
    -    var decorations = job.decorations;
    -
    -    var html = [];
    -    // index past the last char in sourceText written to html
    -    var outputIdx = 0;
    -
    -    var openDecoration = null;
    -    var currentDecoration = null;
    -    var tagPos = 0;  // index into extractedTags
    -    var decPos = 0;  // index into decorations
    -    var tabExpander = makeTabExpander(window['PR_TAB_WIDTH']);
    -
    -    var adjacentSpaceRe = /([\r\n ]) /g;
    -    var startOrSpaceRe = /(^| ) /gm;
    -    var newlineRe = /\r\n?|\n/g;
    -    var trailingSpaceRe = /[ \r\n]$/;
    -    var lastWasSpace = true;  // the last text chunk emitted ended with a space.
    -
    -    // See bug 71 and http://stackoverflow.com/questions/136443/why-doesnt-ie7-
    -    var isIE678 = window['_pr_isIE6']();
    -    var lineBreakHtml = (
    -        isIE678
    -        ? (job.sourceNode.tagName === 'PRE'
    -           // Use line feeds instead of <br>s so that copying and pasting works
    -           // on IE.
    -           // Doing this on other browsers breaks lots of stuff since \r\n is
    -           // treated as two newlines on Firefox.
    -           ? (isIE678 === 6 ? '&#160;\r\n' :
    -              isIE678 === 7 ? '&#160;<br>\r' : '&#160;\r')
    -           // IE collapses multiple adjacent <br>s into 1 line break.
    -           // Prefix every newline with '&#160;' to prevent such behavior.
    -           // &nbsp; is the same as &#160; but works in XML as well as HTML.
    -           : '&#160;<br />')
    -        : '<br />');
    -
    -    // Look for a class like linenums or linenums:<n> where <n> is the 1-indexed
    -    // number of the first line.
    -    var numberLines = job.sourceNode.className.match(/\blinenums\b(?::(\d+))?/);
    -    var lineBreaker;
    -    if (numberLines) {
    -      var lineBreaks = [];
    -      for (var i = 0; i < 10; ++i) {
    -        lineBreaks[i] = lineBreakHtml + '</li><li class="L' + i + '">';
    -      }
    -      var lineNum = numberLines[1] && numberLines[1].length
    -          ? numberLines[1] - 1 : 0;  // Lines are 1-indexed
    -      html.push('<ol class="linenums"><li class="L', (lineNum) % 10, '"');
    -      if (lineNum) {
    -        html.push(' value="', lineNum + 1, '"');
    -      }
    -      html.push('>');
    -      lineBreaker = function () {
    -        var lb = lineBreaks[++lineNum % 10];
    -        // If a decoration is open, we need to close it before closing a list-item
    -        // and reopen it on the other side of the list item.
    -        return openDecoration
    -            ? ('</span>' + lb + '<span class="' + openDecoration + '">') : lb;
    -      };
    -    } else {
    -      lineBreaker = lineBreakHtml;
    -    }
    -
    -    // A helper function that is responsible for opening sections of decoration
    -    // and outputing properly escaped chunks of source
    -    function emitTextUpTo(sourceIdx) {
    -      if (sourceIdx > outputIdx) {
    -        if (openDecoration && openDecoration !== currentDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        if (!openDecoration && currentDecoration) {
    -          openDecoration = currentDecoration;
    -          html.push('<span class="', openDecoration, '">');
    -        }
    -        // This interacts badly with some wikis which introduces paragraph tags
    -        // into pre blocks for some strange reason.
    -        // It's necessary for IE though which seems to lose the preformattedness
    -        // of <pre> tags when their innerHTML is assigned.
    -        // http://stud3.tuwien.ac.at/~e0226430/innerHtmlQuirk.html
    -        // and it serves to undo the conversion of <br>s to newlines done in
    -        // chunkify.
    -        var htmlChunk = textToHtml(
    -            tabExpander(sourceText.substring(outputIdx, sourceIdx)))
    -            .replace(lastWasSpace
    -                     ? startOrSpaceRe
    -                     : adjacentSpaceRe, '$1&#160;');
    -        // Keep track of whether we need to escape space at the beginning of the
    -        // next chunk.
    -        lastWasSpace = trailingSpaceRe.test(htmlChunk);
    -        html.push(htmlChunk.replace(newlineRe, lineBreaker));
    -        outputIdx = sourceIdx;
    -      }
    -    }
    -
    -    while (true) {
    -      // Determine if we're going to consume a tag this time around.  Otherwise
    -      // we consume a decoration or exit.
    -      var outputTag;
    -      if (tagPos < extractedTags.length) {
    -        if (decPos < decorations.length) {
    -          // Pick one giving preference to extractedTags since we shouldn't open
    -          // a new style that we're going to have to immediately close in order
    -          // to output a tag.
    -          outputTag = extractedTags[tagPos] <= decorations[decPos];
    -        } else {
    -          outputTag = true;
    -        }
    -      } else {
    -        outputTag = false;
    -      }
    -      // Consume either a decoration or a tag or exit.
    -      if (outputTag) {
    -        emitTextUpTo(extractedTags[tagPos]);
    -        if (openDecoration) {
    -          // Close the current decoration
    -          html.push('</span>');
    -          openDecoration = null;
    -        }
    -        html.push(extractedTags[tagPos + 1]);
    -        tagPos += 2;
    -      } else if (decPos < decorations.length) {
    -        emitTextUpTo(decorations[decPos]);
    -        currentDecoration = decorations[decPos + 1];
    -        decPos += 2;
    -      } else {
    -        break;
    -      }
    -    }
    -    emitTextUpTo(sourceText.length);
    -    if (openDecoration) {
    -      html.push('</span>');
    -    }
    -    if (numberLines) { html.push('</li></ol>'); }
    -    job.prettyPrintedHtml = html.join('');
    -  }
    -
    -  /** Maps language-specific file extensions to handlers. */
    -  var langHandlerRegistry = {};
    -  /** Register a language handler for the given file extensions.
    -    * @param {function (Object)} handler a function from source code to a list
    -    *      of decorations.  Takes a single argument job which describes the
    -    *      state of the computation.   The single parameter has the form
    -    *      {@code {
    -    *        source: {string} as plain text.
    -    *        decorations: {Array.<number|string>} an array of style classes
    -    *                     preceded by the position at which they start in
    -    *                     job.source in order.
    -    *                     The language handler should assigned this field.
    -    *        basePos: {int} the position of source in the larger source chunk.
    -    *                 All positions in the output decorations array are relative
    -    *                 to the larger source chunk.
    -    *      } }
    -    * @param {Array.<string>} fileExtensions
    -    */
    -  function registerLangHandler(handler, fileExtensions) {
    -    for (var i = fileExtensions.length; --i >= 0;) {
    -      var ext = fileExtensions[i];
    -      if (!langHandlerRegistry.hasOwnProperty(ext)) {
    -        langHandlerRegistry[ext] = handler;
    -      } else if ('console' in window) {
    -        console['warn']('cannot override language handler %s', ext);
    -      }
    -    }
    -  }
    -  function langHandlerForExtension(extension, source) {
    -    if (!(extension && langHandlerRegistry.hasOwnProperty(extension))) {
    -      // Treat it as markup if the first non whitespace character is a < and
    -      // the last non-whitespace character is a >.
    -      extension = /^\s*</.test(source)
    -          ? 'default-markup'
    -          : 'default-code';
    -    }
    -    return langHandlerRegistry[extension];
    -  }
    -  registerLangHandler(decorateSource, ['default-code']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [],
    -          [
    -           [PR_PLAIN,       /^[^<?]+/],
    -           [PR_DECLARATION, /^<!\w[^>]*(?:>|$)/],
    -           [PR_COMMENT,     /^<\!--[\s\S]*?(?:-\->|$)/],
    -           // Unescaped content in an unknown language
    -           ['lang-',        /^<\?([\s\S]+?)(?:\?>|$)/],
    -           ['lang-',        /^<%([\s\S]+?)(?:%>|$)/],
    -           [PR_PUNCTUATION, /^(?:<[%?]|[%?]>)/],
    -           ['lang-',        /^<xmp\b[^>]*>([\s\S]+?)<\/xmp\b[^>]*>/i],
    -           // Unescaped content in javascript.  (Or possibly vbscript).
    -           ['lang-js',      /^<script\b[^>]*>([\s\S]*?)(<\/script\b[^>]*>)/i],
    -           // Contains unescaped stylesheet content
    -           ['lang-css',     /^<style\b[^>]*>([\s\S]*?)(<\/style\b[^>]*>)/i],
    -           ['lang-in.tag',  /^(<\/?[a-z][^<>]*>)/i]
    -          ]),
    -      ['default-markup', 'htm', 'html', 'mxml', 'xhtml', 'xml', 'xsl']);
    -  registerLangHandler(
    -      createSimpleLexer(
    -          [
    -           [PR_PLAIN,        /^[\s]+/, null, ' \t\r\n'],
    -           [PR_ATTRIB_VALUE, /^(?:\"[^\"]*\"?|\'[^\']*\'?)/, null, '\"\'']
    -           ],
    -          [
    -           [PR_TAG,          /^^<\/?[a-z](?:[\w.:-]*\w)?|\/?>$/i],
    -           [PR_ATTRIB_NAME,  /^(?!style[\s=]|on)[a-z](?:[\w:-]*\w)?/i],
    -           ['lang-uq.val',   /^=\s*([^>\'\"\s]*(?:[^>\'\"\s\/]|\/(?=\s)))/],
    -           [PR_PUNCTUATION,  /^[=<>\/]+/],
    -           ['lang-js',       /^on\w+\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-js',       /^on\w+\s*=\s*\'([^\']+)\'/i],
    -           ['lang-js',       /^on\w+\s*=\s*([^\"\'>\s]+)/i],
    -           ['lang-css',      /^style\s*=\s*\"([^\"]+)\"/i],
    -           ['lang-css',      /^style\s*=\s*\'([^\']+)\'/i],
    -           ['lang-css',      /^style\s*=\s*([^\"\'>\s]+)/i]
    -           ]),
    -      ['in.tag']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_ATTRIB_VALUE, /^[\s\S]+/]]), ['uq.val']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CPP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true
    -        }), ['c', 'cc', 'cpp', 'cxx', 'cyc', 'm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': 'null true false'
    -        }), ['json']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': CSHARP_KEYWORDS,
    -          'hashComments': true,
    -          'cStyleComments': true,
    -          'verbatimStrings': true
    -        }), ['cs']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JAVA_KEYWORDS,
    -          'cStyleComments': true
    -        }), ['java']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': SH_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true
    -        }), ['bsh', 'csh', 'sh']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PYTHON_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'tripleQuotedStrings': true
    -        }), ['cv', 'py']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': PERL_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['perl', 'pl', 'pm']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': RUBY_KEYWORDS,
    -          'hashComments': true,
    -          'multiLineStrings': true,
    -          'regexLiterals': true
    -        }), ['rb']);
    -  registerLangHandler(sourceDecorator({
    -          'keywords': JSCRIPT_KEYWORDS,
    -          'cStyleComments': true,
    -          'regexLiterals': true
    -        }), ['js']);
    -  registerLangHandler(
    -      createSimpleLexer([], [[PR_STRING, /^[\s\S]+/]]), ['regex']);
    -
    -  function applyDecorator(job) {
    -    var sourceCodeHtml = job.sourceCodeHtml;
    -    var opt_langExtension = job.langExtension;
    -
    -    // Prepopulate output in case processing fails with an exception.
    -    job.prettyPrintedHtml = sourceCodeHtml;
    -
    -    try {
    -      // Extract tags, and convert the source code to plain text.
    -      var sourceAndExtractedTags = extractTags(sourceCodeHtml);
    -      /** Plain text. @type {string} */
    -      var source = sourceAndExtractedTags.source;
    -      job.source = source;
    -      job.basePos = 0;
    -
    -      /** Even entries are positions in source in ascending order.  Odd entries
    -        * are tags that were extracted at that position.
    -        * @type {Array.<number|string>}
    -        */
    -      job.extractedTags = sourceAndExtractedTags.tags;
    -
    -      // Apply the appropriate language handler
    -      langHandlerForExtension(opt_langExtension, source)(job);
    -      // Integrate the decorations and tags back into the source code to produce
    -      // a decorated html string which is left in job.prettyPrintedHtml.
    -      recombineTagsAndDecorations(job);
    -    } catch (e) {
    -      if ('console' in window) {
    -        console['log'](e && e['stack'] ? e['stack'] : e);
    -      }
    -    }
    -  }
    -
    -  function prettyPrintOne(sourceCodeHtml, opt_langExtension) {
    -    var job = {
    -      sourceCodeHtml: sourceCodeHtml,
    -      langExtension: opt_langExtension
    -    };
    -    applyDecorator(job);
    -    return job.prettyPrintedHtml;
    -  }
    -
    -  function prettyPrint(opt_whenDone) {
    -    function byTagName(tn) { return document.getElementsByTagName(tn); }
    -    // fetch a list of nodes to rewrite
    -    var codeSegments = [byTagName('pre'), byTagName('code'), byTagName('xmp')];
    -    var elements = [];
    -    for (var i = 0; i < codeSegments.length; ++i) {
    -      for (var j = 0, n = codeSegments[i].length; j < n; ++j) {
    -        elements.push(codeSegments[i][j]);
    -      }
    -    }
    -    codeSegments = null;
    -
    -    var clock = Date;
    -    if (!clock['now']) {
    -      clock = { 'now': function () { return (new Date).getTime(); } };
    -    }
    -
    -    // The loop is broken into a series of continuations to make sure that we
    -    // don't make the browser unresponsive when rewriting a large page.
    -    var k = 0;
    -    var prettyPrintingJob;
    -
    -    function doWork() {
    -      var endTime = (window['PR_SHOULD_USE_CONTINUATION'] ?
    -                     clock.now() + 250 /* ms */ :
    -                     Infinity);
    -      for (; k < elements.length && clock.now() < endTime; k++) {
    -        var cs = elements[k];
    -        // [JACOCO] 'prettyprint' -> 'source'
    -        if (cs.className && cs.className.indexOf('source') >= 0) {
    -          // If the classes includes a language extensions, use it.
    -          // Language extensions can be specified like
    -          //     <pre class="prettyprint lang-cpp">
    -          // the language extension "cpp" is used to find a language handler as
    -          // passed to PR_registerLangHandler.
    -          var langExtension = cs.className.match(/\blang-(\w+)\b/);
    -          if (langExtension) { langExtension = langExtension[1]; }
    -
    -          // make sure this is not nested in an already prettified element
    -          var nested = false;
    -          for (var p = cs.parentNode; p; p = p.parentNode) {
    -            if ((p.tagName === 'pre' || p.tagName === 'code' ||
    -                 p.tagName === 'xmp') &&
    -                // [JACOCO] 'prettyprint' -> 'source'
    -                p.className && p.className.indexOf('source') >= 0) {
    -              nested = true;
    -              break;
    -            }
    -          }
    -          if (!nested) {
    -            // fetch the content as a snippet of properly escaped HTML.
    -            // Firefox adds newlines at the end.
    -            var content = getInnerHtml(cs);
    -            content = content.replace(/(?:\r\n?|\n)$/, '');
    -
    -            // do the pretty printing
    -            prettyPrintingJob = {
    -              sourceCodeHtml: content,
    -              langExtension: langExtension,
    -              sourceNode: cs
    -            };
    -            applyDecorator(prettyPrintingJob);
    -            replaceWithPrettyPrintedHtml();
    -          }
    -        }
    -      }
    -      if (k < elements.length) {
    -        // finish up in a continuation
    -        setTimeout(doWork, 250);
    -      } else if (opt_whenDone) {
    -        opt_whenDone();
    -      }
    -    }
    -
    -    function replaceWithPrettyPrintedHtml() {
    -      var newContent = prettyPrintingJob.prettyPrintedHtml;
    -      if (!newContent) { return; }
    -      var cs = prettyPrintingJob.sourceNode;
    -
    -      // push the prettified html back into the tag.
    -      if (!isRawContent(cs)) {
    -        // just replace the old html with the new
    -        cs.innerHTML = newContent;
    -      } else {
    -        // we need to change the tag to a <pre> since <xmp>s do not allow
    -        // embedded tags such as the span tags used to attach styles to
    -        // sections of source code.
    -        var pre = document.createElement('PRE');
    -        for (var i = 0; i < cs.attributes.length; ++i) {
    -          var a = cs.attributes[i];
    -          if (a.specified) {
    -            var aname = a.name.toLowerCase();
    -            if (aname === 'class') {
    -              pre.className = a.value;  // For IE 6
    -            } else {
    -              pre.setAttribute(a.name, a.value);
    -            }
    -          }
    -        }
    -        pre.innerHTML = newContent;
    -
    -        // remove the old
    -        cs.parentNode.replaceChild(pre, cs);
    -        cs = pre;
    -      }
    -    }
    -
    -    doWork();
    -  }
    -
    -  window['PR_normalizedHtml'] = normalizedHtml;
    -  window['prettyPrintOne'] = prettyPrintOne;
    -  window['prettyPrint'] = prettyPrint;
    -  window['PR'] = {
    -        'combinePrefixPatterns': combinePrefixPatterns,
    -        'createSimpleLexer': createSimpleLexer,
    -        'registerLangHandler': registerLangHandler,
    -        'sourceDecorator': sourceDecorator,
    -        'PR_ATTRIB_NAME': PR_ATTRIB_NAME,
    -        'PR_ATTRIB_VALUE': PR_ATTRIB_VALUE,
    -        'PR_COMMENT': PR_COMMENT,
    -        'PR_DECLARATION': PR_DECLARATION,
    -        'PR_KEYWORD': PR_KEYWORD,
    -        'PR_LITERAL': PR_LITERAL,
    -        'PR_NOCODE': PR_NOCODE,
    -        'PR_PLAIN': PR_PLAIN,
    -        'PR_PUNCTUATION': PR_PUNCTUATION,
    -        'PR_SOURCE': PR_SOURCE,
    -        'PR_STRING': PR_STRING,
    -        'PR_TAG': PR_TAG,
    -        'PR_TYPE': PR_TYPE
    -      };
    -})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/redbar.gif
    deleted file mode 100644
    index c2f71469ba995289439d86ea39b1b33edb03388c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 91
    zcmZ?wbhEHbWMtrCc+AD{pP&D~tn7aso&R25|6^nS*Vg{;>G{84!T)8;{;yfXu$BQ0
    fDgI<(<YM4w&|v@qkQodt90ol_LPjnP91PX~3&9+X
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    deleted file mode 100644
    index dd936bca..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.css
    +++ /dev/null
    @@ -1,243 +0,0 @@
    -body, td {
    -  font-family:sans-serif;
    -  font-size:10pt;
    -}
    -
    -h1 {
    -  font-weight:bold;
    -  font-size:18pt;
    -}
    -
    -.breadcrumb {
    -  border:#d6d3ce 1px solid;
    -  padding:2px 4px 2px 4px;
    -}
    -
    -.breadcrumb .info {
    -  float:right;
    -}
    -
    -.breadcrumb .info a {
    -  margin-left:8px;
    -}
    -
    -.el_report {
    -  padding-left:18px;
    -  background-image:url(report.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_group {
    -  padding-left:18px;
    -  background-image:url(group.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_bundle {
    -  padding-left:18px;
    -  background-image:url(bundle.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_package {
    -  padding-left:18px;
    -  background-image:url(package.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_class {
    -  padding-left:18px;
    -  background-image:url(class.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_source {
    -  padding-left:18px;
    -  background-image:url(source.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_method {
    -  padding-left:18px;
    -  background-image:url(method.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -.el_session {
    -  padding-left:18px;
    -  background-image:url(session.gif);
    -  background-position:left center;
    -  background-repeat:no-repeat;
    -}
    -
    -pre.source {
    -  border:#d6d3ce 1px solid;
    -  font-family:monospace;
    -}
    -
    -pre.source ol {
    -  margin-bottom: 0px;
    -  margin-top: 0px;
    -}
    -
    -pre.source li {
    -  border-left: 1px solid #D6D3CE;
    -  color: #A0A0A0;
    -  padding-left: 0px;
    -}
    -
    -pre.source span.fc {
    -  background-color:#ccffcc;
    -}
    -
    -pre.source span.nc {
    -  background-color:#ffaaaa;
    -}
    -
    -pre.source span.pc {
    -  background-color:#ffffcc;
    -}
    -
    -pre.source span.bfc {
    -  background-image: url(branchfc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bfc:hover {
    -  background-color:#80ff80;
    -}
    -
    -pre.source span.bnc {
    -  background-image: url(branchnc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bnc:hover {
    -  background-color:#ff8080;
    -}
    -
    -pre.source span.bpc {
    -  background-image: url(branchpc.gif);
    -  background-repeat: no-repeat;
    -  background-position: 2px center;
    -}
    -
    -pre.source span.bpc:hover {
    -  background-color:#ffff80;
    -}
    -
    -table.coverage {
    -  empty-cells:show;
    -  border-collapse:collapse;
    -}
    -
    -table.coverage thead {
    -  background-color:#e0e0e0;
    -}
    -
    -table.coverage thead td {
    -  white-space:nowrap;
    -  padding:2px 14px 0px 6px;
    -  border-bottom:#b0b0b0 1px solid;
    -}
    -
    -table.coverage thead td.bar {
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr1 {
    -  text-align:right;
    -  border-left:#cccccc 1px solid;
    -}
    -
    -table.coverage thead td.ctr2 {
    -  text-align:right;
    -  padding-left:2px;
    -}
    -
    -table.coverage thead td.sortable {
    -  cursor:pointer;
    -  background-image:url(sort.gif);
    -  background-position:right center;
    -  background-repeat:no-repeat;
    -}
    -
    -table.coverage thead td.up {
    -  background-image:url(up.gif);
    -}
    -
    -table.coverage thead td.down {
    -  background-image:url(down.gif);
    -}
    -
    -table.coverage tbody td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -  border-bottom:#d6d3ce 1px solid;
    -}
    -
    -table.coverage tbody tr:hover {
    -  background: #f0f0d0 !important;
    -}
    -
    -table.coverage tbody td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tbody td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -table.coverage tfoot td {
    -  white-space:nowrap;
    -  padding:2px 6px 2px 6px;
    -}
    -
    -table.coverage tfoot td.bar {
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr1 {
    -  text-align:right;
    -  padding-right:14px;
    -  border-left:#e8e8e8 1px solid;
    -}
    -
    -table.coverage tfoot td.ctr2 {
    -  text-align:right;
    -  padding-right:14px;
    -  padding-left:2px;
    -}
    -
    -.footer {
    -  margin-top:20px;
    -  border-top:#d6d3ce 1px solid;
    -  padding-top:2px;
    -  font-size:8pt;
    -  color:#a0a0a0;
    -}
    -
    -.footer a {
    -  color:#a0a0a0;
    -}
    -
    -.right {
    -  float:right;
    -}
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/report.gif
    deleted file mode 100644
    index 8547be50bf3e97e725920927b5aa4cdb031f4823..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 363
    zcmZ?wbhEHb6krfwSZc{In}J~s1H&!`1_uX+xVSjMb&S>db~X8S)dhAn1$OlXwvB~0
    zO@%hC#Wq5_7&^+V`^qgRRa;E2HJ?*&DsqWoev|2fCetO&CQDmPR<;_iXfs~ZZnVC`
    za8s8-+pK*(^AAm4c5K#~(^ocST-lU)byMc8y)_R`^xu2&{oaco_g{R!|Ki8Pmp>lA
    z{_*VHkC*R%zWMa)!{^_hzyAL8?f2(zzrTL}{q@K1Z$Ey2|M}<VuRs5>0mYvzj9d)%
    z3_1)z0P+(9TgQR<1s*zF)+bahX*_u_??Pbv&V#KE^V2&`bhGjjR;*MxC8EFO_3_}<
    zH?w9WrJ7AX`tJM8r525X{~8+WorLsRL^?W{nR=L*odosT`KItOGtTI963}JgV_m??
    z%&>&9-=1G*^3>@wm-A|~FmK+nbvd`DhNhP0UUhXIS1vYAPL5-o?Ce}VXI&i`tO1G(
    BvdRDe
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/session.gif
    deleted file mode 100644
    index 0151bad8a001e5cc5cc7723a608185f746b7f8c1..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 213
    zcmZ?wbhEHb6krfwXc1xPS$gU4xw~t2pG#?5#^Be>V3WrXI-S9<hrzA(|Nr^_@5k?-
    zZ~y=IhyVNSXZ04}pKqV%t9oe5k~tY+Ar=Pzi2#Z}Sr{1@<Qa4rfB<AC18dL&^}dwM
    zX_r*ys<8N;e6mS?i^dP8jVmAd@U^}&$uv>xc~m$hYN?d{@xrG~CzZCfhpBIRC}Q>I
    kiQ?_Ai=3VZEOFW9fBwaksdwMK(Err)E%VcVRYeAC06w^MK>z>%
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.gif
    deleted file mode 100644
    index 6757c2c32b57d768f3c12c4ae99a28bc32c9cbd7..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 58
    zcmZ?wbhEHb<YC}qXkcX6uwldh|Nj+#vM_QnFf!;c00|xjP6h@h!JfpGjC*fB>i!bx
    N`t(%z_h<$NYXI&b5{m!;
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js b/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    deleted file mode 100644
    index 9dcb0e8b..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-resources/sort.js
    +++ /dev/null
    @@ -1,148 +0,0 @@
    -/*******************************************************************************
    - * Copyright (c) 2009, 2024 Mountainminds GmbH & Co. KG and Contributors
    - * This program and the accompanying materials are made available under
    - * the terms of the Eclipse Public License 2.0 which is available at
    - * http://www.eclipse.org/legal/epl-2.0
    - *
    - * SPDX-License-Identifier: EPL-2.0
    - *
    - * Contributors:
    - *    Marc R. Hoffmann - initial API and implementation
    - *
    - *******************************************************************************/
    -
    -(function () {
    -
    -  /**
    -   * Sets the initial sorting derived from the hash.
    -   *
    -   * @param linkelementids
    -   *          list of element ids to search for links to add sort inidcator
    -   *          hash links
    -   */
    -  function initialSort(linkelementids) {
    -    window.linkelementids = linkelementids;
    -    var hash = window.location.hash;
    -    if (hash) {
    -      var m = hash.match(/up-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, true);
    -        }
    -        return;
    -      }
    -      var m = hash.match(/dn-./);
    -      if (m) {
    -        var header = window.document.getElementById(m[0].charAt(3));
    -        if (header) {
    -          sortColumn(header, false);
    -        }
    -        return
    -      }
    -    }
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header dependening on the current sort state.
    -   */
    -  function toggleSort(header) {
    -    var sortup = header.className.indexOf('down ') == 0;
    -    sortColumn(header, sortup);
    -  }
    -
    -  /**
    -   * Sorts the columns with the given header in the given direction.
    -   */
    -  function sortColumn(header, sortup) {
    -    var table = header.parentNode.parentNode.parentNode;
    -    var body = table.tBodies[0];
    -    var colidx = getNodePosition(header);
    -
    -    resetSortedStyle(table);
    -
    -    var rows = body.rows;
    -    var sortedrows = [];
    -    for (var i = 0; i < rows.length; i++) {
    -      r = rows[i];
    -      sortedrows[parseInt(r.childNodes[colidx].id.slice(1))] = r;
    -    }
    -
    -    var hash;
    -
    -    if (sortup) {
    -      for (var i = sortedrows.length - 1; i >= 0; i--) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'up ' + header.className;
    -      hash = 'up-' + header.id;
    -    } else {
    -      for (var i = 0; i < sortedrows.length; i++) {
    -        body.appendChild(sortedrows[i]);
    -      }
    -      header.className = 'down ' + header.className;
    -      hash = 'dn-' + header.id;
    -    }
    -
    -    setHash(hash);
    -  }
    -
    -  /**
    -   * Adds the sort indicator as a hash to the document URL and all links.
    -   */
    -  function setHash(hash) {
    -    window.document.location.hash = hash;
    -    ids = window.linkelementids;
    -    for (var i = 0; i < ids.length; i++) {
    -        setHashOnAllLinks(document.getElementById(ids[i]), hash);
    -    }
    -  }
    -
    -  /**
    -   * Extend all links within the given tag with the given hash.
    -   */
    -  function setHashOnAllLinks(tag, hash) {
    -    links = tag.getElementsByTagName("a");
    -    for (var i = 0; i < links.length; i++) {
    -        var a = links[i];
    -        var href = a.href;
    -        var hashpos = href.indexOf("#");
    -        if (hashpos != -1) {
    -            href = href.substring(0, hashpos);
    -        }
    -        a.href = href + "#" + hash;
    -    }
    -  }
    -
    -  /**
    -   * Calculates the position of a element within its parent.
    -   */
    -  function getNodePosition(element) {
    -    var pos = -1;
    -    while (element) {
    -      element = element.previousSibling;
    -      pos++;
    -    }
    -    return pos;
    -  }
    -
    -  /**
    -   * Remove the sorting indicator style from all headers.
    -   */
    -  function resetSortedStyle(table) {
    -    for (var c = table.tHead.firstChild.firstChild; c; c = c.nextSibling) {
    -      if (c.className) {
    -        if (c.className.indexOf('down ') == 0) {
    -          c.className = c.className.slice(5);
    -        }
    -        if (c.className.indexOf('up ') == 0) {
    -          c.className = c.className.slice(3);
    -        }
    -      }
    -    }
    -  }
    -
    -  window['initialSort'] = initialSort;
    -  window['toggleSort'] = toggleSort;
    -
    -})();
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/source.gif
    deleted file mode 100644
    index b226e41c5276581db33d71525298ef572cc5d7ce..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 354
    zcmZ?wbhEHb6krfwxXQrr`Rnf=KmWY@^y|~t-#>r-`SJ62+pK*(^ACOa@_X{KW3$$r
    zUbOlAiXE5N?74dH#gDtszu$lH{mGl3&)@xg`{~!`Z@=#VMPB~6_u~7*S3h2T`1$R}
    z?`Q9Re)#(P)3@JWfBgRb^LKTLe^s%6bxA;7sb4jaQ5?`-<<ng5TVLWgvEHM%)~l!1
    zYi_IS^d`3r{dQ}59F})EE$?<()ZzT#ME{lvwpTV~T-lU)Yj4ffO_~4y|7XAeia%Kx
    z85k@XbU-p7KQXY?ADC0%p(B)eLgkXi62W-^(!DQ#v2a~Gz-z9%&!+3h!38t#X02Ds
    zad;WPFvUVOY)YY2k84HG1kp%gVW!3wVI5ap$%?8ZHc4GqO=+PiQzvV>Y72H(vk7Xs
    us!1$fvP8{QU92ZrK%7tARasP&f6JDw8m_8J3W|I7DyXXX9C3DJum%7=h^`F)
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif b/sentrius-llm-core/target/site/jacoco/jacoco-resources/up.gif
    deleted file mode 100644
    index 58ed21660ec467736a4d2af17d91341f7cfb556c..0000000000000000000000000000000000000000
    GIT binary patch
    literal 0
    HcmV?d00001
    
    literal 67
    zcmZ?wbhEHb<YC}qSjfcSX{EDa!-oH0p!k!8k&A(eL5G2Xk%5PSlYxOrWJ=;nroA^G
    Ub$^Kz-Nct)ygK&ScM%3_0PmU?SpWb4
    
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html b/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    deleted file mode 100644
    index 5a276ab4..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco-sessions.html
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8"?><!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Strict//EN" "http://www.w3.org/TR/xhtml1/DTD/xhtml1-strict.dtd"><html xmlns="http://www.w3.org/1999/xhtml" lang="en"><head><meta http-equiv="Content-Type" content="text/html;charset=UTF-8"/><link rel="stylesheet" href="jacoco-resources/report.css" type="text/css"/><link rel="shortcut icon" href="jacoco-resources/report.gif" type="image/gif"/><title>Sessions</title></head><body><div class="breadcrumb" id="breadcrumb"><span class="info"><a href="jacoco-sessions.html" class="el_session">Sessions</a></span><a href="index.html" class="el_report">sentrius-llm-core</a> &gt; <span class="el_session">Sessions</span></div><h1>Sessions</h1><p>This coverage report is based on execution data from the following sessions:</p><table class="coverage" cellspacing="0"><thead><tr><td>Session</td><td>Start Time</td><td>Dump Time</td></tr></thead><tbody><tr><td><span class="el_session">pop-os-33249098</span></td><td>May 17, 2025, 5:59:30 PM</td><td>May 17, 2025, 5:59:30 PM</td></tr></tbody></table><p>Execution data for the following classes is considered in this report:</p><table class="coverage" cellspacing="0"><thead><tr><td>Class</td><td>Id</td></tr></thead><tbody><tr><td><span class="el_class">org.apache.maven.plugin.surefire.log.api.NullConsoleLogger</span></td><td><code>50e0945fec76b333</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BaseProviderFactory</span></td><td><code>da939a0152866a4b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.BiProperty</span></td><td><code>ed0281592f3976b4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Command</span></td><td><code>52d7b732759793ff</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Constants</span></td><td><code>8f58b0da27218c74</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.DumpErrorSingleton</span></td><td><code>ea25742803c9e73f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkedProcessEventType</span></td><td><code>4f32ae2d4e670365</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingReporterFactory</span></td><td><code>be06f83accc5a8aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.ForkingRunListener</span></td><td><code>c34d0a9f28f66585</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.MasterProcessCommand</span></td><td><code>fc8c116a509256d1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.booter.Shutdown</span></td><td><code>47a37ed2a684ef1d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.cli.CommandLineOption</span></td><td><code>5825f848ee2abcd7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.provider.AbstractProvider</span></td><td><code>0fea65ed91d7c12a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture</span></td><td><code>7ee3451cf95e2f70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.ForwardingPrintStream</span></td><td><code>804935f758ebaea3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ConsoleOutputCapture.NullOutputStream</span></td><td><code>a81300d2d50decb6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.ReporterConfiguration</span></td><td><code>bf4075c0385296c2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.report.RunMode</span></td><td><code>70edc0a9dea60143</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder</span></td><td><code>c6f3b2781f9ac881</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.BufferedStream</span></td><td><code>11f69a75bc1c7211</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Memento</span></td><td><code>e504a9e8cfc028af</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.Segment</span></td><td><code>773004ac6cd115ef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamDecoder.StreamReadStatus</span></td><td><code>8d5ee1d510b5c935</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.AbstractStreamEncoder</span></td><td><code>9547668418a858ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.stream.SegmentType</span></td><td><code>77b0d78ed3ddd126</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.suite.RunResult</span></td><td><code>0eef4ae883b6fcaa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.DirectoryScannerParameters</span></td><td><code>529e83b831c47f72</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.IncludedExcludedPatterns</span></td><td><code>e12220ce508068df</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest</span></td><td><code>119a5faa0ae08a91</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.ClassMatcher</span></td><td><code>cb9dd1b6069a872b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.MethodMatcher</span></td><td><code>1d5196f3dfcebd52</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.ResolvedTest.Type</span></td><td><code>6f46eedd1917ca66</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.RunOrderParameters</span></td><td><code>f74f6b3eb9f1a132</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestArtifactInfo</span></td><td><code>6d162cddde2db959</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestListResolver</span></td><td><code>0f4645f0d7fd02c8</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.testset.TestRequest</span></td><td><code>1cb2946d8f0dc9e4</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.CloseableIterator</span></td><td><code>01846c357efacb7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultRunOrderCalculator</span></td><td><code>21a42ec0f6d63b8e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.DefaultScanResult</span></td><td><code>01695a339c66ab8d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.ReflectionUtils</span></td><td><code>7f9a430ae144c985</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.RunOrder</span></td><td><code>93376844e6d709d3</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun</span></td><td><code>db4e8195893ece6d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.TestsToRun.ClassesIterator</span></td><td><code>543f26bfbdd04ce0</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleReadableChannel</span></td><td><code>6826ce793980b64e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.AbstractNoninterruptibleWritableChannel</span></td><td><code>484afcc5593fbc9a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels</span></td><td><code>eb60281181a1dc33</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.3</span></td><td><code>605144c3f67338aa</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.Channels.4</span></td><td><code>4834cf9402eabd28</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory</span></td><td><code>b2161e778265b95d</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DaemonThreadFactory.NamedThreadFactory</span></td><td><code>e3fb668fa8792230</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.api.util.internal.DumpFileUtils</span></td><td><code>9cc0f89ffb46ba32</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.AbstractPathConfiguration</span></td><td><code>f8b4034fe9c934d2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.BooterDeserializer</span></td><td><code>d2b4a565d2c195cc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClassLoaderConfiguration</span></td><td><code>c511fbfeb1f35c23</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.Classpath</span></td><td><code>d05af49602124353</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ClasspathConfiguration</span></td><td><code>d14c58928ac6aa7b</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader</span></td><td><code>8bc1181d0c5af474</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.1</span></td><td><code>72a8e2906ddc1c93</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.CommandReader.CommandRunnable</span></td><td><code>f6a6b02be2fb0964</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter</span></td><td><code>c8ce6ed3be8ec9bc</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.1</span></td><td><code>68f2dae15ae26cc2</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.3</span></td><td><code>fc217f2c1d87c099</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.4</span></td><td><code>2afb302f7c81f991</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.6</span></td><td><code>850ef2748b5ef5e6</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.7</span></td><td><code>9577114e02a5bdef</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.8</span></td><td><code>3c8febd047cd2b0c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedBooter.PingScheduler</span></td><td><code>c83e3af27d5d3c47</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ForkedNodeArg</span></td><td><code>9dbb0ff22dfc1303</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PpidChecker</span></td><td><code>f83a9169197e13b1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProcessCheckerType</span></td><td><code>e554be35191ff5a7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.PropertiesWrapper</span></td><td><code>1e4e30276db2e62e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.ProviderConfiguration</span></td><td><code>ec2cd1e39ec4278e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.StartupConfiguration</span></td><td><code>70176a3dd903d57a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.SystemPropertyManager</span></td><td><code>a843c08e9b5c79ad</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.TypeEncodedValue</span></td><td><code>355d20d53741b604</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory</span></td><td><code>67a1c051e3809086</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.1</span></td><td><code>cc936f6c85f9235a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.AbstractMasterProcessChannelProcessorFactory.2</span></td><td><code>a1fa70e4af42c555</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.CommandChannelDecoder</span></td><td><code>6684e6bad0b7c71e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.EventChannelEncoder</span></td><td><code>b69d9287bf010b1a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.LegacyMasterProcessChannelProcessorFactory</span></td><td><code>3b29862697f79d34</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.spi.SurefireMasterProcessChannelProcessorFactory</span></td><td><code>8c14c673718fba9e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder</span></td><td><code>a23a4082e2bbd1ed</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.CommandDecoder.1</span></td><td><code>950700970edca54a</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.booter.stream.EventEncoder</span></td><td><code>7c894cb22c8c16ca</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.JUnitPlatformProvider</span></td><td><code>958f7eb4311b3c2f</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.LazyLauncher</span></td><td><code>a3841276826f155c</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.RunListenerAdapter</span></td><td><code>0d7041faa0298e70</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.junitplatform.TestPlanScannerFilter</span></td><td><code>db2b13639af3176e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.report.ClassMethodIndexer</span></td><td><code>0e8f3008aec84fcb</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.JavaVersion</span></td><td><code>a902b52c460c0348</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.StringUtils</span></td><td><code>4628d7808116e372</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemProperties</span></td><td><code>6b2fea785d2a2915</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.SystemUtils</span></td><td><code>2518da556699ab1e</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.function.Suppliers</span></td><td><code>6cb739fdbd96d7c1</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.lang3.math.NumberUtils</span></td><td><code>99f301ade68669b7</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.StringUtils</span></td><td><code>abd8480c7152bf46</code></td></tr><tr><td><span class="el_class">org.apache.maven.surefire.shared.utils.cli.ShutdownHookUtils</span></td><td><code>011b23cd829ec86c</code></td></tr><tr><td><span class="el_class">org.apiguardian.api.API.Status</span></td><td><code>95d0ffea805fc01a</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ConditionEvaluationResult</span></td><td><code>35e14124a607c6e0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.api.extension.ExtensionContext.Namespace</span></td><td><code>f54a3d73ed88c765</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.JupiterTestEngine</span></td><td><code>e2ae6d11698760d5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.CachingJupiterConfiguration</span></td><td><code>7e7fdcd1b43926e2</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.DefaultJupiterConfiguration</span></td><td><code>3264494f5452162d</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.EnumConfigurationParameterConverter</span></td><td><code>bab380425dca8d4f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.config.InstantiatingConfigurationParameterConverter</span></td><td><code>518e1c643c30f164</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.AbstractExtensionContext</span></td><td><code>92d1cbb782871d54</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineDescriptor</span></td><td><code>4b5e361d03d8e2d8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.descriptor.JupiterEngineExtensionContext</span></td><td><code>95abf612d36312bc</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor</span></td><td><code>2747cc3e148c57d9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.AbstractOrderingVisitor.DescriptorWrapperOrderer</span></td><td><code>01a66e5fdf0989e5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassOrderingVisitor</span></td><td><code>dbd6c4e35e0c9807</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.ClassSelectorResolver</span></td><td><code>8192a76b48a09183</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.DiscoverySelectorResolver</span></td><td><code>0493a46e2481b698</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodFinder</span></td><td><code>943e016148cf5f16</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodOrderingVisitor</span></td><td><code>1c057f4243f10c0e</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.MethodSelectorResolver</span></td><td><code>340dbe384622c6a6</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsInnerClass</span></td><td><code>373ab803cd4c3f71</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsNestedTestClass</span></td><td><code>5b959cc55c1f4f91</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsPotentialTestContainer</span></td><td><code>4134835721917de5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestClassWithTests</span></td><td><code>cb8d6d2ffc57432f</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestFactoryMethod</span></td><td><code>671448bb3682a8b7</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestMethod</span></td><td><code>53d31c5fa4778cc3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestTemplateMethod</span></td><td><code>db07bccfb8a7df73</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.discovery.predicates.IsTestableMethod</span></td><td><code>8a0a6571eef022fb</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.DefaultExecutableInvoker</span></td><td><code>8974ffb77e1cf465</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext</span></td><td><code>50163587b45842fe</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.Builder</span></td><td><code>b39a5e63227384a5</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.execution.JupiterEngineExecutionContext.State</span></td><td><code>0766343b70481496</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.AutoCloseExtension</span></td><td><code>b0c206c116575b65</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.DisabledCondition</span></td><td><code>ae3c30ff8f7ce050</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry</span></td><td><code>2445286ad5728ba3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.MutableExtensionRegistry.Entry</span></td><td><code>2c27256a5e9eeb22</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.RepeatedTestExtension</span></td><td><code>134b5213d4cb80ac</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TempDirectory</span></td><td><code>797b378613d1c2c3</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestInfoParameterResolver</span></td><td><code>1977e7bd25ea66b8</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TestReporterParameterResolver</span></td><td><code>24002b8886de1936</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.extension.TimeoutExtension</span></td><td><code>62b73ea4d52632c9</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.JupiterThrowableCollectorFactory</span></td><td><code>46546a446de4c9c0</code></td></tr><tr><td><span class="el_class">org.junit.jupiter.engine.support.OpenTest4JAndJUnit4AwareThrowableCollector</span></td><td><code>de05466420699f92</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try</span></td><td><code>d1970dd64ce22fa4</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Failure</span></td><td><code>2135634bf7e7ad88</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.function.Try.Success</span></td><td><code>88f304668c6ff14e</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory</span></td><td><code>7b57f78fc724ac54</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.logging.LoggerFactory.DelegatingLogger</span></td><td><code>835c9a026ac4df32</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.AnnotationUtils</span></td><td><code>1da637c10cbda39c</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassLoaderUtils</span></td><td><code>41a8b61339cf4862</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClassNamePatternFilterUtils</span></td><td><code>484cfeb1dc3b6e93</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ClasspathScanner</span></td><td><code>23726102aeb1c0ca</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.CollectionUtils</span></td><td><code>6cb29bed5c13bb1d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.LruCache</span></td><td><code>fd8ff40dff05b112</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.Preconditions</span></td><td><code>99362b29a037afdc</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils</span></td><td><code>f1c34b50fa11302d</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.ReflectionUtils.HierarchyTraversalMode</span></td><td><code>ecf76570811abc50</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.StringUtils</span></td><td><code>372dfca6fa74c1ea</code></td></tr><tr><td><span class="el_class">org.junit.platform.commons.util.UnrecoverableExceptions</span></td><td><code>2ffa834710d16849</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter</span></td><td><code>cecade1862d00032</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.CompositeFilter.1</span></td><td><code>ed62b01b8b763511</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener</span></td><td><code>22e0c8566a0701f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineDiscoveryListener.1</span></td><td><code>a4cdbe8dd38d8f57</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener</span></td><td><code>73f93afa543ca74a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.EngineExecutionListener.1</span></td><td><code>999902b68f81dd9a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.ExecutionRequest</span></td><td><code>83d3937d6c2e4880</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.Filter</span></td><td><code>c8d2fba4bb555492</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.FilterResult</span></td><td><code>1b4753bc794e8388</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult</span></td><td><code>02b8934961bdea6f</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.SelectorResolutionResult.Status</span></td><td><code>22866b13273482bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor</span></td><td><code>a5f736d88185f693</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestDescriptor.Type</span></td><td><code>8530bdf90ae8fa6b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult</span></td><td><code>29479a0ae9db2840</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.TestExecutionResult.Status</span></td><td><code>9e54a6b249ea167a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId</span></td><td><code>a5ee26b408b26ea1</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueId.Segment</span></td><td><code>03b0ccd7b69c9fc2</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.UniqueIdFormat</span></td><td><code>455c5b5eb27d1f81</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.ClassSelector</span></td><td><code>a6b2f6753eef3ff0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.discovery.DiscoverySelectors</span></td><td><code>8b2cda0d30b056d5</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.AbstractTestDescriptor</span></td><td><code>17948dfe4c8d10c0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.descriptor.EngineDescriptor</span></td><td><code>4ba3237c7e6b18d6</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.ClassContainerSelectorResolver</span></td><td><code>fde8e703faa64574</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution</span></td><td><code>4937cdb1a041a120</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolution.DefaultContext</span></td><td><code>151f6fae99911199</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver</span></td><td><code>0ad8786b2f016b1a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.Builder</span></td><td><code>29666059b7fb2614</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.EngineDiscoveryRequestResolver.DefaultInitializationContext</span></td><td><code>1b0484c56b030686</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver</span></td><td><code>458b4a4e46b6b868</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match</span></td><td><code>3c16d4dff276f57a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Match.Type</span></td><td><code>bd8402e1232e1a40</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.discovery.SelectorResolver.Resolution</span></td><td><code>ba500d6ba9a79953</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource</span></td><td><code>fa0dc5b65de1b0a0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ExclusiveResource.LockMode</span></td><td><code>705f9e9f579aeab0</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestEngine</span></td><td><code>599b10c51fe35ea3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.HierarchicalTestExecutor</span></td><td><code>a78f13d5e60b7d08</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.LockManager</span></td><td><code>99cdeecddb4ca68b</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node</span></td><td><code>3f2ca9c1749a3d5a</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.Node.SkipResult</span></td><td><code>42796aad70055913</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeExecutionAdvisor</span></td><td><code>c8bf7d7bb2e19471</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask</span></td><td><code>c4c004e32fc81aac</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTask.DefaultDynamicTestExecutor</span></td><td><code>9048d6cd4a8e05d3</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTestTaskContext</span></td><td><code>f68790b28827581e</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeTreeWalker</span></td><td><code>c9f34e2fe83d5caa</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils</span></td><td><code>732ad1771b71d292</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.NodeUtils.1</span></td><td><code>5a44a7e2cbf864b4</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SameThreadHierarchicalTestExecutorService</span></td><td><code>512f5438a4d56505</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.SingleLock</span></td><td><code>f0bfd18cc662d7fc</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.hierarchical.ThrowableCollector</span></td><td><code>a891c129fd2a01df</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore</span></td><td><code>fb95e61bdaf5378c</code></td></tr><tr><td><span class="el_class">org.junit.platform.engine.support.store.NamespacedHierarchicalStore.EvaluatedValue</span></td><td><code>158ca2dfb82179f2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult</span></td><td><code>c9df2add13bcb88f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.EngineDiscoveryResult.Status</span></td><td><code>f767a377012b98ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener</span></td><td><code>088911f06a0807a1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherDiscoveryListener.1</span></td><td><code>d946f222ae757dc1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener</span></td><td><code>694596eba9b0c85e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.LauncherSessionListener.1</span></td><td><code>44b3640faa83f474</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestExecutionListener</span></td><td><code>f2d1545415335fda</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestIdentifier</span></td><td><code>fef478667b042ad5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.TestPlan</span></td><td><code>f4faaefa1c9341ff</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeEngineExecutionListener</span></td><td><code>8321b18dbabfecb3</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.CompositeTestExecutionListener</span></td><td><code>04623991ddcc58da</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultDiscoveryRequest</span></td><td><code>e6360c7333fc842d</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncher</span></td><td><code>95dfc056bdb1d2d2</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherConfig</span></td><td><code>b4cd1fb6724efdef</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession</span></td><td><code>e040225d1f67e564</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.1</span></td><td><code>bcc6e4bee671ccad</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DefaultLauncherSession.ClosedLauncher</span></td><td><code>aa7b08954aea78f5</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingEngineExecutionListener</span></td><td><code>61bd4de41739236f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.DelegatingLauncher</span></td><td><code>cdc9b7e4e1a576e0</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator</span></td><td><code>e4e806767310de9f</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryOrchestrator.Phase</span></td><td><code>67a547a561eee0f4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineDiscoveryResultValidator</span></td><td><code>552f6c5833b8f8bd</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineExecutionOrchestrator</span></td><td><code>6e65b7c784b87efc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineFilterer</span></td><td><code>53cf37d963f8b58c</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.EngineIdValidator</span></td><td><code>b0288378227ce052</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ExecutionListenerAdapter</span></td><td><code>d91ab455a4c89f9b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.InternalTestPlan</span></td><td><code>ce2dcedb783e6f56</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder</span></td><td><code>452edacea5001e83</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.1</span></td><td><code>0736e6add61b3334</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.IterationOrder.2</span></td><td><code>0d0d72b6e503c372</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig</span></td><td><code>58100dc14c875cb9</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfig.Builder</span></td><td><code>64729ce9bd729578</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters</span></td><td><code>4b25c1714dc335ec</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.Builder</span></td><td><code>ba76828012d853d8</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider</span></td><td><code>52b5b9d7814ff3b1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.1</span></td><td><code>f83ebdedced2e399</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.2</span></td><td><code>886f3c723ddb9556</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherConfigurationParameters.ParameterProvider.3</span></td><td><code>0d89b6f56eb4db06</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryRequestBuilder</span></td><td><code>fb76ce235ae5247b</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherDiscoveryResult</span></td><td><code>9833a129382c2ccc</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherFactory</span></td><td><code>79c2095302f261bb</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.LauncherListenerRegistry</span></td><td><code>64d5f2a8ac991f94</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ListenerRegistry</span></td><td><code>7fe9373f303770d1</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener</span></td><td><code>3840931f19c9d795</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.OutcomeDelayingEngineExecutionListener.Outcome</span></td><td><code>730ad6d2d5641536</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderRegistry</span></td><td><code>08e28076c727f8e6</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.ServiceLoaderTestEngineRegistry</span></td><td><code>771f386239bb3682</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StackTracePruningEngineExecutionListener</span></td><td><code>f6f65efcfd071c8e</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.core.StreamInterceptingTestExecutionListener</span></td><td><code>0f855b867dc3eac4</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.UniqueIdTrackingListener</span></td><td><code>aaf56096b3079d53</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.AbortOnFailureLauncherDiscoveryListener</span></td><td><code>0a9a375bd99ca30a</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners</span></td><td><code>408046ed24478736</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.discovery.LauncherDiscoveryListeners.LauncherDiscoveryListenerType</span></td><td><code>bf2a372dcc5e43f7</code></td></tr><tr><td><span class="el_class">org.junit.platform.launcher.listeners.session.LauncherSessionListeners</span></td><td><code>46b8848a888d4d59</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansApplicationListener</span></td><td><code>e038b74293c709e4</code></td></tr><tr><td><span class="el_class">org.springframework.boot.actuate.autoconfigure.tracing.OpenTelemetryEventPublisherBeansTestExecutionListener</span></td><td><code>89df4f04e39e1522</code></td></tr><tr><td><span class="el_class">org.springframework.util.Assert</span></td><td><code>2e1248d2d1526e84</code></td></tr><tr><td><span class="el_class">org.springframework.util.ClassUtils</span></td><td><code>ca4ab8b63048e08b</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap</span></td><td><code>722cd58749bce5da</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceManager</span></td><td><code>35eb6b9c1f2eedb5</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.ReferenceType</span></td><td><code>5b823be241865c2f</code></td></tr><tr><td><span class="el_class">org.springframework.util.ConcurrentReferenceHashMap.Segment</span></td><td><code>5daee5d71f2a6fe2</code></td></tr></tbody></table><div class="footer"><span class="right">Created with <a href="http://www.jacoco.org/jacoco">JaCoCo</a> 0.8.12.202403310830</span></div></body></html>
    \ No newline at end of file
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.csv b/sentrius-llm-core/target/site/jacoco/jacoco.csv
    deleted file mode 100644
    index 9a7bdce0..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco.csv
    +++ /dev/null
    @@ -1,31 +0,0 @@
    -GROUP,PACKAGE,CLASS,INSTRUCTION_MISSED,INSTRUCTION_COVERED,BRANCH_MISSED,BRANCH_COVERED,LINE_MISSED,LINE_COVERED,COMPLEXITY_MISSED,COMPLEXITY_COVERED,METHOD_MISSED,METHOD_COVERED
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest,308,0,46,0,19,0,40,0,17,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ConversationRequest.ConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest.ChatApiEndpointRequestBuilder,18,0,0,0,1,0,3,0,3,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest,210,0,36,0,7,0,35,0,17,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,ChatApiEndpointRequest,175,0,28,0,15,0,25,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.model.endpoints,RawConversationRequest.RawConversationRequestBuilder,42,0,0,0,1,0,5,0,5,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response,401,0,70,0,13,0,60,0,25,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.Choice,196,0,38,0,5,0,32,0,13,0
    -sentrius-llm-core,io.sentrius.sso.genai,Message.MessageBuilder,36,0,0,0,1,0,6,0,6,0
    -sentrius-llm-core,io.sentrius.sso.genai,Message,171,0,30,0,7,0,28,0,13,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.Usage,155,0,30,0,4,0,26,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai,Response.ResponseBuilder,83,0,0,0,1,0,11,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest.BaseGenerativeRequestBuilder,38,0,0,0,1,0,6,0,6,0
    -sentrius-llm-core,io.sentrius.sso.genai.api,BaseGenerativeRequest,135,0,22,0,6,0,22,0,11,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilder,151,0,0,0,1,0,14,0,14,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse.LLMResponseBuilder,55,0,2,0,1,0,8,0,7,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,Conversation,218,0,38,0,7,0,34,0,15,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest,203,0,34,0,6,0,31,0,14,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest.LLMRequestBuilderImpl,7,0,0,0,1,0,2,0,2,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest,45,0,0,0,7,0,9,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ApiEndPointRequest.ApiEndPointRequestBuilder,67,0,0,0,1,0,8,0,8,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMRequest,525,0,86,0,14,0,72,0,29,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,TwoPartyRequest.TwoPartyRequestBuilder,73,0,2,0,1,0,10,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule,85,0,14,0,5,0,16,0,9,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,Conversation.ConversationBuilder,58,0,2,0,1,0,8,0,7,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,LLMResponse,206,0,34,0,9,0,33,0,16,0
    -sentrius-llm-core,io.sentrius.sso.genai.model,ComplianceRule.ComplianceRuleBuilder,18,0,0,0,1,0,4,0,4,0
    diff --git a/sentrius-llm-core/target/site/jacoco/jacoco.xml b/sentrius-llm-core/target/site/jacoco/jacoco.xml
    deleted file mode 100644
    index 74566161..00000000
    --- a/sentrius-llm-core/target/site/jacoco/jacoco.xml
    +++ /dev/null
    @@ -1 +0,0 @@
    -<?xml version="1.0" encoding="UTF-8" standalone="yes"?><!DOCTYPE report PUBLIC "-//JACOCO//DTD Report 1.1//EN" "report.dtd"><report name="sentrius-llm-core"><sessioninfo id="pop-os-33249098" start="1747519170536" dump="1747519170896"/><package name="io/sentrius/sso/genai/model/endpoints"><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder" sourcefilename="ConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest" sourcefilename="ConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="73"><counter type="INSTRUCTION" missed="97" covered="0"/><counter type="BRANCH" missed="10" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$newMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="32"><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;)V" line="32"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilder;" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="31"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="308" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="40" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl" sourcefilename="ConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest$ConversationRequestBuilderImpl;" line="32"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ConversationRequest;" line="32"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl" sourcefilename="ChatApiEndpointRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder" sourcefilename="ChatApiEndpointRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="3" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest" sourcefilename="RawConversationRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="74"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$chatWithHistory" desc="()Ljava/util/List;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$request" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="37" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChatWithHistory" desc="()Ljava/util/List;" line="45"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRequest" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="48"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChatWithHistory" desc="(Ljava/util/List;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRequest" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="210" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="35" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl" sourcefilename="RawConversationRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilderImpl;" line="31"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest;" line="31"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest" sourcefilename="ChatApiEndpointRequest.java"><method name="getEndpoint" desc="()Ljava/lang/String;" line="41"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="create" desc="()Ljava/lang/Object;" line="65"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="11" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$default$temperature" desc="()Ljava/lang/Float;" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="2" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;)V" line="31"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/endpoints/ChatApiEndpointRequest$ChatApiEndpointRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="37"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="30"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="30"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="175" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="25" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder" sourcefilename="RawConversationRequest.java"><method name="&lt;init&gt;" desc="()V" line="31"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="chatWithHistory" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="request" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/endpoints/RawConversationRequest$RawConversationRequestBuilder;" line="31"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="31"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="42" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="5" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="ChatApiEndpointRequest.java"><line nr="30" mi="69" ci="0" mb="14" cb="0"/><line nr="31" mi="46" ci="0" mb="2" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="65" mi="4" ci="0" mb="0" cb="0"/><line nr="66" mi="13" ci="0" mb="4" cb="0"/><line nr="67" mi="10" ci="0" mb="0" cb="0"/><line nr="68" mi="8" ci="0" mb="4" cb="0"/><line nr="69" mi="10" ci="0" mb="0" cb="0"/><line nr="71" mi="10" ci="0" mb="0" cb="0"/><line nr="72" mi="6" ci="0" mb="2" cb="0"/><line nr="73" mi="5" ci="0" mb="0" cb="0"/><line nr="75" mi="4" ci="0" mb="2" cb="0"/><line nr="76" mi="6" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="200" covered="0"/><counter type="BRANCH" missed="28" covered="0"/><counter type="LINE" missed="15" covered="0"/><counter type="COMPLEXITY" missed="30" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="RawConversationRequest.java"><line nr="30" mi="145" ci="0" mb="30" cb="0"/><line nr="31" mi="97" ci="0" mb="6" cb="0"/><line nr="37" mi="4" ci="0" mb="0" cb="0"/><line nr="41" mi="2" ci="0" mb="0" cb="0"/><line nr="45" mi="3" ci="0" mb="0" cb="0"/><line nr="48" mi="5" ci="0" mb="0" cb="0"/><line nr="74" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="259" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="ConversationRequest.java"><line nr="31" mi="145" ci="0" mb="30" cb="0"/><line nr="32" mi="97" ci="0" mb="6" cb="0"/><line nr="38" mi="4" ci="0" mb="0" cb="0"/><line nr="42" mi="2" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="9" ci="0" mb="0" cb="0"/><line nr="73" mi="4" ci="0" mb="0" cb="0"/><line nr="74" mi="10" ci="0" mb="0" cb="0"/><line nr="75" mi="11" ci="0" mb="2" cb="0"/><line nr="76" mi="11" ci="0" mb="0" cb="0"/><line nr="77" mi="1" ci="0" mb="0" cb="0"/><line nr="78" mi="13" ci="0" mb="0" cb="0"/><line nr="79" mi="13" ci="0" mb="4" cb="0"/><line nr="80" mi="10" ci="0" mb="0" cb="0"/><line nr="81" mi="6" ci="0" mb="2" cb="0"/><line nr="82" mi="5" ci="0" mb="0" cb="0"/><line nr="84" mi="4" ci="0" mb="2" cb="0"/><line nr="85" mi="6" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="357" covered="0"/><counter type="BRANCH" missed="46" covered="0"/><counter type="LINE" missed="19" covered="0"/><counter type="COMPLEXITY" missed="47" covered="0"/><counter type="METHOD" missed="24" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="816" covered="0"/><counter type="BRANCH" missed="110" covered="0"/><counter type="LINE" missed="41" covered="0"/><counter type="COMPLEXITY" missed="119" covered="0"/><counter type="METHOD" missed="64" covered="0"/><counter type="CLASS" missed="9" covered="0"/></package><package name="io/sentrius/sso/genai"><class name="io/sentrius/sso/genai/Response" sourcefilename="Response.java"><method name="concatenateResponses" desc="()Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getId" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getObject" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCreated" desc="()Ljava/lang/Long;" line="30"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getChoices" desc="()Ljava/util/List;" line="36"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUsage" desc="()Lio/sentrius/sso/genai/Response$Usage;" line="39"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getServiceTier" desc="()Ljava/lang/String;" line="42"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemFingerprint" desc="()Ljava/lang/String;" line="85"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setId" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setObject" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCreated" desc="(Ljava/lang/Long;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setChoices" desc="(Ljava/util/List;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUsage" desc="(Lio/sentrius/sso/genai/Response$Usage;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setServiceTier" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemFingerprint" desc="(Ljava/lang/String;)V" line="17"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="157" covered="0"/><counter type="BRANCH" missed="54" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="17"><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="16" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/Long;Ljava/lang/String;Ljava/util/List;Lio/sentrius/sso/genai/Response$Usage;Ljava/lang/String;Ljava/lang/String;)V" line="20"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="lambda$concatenateResponses$0" desc="(Lio/sentrius/sso/genai/Response$Choice;)Ljava/lang/String;" line="93"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="401" covered="0"/><counter type="BRANCH" missed="70" covered="0"/><counter type="LINE" missed="13" covered="0"/><counter type="COMPLEXITY" missed="60" covered="0"/><counter type="METHOD" missed="25" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Choice" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getIndex" desc="()Ljava/lang/Integer;" line="53"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessage" desc="()Lio/sentrius/sso/genai/Message;" line="56"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFinishReason" desc="()Ljava/lang/String;" line="59"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogprobs" desc="()Ljava/lang/Integer;" line="62"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setIndex" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessage" desc="(Lio/sentrius/sso/genai/Message;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFinishReason" desc="(Ljava/lang/String;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogprobs" desc="(Ljava/lang/Integer;)V" line="49"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="49"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="49"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="49"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="196" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="32" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message$MessageBuilder" sourcefilename="Message.java"><method name="&lt;init&gt;" desc="()V" line="33"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="refusal" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Message;" line="33"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="33"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="36" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Message" sourcefilename="Message.java"><method name="builder" desc="()Lio/sentrius/sso/genai/Message$MessageBuilder;" line="33"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="43"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRefusal" desc="()Ljava/lang/String;" line="46"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRefusal" desc="(Ljava/lang/String;)V" line="32"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="32"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="32"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="32"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="35"><counter type="INSTRUCTION" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="171" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$Usage" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptTokens" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getCompletionTokens" desc="()Ljava/lang/Integer;" line="78"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTotalTokens" desc="()Ljava/lang/Integer;" line="81"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPromptTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setCompletionTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTotalTokens" desc="(Ljava/lang/Integer;)V" line="70"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="72" covered="0"/><counter type="BRANCH" missed="24" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="13" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="70"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="70"><counter type="INSTRUCTION" missed="48" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="70"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="155" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="4" covered="0"/><counter type="COMPLEXITY" missed="26" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/Response$ResponseBuilder" sourcefilename="Response.java"><method name="&lt;init&gt;" desc="()V" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="id" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="object" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="created" desc="(Ljava/lang/Long;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="choices" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="usage" desc="(Lio/sentrius/sso/genai/Response$Usage;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="serviceTier" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemFingerprint" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/Response$ResponseBuilder;" line="18"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/Response;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="83" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="Message.java"><line nr="32" mi="143" ci="0" mb="30" cb="0"/><line nr="33" mi="40" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="35" mi="12" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><line nr="43" mi="3" ci="0" mb="0" cb="0"/><line nr="46" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="207" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="19" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Response.java"><line nr="17" mi="330" ci="0" mb="70" cb="0"/><line nr="18" mi="87" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="20" mi="27" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="30" mi="3" ci="0" mb="0" cb="0"/><line nr="33" mi="3" ci="0" mb="0" cb="0"/><line nr="36" mi="3" ci="0" mb="0" cb="0"/><line nr="39" mi="3" ci="0" mb="0" cb="0"/><line nr="42" mi="3" ci="0" mb="0" cb="0"/><line nr="49" mi="184" ci="0" mb="38" cb="0"/><line nr="53" mi="3" ci="0" mb="0" cb="0"/><line nr="56" mi="3" ci="0" mb="0" cb="0"/><line nr="59" mi="3" ci="0" mb="0" cb="0"/><line nr="62" mi="3" ci="0" mb="0" cb="0"/><line nr="70" mi="146" ci="0" mb="30" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="78" mi="3" ci="0" mb="0" cb="0"/><line nr="81" mi="3" ci="0" mb="0" cb="0"/><line nr="85" mi="3" ci="0" mb="0" cb="0"/><line nr="93" mi="13" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="835" covered="0"/><counter type="BRANCH" missed="138" covered="0"/><counter type="LINE" missed="22" covered="0"/><counter type="COMPLEXITY" missed="129" covered="0"/><counter type="METHOD" missed="60" covered="0"/><counter type="CLASS" missed="4" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1042" covered="0"/><counter type="BRANCH" missed="168" covered="0"/><counter type="LINE" missed="29" covered="0"/><counter type="COMPLEXITY" missed="163" covered="0"/><counter type="METHOD" missed="79" covered="0"/><counter type="CLASS" missed="6" covered="0"/></package><package name="io/sentrius/sso/genai/api"><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="()V" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest;Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="model" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="6" covered="0"/><counter type="METHOD" missed="6" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/api/BaseGenerativeRequest" sourcefilename="BaseGenerativeRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/api/BaseGenerativeRequest$BaseGenerativeRequestBuilder;)V" line="25"><counter type="INSTRUCTION" missed="11" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="34"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getModel" desc="()Ljava/lang/String;" line="40"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setModel" desc="(Ljava/lang/String;)V" line="24"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="24"><counter type="INSTRUCTION" missed="34" covered="0"/><counter type="BRANCH" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="3" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="24"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;)V" line="27"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="135" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="22" covered="0"/><counter type="METHOD" missed="11" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="BaseGenerativeRequest.java"><line nr="24" mi="106" ci="0" mb="22" cb="0"/><line nr="25" mi="49" ci="0" mb="0" cb="0"/><line nr="26" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="9" ci="0" mb="0" cb="0"/><line nr="34" mi="3" ci="0" mb="0" cb="0"/><line nr="40" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="173" covered="0"/><counter type="BRANCH" missed="22" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="28" covered="0"/><counter type="METHOD" missed="17" covered="0"/><counter type="CLASS" missed="2" covered="0"/></package><package name="io/sentrius/sso/genai/model"><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="()V" line="26"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/LLMRequest;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/LLMRequest;Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="51" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="messages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="temperature" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="topP" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="n" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stream" desc="(Ljava/lang/Boolean;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="stop" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(Ljava/lang/Integer;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="presencePenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="frequencyPenalty" desc="(Ljava/lang/Float;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="logitBias" desc="(Ljava/util/Map;)Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="26"><counter type="INSTRUCTION" missed="27" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="151" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder" sourcefilename="LLMResponse.java"><method name="&lt;init&gt;" desc="()V" line="13"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="role" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="content" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessage" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="alert" desc="(Z)Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="13"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="13"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation" sourcefilename="Conversation.java"><method name="$default$terminalMessages" desc="()Ljava/util/List;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Lio/sentrius/sso/genai/model/LLMResponse;Ljava/util/List;Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="89" covered="0"/><counter type="BRANCH" missed="30" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="12"><counter type="INSTRUCTION" missed="62" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousMessages" desc="()Ljava/util/List;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getNewUserMessage" desc="()Lio/sentrius/sso/genai/model/LLMResponse;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessages" desc="()Ljava/util/List;" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemConfines" desc="()Ljava/lang/String;" line="23"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPreviousMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setNewUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessages" desc="(Ljava/util/List;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemConfines" desc="(Ljava/lang/String;)V" line="14"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="218" covered="0"/><counter type="BRANCH" missed="38" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="15" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest" sourcefilename="ApiEndPointRequest.java"><method name="$default$maxTokens" desc="()I" line="12"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="26" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUser" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()I" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUser" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setUserInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setSystemInput" desc="(Ljava/lang/String;)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(I)V" line="11"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="55" covered="0"/><counter type="BRANCH" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="203" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="31" covered="0"/><counter type="METHOD" missed="14" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl" sourcefilename="LLMRequest.java"><method name="self" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilderImpl;" line="26"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/LLMRequest;" line="26"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="7" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="2" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest" sourcefilename="TwoPartyRequest.java"><method name="$default$systemInput" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;)V" line="6"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getSystemInput" desc="()Ljava/lang/String;" line="10"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getWhatSystemIsDoing" desc="()Ljava/lang/String;" line="14"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserObjective" desc="()Ljava/lang/String;" line="15"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getUserInput" desc="()Ljava/lang/String;" line="16"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPreviousPrompt" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPromptResponse" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="45" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="9" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder" sourcefilename="ApiEndPointRequest.java"><method name="&lt;init&gt;" desc="()V" line="12"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFrom" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="$fillValuesFromInstanceIntoBuilder" desc="(Lio/sentrius/sso/genai/model/ApiEndPointRequest;Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;)V" line="12"><counter type="INSTRUCTION" missed="21" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="user" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="maxTokens" desc="(I)Lio/sentrius/sso/genai/model/ApiEndPointRequest$ApiEndPointRequestBuilder;" line="12"><counter type="INSTRUCTION" missed="9" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="12"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="67" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="8" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMRequest" sourcefilename="LLMRequest.java"><method name="&lt;init&gt;" desc="(Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;)V" line="26"><counter type="INSTRUCTION" missed="44" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toBuilder" desc="()Lio/sentrius/sso/genai/model/LLMRequest$LLMRequestBuilder;" line="26"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMessages" desc="()Ljava/util/List;" line="38"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTemperature" desc="()Ljava/lang/Float;" line="51"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTopP" desc="()Ljava/lang/Float;" line="65"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getN" desc="()Ljava/lang/Integer;" line="75"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStream" desc="()Ljava/lang/Boolean;" line="87"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getStop" desc="()Ljava/util/List;" line="97"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getMaxTokens" desc="()Ljava/lang/Integer;" line="108"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getPresencePenalty" desc="()Ljava/lang/Float;" line="122"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getFrequencyPenalty" desc="()Ljava/lang/Float;" line="136"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getLogitBias" desc="()Ljava/util/Map;" line="151"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMessages" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTemperature" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTopP" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setN" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStream" desc="(Ljava/lang/Boolean;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setStop" desc="(Ljava/util/List;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setMaxTokens" desc="(Ljava/lang/Integer;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setPresencePenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setFrequencyPenalty" desc="(Ljava/lang/Float;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setLogitBias" desc="(Ljava/util/Map;)V" line="25"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="191" covered="0"/><counter type="BRANCH" missed="66" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="34" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="25"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="25"><counter type="INSTRUCTION" missed="146" covered="0"/><counter type="BRANCH" missed="20" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="11" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="25"><counter type="INSTRUCTION" missed="25" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/util/List;Ljava/lang/Float;Ljava/lang/Float;Ljava/lang/Integer;Ljava/lang/Boolean;Ljava/util/List;Ljava/lang/Integer;Ljava/lang/Float;Ljava/lang/Float;Ljava/util/Map;)V" line="28"><counter type="INSTRUCTION" missed="33" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="525" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="72" covered="0"/><counter type="METHOD" missed="29" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder" sourcefilename="TwoPartyRequest.java"><method name="&lt;init&gt;" desc="()V" line="6"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="whatSystemIsDoing" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userObjective" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="userInput" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousPrompt" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="promptResponse" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/TwoPartyRequest$TwoPartyRequestBuilder;" line="6"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/TwoPartyRequest;" line="6"><counter type="INSTRUCTION" missed="23" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="6"><counter type="INSTRUCTION" missed="14" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="73" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="10" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule" sourcefilename="ComplianceRule.java"><method name="builder" desc="()Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRule" desc="()Ljava/lang/String;" line="27"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRule" desc="(Ljava/lang/String;)V" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="38" covered="0"/><counter type="BRANCH" missed="12" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="7" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="21"><counter type="INSTRUCTION" missed="20" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="21"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;)V" line="23"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="24"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="85" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="16" covered="0"/><counter type="METHOD" missed="9" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/Conversation$ConversationBuilder" sourcefilename="Conversation.java"><method name="&lt;init&gt;" desc="()V" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="previousMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="newUserMessage" desc="(Lio/sentrius/sso/genai/model/LLMResponse;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="terminalMessages" desc="(Ljava/util/List;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="systemConfines" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/Conversation$ConversationBuilder;" line="11"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/Conversation;" line="11"><counter type="INSTRUCTION" missed="19" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="2" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="13" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="58" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="8" covered="0"/><counter type="METHOD" missed="7" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/LLMResponse" sourcefilename="LLMResponse.java"><method name="$default$alert" desc="()Z" line="13"><counter type="INSTRUCTION" missed="2" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="builder" desc="()Lio/sentrius/sso/genai/model/LLMResponse$LLMResponseBuilder;" line="13"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getRole" desc="()Ljava/lang/String;" line="17"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getContent" desc="()Ljava/lang/String;" line="18"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="getTerminalMessage" desc="()Ljava/lang/String;" line="19"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="isAlert" desc="()Z" line="21"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="equals" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="79" covered="0"/><counter type="BRANCH" missed="26" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="14" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="canEqual" desc="(Ljava/lang/Object;)Z" line="11"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="hashCode" desc="()I" line="11"><counter type="INSTRUCTION" missed="59" covered="0"/><counter type="BRANCH" missed="8" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="5" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="11"><counter type="INSTRUCTION" missed="10" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setRole" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setContent" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setTerminalMessage" desc="(Ljava/lang/String;)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="setAlert" desc="(Z)V" line="12"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="(Ljava/lang/String;Ljava/lang/String;Ljava/lang/String;Z)V" line="14"><counter type="INSTRUCTION" missed="15" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="&lt;init&gt;" desc="()V" line="15"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="206" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="33" covered="0"/><counter type="METHOD" missed="16" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><class name="io/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder" sourcefilename="ComplianceRule.java"><method name="&lt;init&gt;" desc="()V" line="22"><counter type="INSTRUCTION" missed="3" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="rule" desc="(Ljava/lang/String;)Lio/sentrius/sso/genai/model/ComplianceRule$ComplianceRuleBuilder;" line="22"><counter type="INSTRUCTION" missed="5" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="build" desc="()Lio/sentrius/sso/genai/model/ComplianceRule;" line="22"><counter type="INSTRUCTION" missed="6" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><method name="toString" desc="()Ljava/lang/String;" line="22"><counter type="INSTRUCTION" missed="4" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="1" covered="0"/><counter type="METHOD" missed="1" covered="0"/></method><counter type="INSTRUCTION" missed="18" covered="0"/><counter type="LINE" missed="1" covered="0"/><counter type="COMPLEXITY" missed="4" covered="0"/><counter type="METHOD" missed="4" covered="0"/><counter type="CLASS" missed="1" covered="0"/></class><sourcefile name="LLMRequest.java"><line nr="25" mi="405" ci="0" mb="86" cb="0"/><line nr="26" mi="212" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><line nr="28" mi="33" ci="0" mb="0" cb="0"/><line nr="38" mi="3" ci="0" mb="0" cb="0"/><line nr="51" mi="3" ci="0" mb="0" cb="0"/><line nr="65" mi="3" ci="0" mb="0" cb="0"/><line nr="75" mi="3" ci="0" mb="0" cb="0"/><line nr="87" mi="3" ci="0" mb="0" cb="0"/><line nr="97" mi="3" ci="0" mb="0" cb="0"/><line nr="108" mi="3" ci="0" mb="0" cb="0"/><line nr="122" mi="3" ci="0" mb="0" cb="0"/><line nr="136" mi="3" ci="0" mb="0" cb="0"/><line nr="151" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="683" covered="0"/><counter type="BRANCH" missed="86" covered="0"/><counter type="LINE" missed="14" covered="0"/><counter type="COMPLEXITY" missed="88" covered="0"/><counter type="METHOD" missed="45" covered="0"/><counter type="CLASS" missed="3" covered="0"/></sourcefile><sourcefile name="LLMResponse.java"><line nr="11" mi="151" ci="0" mb="34" cb="0"/><line nr="12" mi="16" ci="0" mb="0" cb="0"/><line nr="13" mi="61" ci="0" mb="2" cb="0"/><line nr="14" mi="15" ci="0" mb="0" cb="0"/><line nr="15" mi="6" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="261" covered="0"/><counter type="BRANCH" missed="36" covered="0"/><counter type="LINE" missed="9" covered="0"/><counter type="COMPLEXITY" missed="41" covered="0"/><counter type="METHOD" missed="23" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ComplianceRule.java"><line nr="21" mi="69" ci="0" mb="14" cb="0"/><line nr="22" mi="22" ci="0" mb="0" cb="0"/><line nr="23" mi="6" ci="0" mb="0" cb="0"/><line nr="24" mi="3" ci="0" mb="0" cb="0"/><line nr="27" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="103" covered="0"/><counter type="BRANCH" missed="14" covered="0"/><counter type="LINE" missed="5" covered="0"/><counter type="COMPLEXITY" missed="20" covered="0"/><counter type="METHOD" missed="13" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="TwoPartyRequest.java"><line nr="6" mi="100" ci="0" mb="2" cb="0"/><line nr="10" mi="3" ci="0" mb="0" cb="0"/><line nr="14" mi="3" ci="0" mb="0" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="16" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="118" covered="0"/><counter type="BRANCH" missed="2" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="19" covered="0"/><counter type="METHOD" missed="18" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="Conversation.java"><line nr="11" mi="81" ci="0" mb="2" cb="0"/><line nr="12" mi="167" ci="0" mb="38" cb="0"/><line nr="14" mi="16" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="18" mi="3" ci="0" mb="0" cb="0"/><line nr="21" mi="3" ci="0" mb="0" cb="0"/><line nr="23" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="276" covered="0"/><counter type="BRANCH" missed="40" covered="0"/><counter type="LINE" missed="7" covered="0"/><counter type="COMPLEXITY" missed="42" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><sourcefile name="ApiEndPointRequest.java"><line nr="11" mi="163" ci="0" mb="32" cb="0"/><line nr="12" mi="95" ci="0" mb="2" cb="0"/><line nr="15" mi="3" ci="0" mb="0" cb="0"/><line nr="17" mi="3" ci="0" mb="0" cb="0"/><line nr="19" mi="3" ci="0" mb="0" cb="0"/><line nr="22" mi="3" ci="0" mb="0" cb="0"/><counter type="INSTRUCTION" missed="270" covered="0"/><counter type="BRANCH" missed="34" covered="0"/><counter type="LINE" missed="6" covered="0"/><counter type="COMPLEXITY" missed="39" covered="0"/><counter type="METHOD" missed="22" covered="0"/><counter type="CLASS" missed="2" covered="0"/></sourcefile><counter type="INSTRUCTION" missed="1711" covered="0"/><counter type="BRANCH" missed="212" covered="0"/><counter type="LINE" missed="48" covered="0"/><counter type="COMPLEXITY" missed="249" covered="0"/><counter type="METHOD" missed="143" covered="0"/><counter type="CLASS" missed="13" covered="0"/></package><counter type="INSTRUCTION" missed="3742" covered="0"/><counter type="BRANCH" missed="512" covered="0"/><counter type="LINE" missed="124" covered="0"/><counter type="COMPLEXITY" missed="559" covered="0"/><counter type="METHOD" missed="303" covered="0"/><counter type="CLASS" missed="30" covered="0"/></report>
    \ No newline at end of file
    
    From 613a67e1de5cc70627aa1ceb113a7243475bdab2 Mon Sep 17 00:00:00 2001
    From: Marc Parisi <phrocker@apache.org>
    Date: Sat, 24 May 2025 10:57:17 -0400
    Subject: [PATCH 5/5] Add
    
    ---
     .../analysis/agents/verbs/AgentVerbs.java     | 16 ++++--
     .../api/UserCommunicationService.java         |  2 +
     .../analysis/api/websocket/ChatWSHandler.java | 40 ++++++++++++--
     .../agent/analysis/model/WebSocky.java        |  1 +
     ai-agent/src/main/resources/chat-helper.yaml  | 10 ++++
     .../controllers/api/UserApiController.java    | 13 +++--
     api/src/main/resources/default-policy.yaml    |  4 ++
     api/src/main/resources/static/js/chat.js      |  6 ++-
     .../resources/static/js/dashboard-agents.js   | 54 ++++++++++++++-----
     .../resources/templates/sso/dashboard.html    | 27 +++++++++-
     .../templates/sso/users/list_users.html       |  3 +-
     .../services/security/KeycloakService.java    | 10 ++++
     .../core/services/agents/AgentService.java    |  2 +
     13 files changed, 157 insertions(+), 31 deletions(-)
     create mode 100644 ai-agent/src/main/resources/chat-helper.yaml
    
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java
    index 50c4de28..5e13315c 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/agents/verbs/AgentVerbs.java
    @@ -151,7 +151,8 @@ public ArrayNode promptAgent(AgentExecution execution, Map<String, Object> args)
         @Verb(name = "interpret_user_request", returnType = ArrayNode.class, description = "Queries the LLM using the " +
             "user input.",
             isAiCallable = false, requiresTokenManagement = true)
    -    public TerminalResponse interpretUserData(AgentExecution execution, @NonNull WebSocky socketConnection) throws ZtatException,
    +    public TerminalResponse interpretUserData(AgentExecution execution, @NonNull WebSocky socketConnection,
    +                                              @NonNull Message userMessage) throws ZtatException,
             IOException {
     
             var lastMessage = socketConnection.getMessages().stream().reduce((prev, next) -> next).orElse(null);
    @@ -175,10 +176,14 @@ public TerminalResponse interpretUserData(AgentExecution execution, @NonNull Web
                 List<Message> messages = new ArrayList<>();
     
                 messages.add(Message.builder().role("system").content(prompt).build());
    -            messages.add(Message.builder().role("system").content("Please ensure your respones abide by the " +
    -                "following json format. Please summarize prior terminal sessions, using terminal output if needed " +
    +            messages.add(Message.builder().role("system").content("Please ensure your nextOperation abides by the " +
    +                "following json format and leave it empty if user's request doesn't require explicit use of system " +
    +                "operations" +
    +                ". Please summarize prior terminal " +
    +                "sessions, using " +
    +                "terminal output if needed " +
                     "for clarity of the next LLM request and for the user: " + terminalResponse).build());
    -
    +            messages.add(Message.builder().role("user").content(userMessage.getContent()).build());
                 LLMRequest chatRequest = LLMRequest.builder().model("gpt-4o").messages(messages).build();
                 var resp = llmService.askQuestion(execution, chatRequest);
                 execution.addMessages( messages );
    @@ -217,10 +222,11 @@ public TerminalResponse interpretUserData(AgentExecution execution, @NonNull Web
                 List<Message> messages = new ArrayList<>();
     
                 messages.add(Message.builder().role("system").content(prompt).build());
    -            messages.add(Message.builder().role("system").content("Please ensure your respones abide by the " +
    +            messages.add(Message.builder().role("system").content("Please ensure your nextOperation abide by the " +
                     "following json format. Please summarize prior terminal sessions, using terminal output if needed " +
                     "for clarity of the next LLM request and for the user: " + terminalResponse).build());
                 messages.add(Message.builder().role("assistant").content("prior response: " + lastMessage.getTerminalSummaryForLLM()).build());
    +            messages.add(Message.builder().role("user").content(userMessage.getContent()).build());
     
                 LLMRequest chatRequest = LLMRequest.builder().model("gpt-4o").messages(messages).build();
                 var resp = llmService.askQuestion(execution, chatRequest);
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java
    index 7083ae79..de443159 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/UserCommunicationService.java
    @@ -28,6 +28,8 @@ public class UserCommunicationService {
     
         private final ConcurrentHashMap<String, WebSocky> sessions = new ConcurrentHashMap<>();
     
    +
    +
         public void createSession(String sessionId, WebSocketSession session) {
             sessions.put(sessionId, WebSocky.builder().sessionId(sessionId).webSocketSession(session).build());
         }
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    index 567c2ff0..bb666ffc 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/api/websocket/ChatWSHandler.java
    @@ -11,8 +11,12 @@
     import java.util.stream.Stream;
     import com.fasterxml.jackson.databind.ObjectMapper;
     import io.sentrius.agent.analysis.agents.agents.ChatAgent;
    +import io.sentrius.agent.analysis.agents.verbs.AgentVerbs;
    +import io.sentrius.agent.analysis.agents.verbs.TerminalVerbs;
     import io.sentrius.agent.analysis.api.UserCommunicationService;
    +import io.sentrius.sso.core.exceptions.ZtatException;
     import io.sentrius.sso.core.services.agents.ZeroTrustClientService;
    +import io.sentrius.sso.genai.Message;
     import io.sentrius.sso.protobuf.Session;
     import lombok.RequiredArgsConstructor;
     import lombok.extern.slf4j.Slf4j;
    @@ -29,15 +33,20 @@ public class ChatWSHandler extends TextWebSocketHandler {
     
         final UserCommunicationService userCommunicationService;
         final ZeroTrustClientService zeroTrustClientService;
    +    final TerminalVerbs terminalVerbs;
    +    final AgentVerbs agentVerbs;
         // Store active sessions, using session ID or a custom identifier
     
     
         private final ChatAgent chatAgent;
     
         @Autowired
    -    public ChatWSHandler(UserCommunicationService userCommunicationService, ZeroTrustClientService zeroTrustClientService, ChatAgent chatAgent) {
    +    public ChatWSHandler(UserCommunicationService userCommunicationService, ZeroTrustClientService zeroTrustClientService,
    +                         TerminalVerbs terminalVerbs, AgentVerbs agentVerbs, ChatAgent chatAgent) {
             this.userCommunicationService = userCommunicationService;
             this.zeroTrustClientService = zeroTrustClientService;
    +        this.terminalVerbs = terminalVerbs;
    +        this.agentVerbs = agentVerbs;
             this.chatAgent = chatAgent;
         }
     
    @@ -85,6 +94,8 @@ public void afterConnectionEstablished(WebSocketSession session) throws Exceptio
             session.sendMessage(new TextMessage(
                 base64Message
             ));
    +
    +        userCommunicationService.createSession(queryParams.get("sessionId"), session);
         }
     
     
    @@ -100,7 +111,10 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message)
                     Map<String, String> queryParams = parseQueryParams(uri.getQuery());
                     String sessionId = queryParams.get("sessionId");
     
    -                if (sessionId != null) {
    +                var websocky = userCommunicationService.getSession(sessionId);
    +
    +                if (sessionId != null && websocky.isPresent()) {
    +                    var websocketCommunication = websocky.get();
                         log.info("Received message from session ID: " + sessionId);
                         // Handle the message (e.g., process or respond)
     
    @@ -113,7 +127,6 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message)
                                 Session.ChatMessage.parseFrom(messageBytes);
     
                             if (auditLog.getMessage().equals("heartbeat")) {
    -                            log.info("heartbeat");
                                 return;
                             }
                             var json = new ObjectMapper().readTree(auditLog.getMessage());
    @@ -136,8 +149,25 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message)
                                     session.close();
                                 }
                                 return;
    -                        } else if ("heartbeat".equals(auditLog.getMessage())) {
    +                        } else if ("user-message".equals(json.get("type").asText())) {
    +                            Message userMessage = Message.builder().role("user").content(json.get("message").asText()).build();
                                 log.info("Received heartbeat from session {}", sessionId);
    +                            var response = agentVerbs.interpretUserData(chatAgent.getAgentExecution(),
    +                                websocketCommunication, userMessage);
    +                            log.info("Response: {}", response);
    +                            var newMessage = Session.ChatMessage.newBuilder()
    +                                .setMessage(String.format("{\"type\":\"user-message\",\"message\":\"%s\"}",
    +                                    response.getResponseForUser()))
    +                                .setSender("agent")
    +                                .setChatGroupId("")
    +                                .setSessionId(Long.parseLong(websocketCommunication.getSessionId()))
    +                                .setTimestamp(System.currentTimeMillis())
    +                                .build();
    +                            messageBytes = newMessage.toByteArray();
    +                            String base64Message = Base64.getEncoder().encodeToString(messageBytes);
    +                            session.sendMessage(new TextMessage(
    +                                base64Message
    +                            ));
                                 return; // Ignore heartbeat messages
                             } else {
                                 log.info("Processing message: {}", auditLog.getMessage());
    @@ -154,7 +184,7 @@ protected void handleTextMessage(WebSocketSession session, TextMessage message)
                         log.info("Session ID not found in query parameters for message handling.");
                     }
                 }
    -        }catch (Exception e ){
    +        }catch (Exception | ZtatException e ){
                 throw new RuntimeException(e);
             }
         }
    diff --git a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java
    index 5f4adf44..fdff424b 100644
    --- a/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java
    +++ b/ai-agent/src/main/java/io/sentrius/agent/analysis/model/WebSocky.java
    @@ -24,4 +24,5 @@ public class WebSocky {
         WebSocketSession webSocketSession;
         @Builder.Default
         List<TerminalResponse> messages = new ArrayList<>();
    +
     }
    diff --git a/ai-agent/src/main/resources/chat-helper.yaml b/ai-agent/src/main/resources/chat-helper.yaml
    new file mode 100644
    index 00000000..ae9be177
    --- /dev/null
    +++ b/ai-agent/src/main/resources/chat-helper.yaml
    @@ -0,0 +1,10 @@
    +description: "Agent that handles logs and OpenAI access."
    +context: |
    +  You are a helpful agent that is responding to users via a chat interface. Please respond to the user in a friendly and helpful manner.
    +  Return responses in the following format:
    +  {
    +    "previousOperation": "<previousOperation>",
    +    "nextOperation": "<nextOperation>",
    +    "terminalSummaryForLLM": "<Summary of the terminal thus far for the next LLM assessment>",
    +      "responseForUser": "<Response to the user>"
    +  }
    \ No newline at end of file
    diff --git a/api/src/main/java/io/sentrius/sso/controllers/api/UserApiController.java b/api/src/main/java/io/sentrius/sso/controllers/api/UserApiController.java
    index 1e02bb23..cb6e484b 100644
    --- a/api/src/main/java/io/sentrius/sso/controllers/api/UserApiController.java
    +++ b/api/src/main/java/io/sentrius/sso/controllers/api/UserApiController.java
    @@ -136,10 +136,17 @@ public ResponseEntity<ObjectNode> addUser(HttpServletRequest request, HttpServle
     
         @GetMapping("/delete")
         @LimitAccess(userAccess = {UserAccessEnum.CAN_DEL_USERS})
    -    public String deleteUser(@RequestParam("userId") String userId) throws GeneralSecurityException {
    +    public String deleteUser(@RequestParam("userId") String userId, @RequestParam(required = false) String type) throws GeneralSecurityException {
             log.info("Deleting user with id: {}", userId);
    -        Long id = Long.parseLong(cryptoService.decrypt(userId));
    -        userService.deleteUser(id);
    +        if (null != type && type.equalsIgnoreCase("non_person_entity")) {
    +            log.info("Deleting non-person entity user with id: {}", userId);
    +            String userIdStr = cryptoService.decrypt(userId);
    +            var usr = userService.getUserByUserid(userIdStr);
    +            userService.deleteUser(usr.getId());
    +        } else {
    +            Long id = Long.parseLong(cryptoService.decrypt(userId));
    +            userService.deleteUser(id);
    +        }
             return "redirect:/sso/v1/users/list?message=" + MessagingUtil.getMessageId(MessagingUtil.USER_DELETE_SUCCESS);
         }
     
    diff --git a/api/src/main/resources/default-policy.yaml b/api/src/main/resources/default-policy.yaml
    index 1923746e..614b3e38 100644
    --- a/api/src/main/resources/default-policy.yaml
    +++ b/api/src/main/resources/default-policy.yaml
    @@ -19,6 +19,10 @@ actions:
         ztat_provider: "ztat-service.internal"
     capabilities:
       primitives:
    +      - id: "accessLLM"
    +        description: "access llm"
    +        endpoint:
    +          - "/api/v1/chat/completions"
       composed:
     ztat:
       provider: "ztat-service.internal"
    diff --git a/api/src/main/resources/static/js/chat.js b/api/src/main/resources/static/js/chat.js
    index b2a8da54..fc886539 100644
    --- a/api/src/main/resources/static/js/chat.js
    +++ b/api/src/main/resources/static/js/chat.js
    @@ -230,11 +230,13 @@ export function switchToAgent(agentName,agentId, sessionId, agentHost) {
             appendToChatWindow(msg.sender, msg.message);
         });
     
    +    container.classList.remove("hidden");
         container.style.display = "block";
         console.log("Chat container displayed");
     }
     
     export function sendMessage(event) {
    +    console.log("Send message event:", event);
         if (event.key !== "Enter") return;
     
         const input = document.getElementById("chat-input");
    @@ -290,4 +292,6 @@ export async function fetchAvailableAgents() {
             console.error("Error fetching available agents:", error);
             return [];
         }
    -}
    \ No newline at end of file
    +}
    +
    +window.sendMessage = sendMessage;
    \ No newline at end of file
    diff --git a/api/src/main/resources/static/js/dashboard-agents.js b/api/src/main/resources/static/js/dashboard-agents.js
    index 166d2e79..9536ce6c 100644
    --- a/api/src/main/resources/static/js/dashboard-agents.js
    +++ b/api/src/main/resources/static/js/dashboard-agents.js
    @@ -1,8 +1,6 @@
    -// api/src/main/resources/static/js/dashboard-agents.js
     import { fetchAvailableAgents, switchToAgent } from './chat.js';
     
     document.addEventListener('DOMContentLoaded', function () {
    -    console.log("Fetching agents 1...");
         const agentSelect = document.getElementById('agent-select');
         const startChatBtn = document.getElementById('start-chat-btn');
     
    @@ -11,17 +9,40 @@ document.addEventListener('DOMContentLoaded', function () {
             return;
         }
     
    -    console.log("Fetching agents 2...");
    -    fetchAvailableAgents().then(agents => {
    -        agents.forEach(agent => {
    -            const option = document.createElement('option');
    -            option.value = agent.agentName;
    -            option.textContent = agent.agentName || agent.agentId;
    -            option.dataset.agentHost = agent.agentCallback;
    -            option.dataset.agentId = agent.agentId;
    -            agentSelect.appendChild(option);
    +    function updateAgentList() {
    +        console.log('Updating agent list...');
    +        fetchAvailableAgents().then(agents => {
    +            const existingOptions = Array.from(agentSelect.options).reduce((map, opt) => {
    +                map.set(opt.dataset.agentId, opt);
    +                return map;
    +            }, new Map());
    +
    +            const currentAgentIds = new Set(agents.map(a => a.agentId));
    +
    +            // Add new agents
    +            agents.forEach(agent => {
    +                if (!existingOptions.has(agent.agentId)) {
    +                    const option = document.createElement('option');
    +                    option.value = agent.agentName;
    +                    option.textContent = agent.agentName || agent.agentId;
    +                    option.dataset.agentHost = agent.agentCallback;
    +                    option.dataset.agentId = agent.agentId;
    +                    agentSelect.appendChild(option);
    +                }
    +            });
    +
    +            // Remove stale agents
    +            for (let [agentId, option] of existingOptions.entries()) {
    +                if (!currentAgentIds.has(agentId)) {
    +                    agentSelect.removeChild(option);
    +                }
    +            }
    +
    +            startChatBtn.disabled = !agentSelect.value;
    +        }).catch(err => {
    +            console.error('Failed to update agent list:', err);
             });
    -    });
    +    }
     
         agentSelect.addEventListener('change', function () {
             startChatBtn.disabled = !agentSelect.value;
    @@ -30,7 +51,6 @@ document.addEventListener('DOMContentLoaded', function () {
         startChatBtn.addEventListener('click', function () {
             const selected = agentSelect.options[agentSelect.selectedIndex];
             if (selected && selected.value) {
    -            console.log("Switching to agent: ", selected.value);
                 const agentName = selected.value;
                 const agentHost = selected.dataset.agentHost;
                 const agentId = selected.dataset.agentId;
    @@ -38,4 +58,10 @@ document.addEventListener('DOMContentLoaded', function () {
                 switchToAgent(agentName, agentId, sessionId, agentHost);
             }
         });
    -});
    \ No newline at end of file
    +
    +    // Initial load
    +    updateAgentList();
    +
    +    // Refresh every 15 seconds
    +    setInterval(updateAgentList, 15000);
    +});
    diff --git a/api/src/main/resources/templates/sso/dashboard.html b/api/src/main/resources/templates/sso/dashboard.html
    index 37500221..5e620bec 100755
    --- a/api/src/main/resources/templates/sso/dashboard.html
    +++ b/api/src/main/resources/templates/sso/dashboard.html
    @@ -332,6 +332,29 @@
     
         </script>
         <style>
    +        #chat-container {
    +            position: fixed;
    +            bottom: 20px;
    +            right: 20px;
    +            width: 300px;
    +            height: 400px;
    +            z-index: 1000;
    +            background: #1e1e1e;
    +            border: 1px solid #444;
    +            border-radius: 8px;
    +            padding: 12px;
    +            display: none;
    +        }
    +
    +        #chat-messages {
    +            height: 250px; /* Adjust height as needed */
    +            overflow-y: auto;
    +            padding: 10px;
    +            border: 1px solid #ccc;
    +            background-color: #1e1e1e;
    +            font-family: sans-serif;
    +        }
    +
             small-card {
                 max-width: 300px;
                 padding: 10px;
    @@ -380,7 +403,7 @@
                             <span id="close-chat" onclick="toggleChat()">✖</span>
                         </div>
                         <div id="chat-messages"></div>
    -                    <input type="text" id="chat-input" placeholder="Type a message..." onkeypress="sendMessage(event)">
    +                    <input type="text" id="chat-input" placeholder="Type a message..." onkeydown="sendMessage(event)">
                     </div>
                     <div class="container-fluid">
                         <br><br>
    @@ -448,7 +471,7 @@ <h5 class="card-title">AI Admin Operations</h5>
                                         <a href="/api/v1/users/list" class="btn btn-danger">Build Automation</a>
                                         <a href="#" class="btn btn-primary" data-bs-toggle="modal"
                                            data-bs-target="#userFormModal">Usage Patterns</a>
    -                                    chat-container                                    <a href="#" class="btn btn-primary" data-bs-toggle="modal"
    +                                    <a href="#" class="btn btn-primary" data-bs-toggle="modal"
                                            data-bs-target="#userFormModal">Usage Patterns</a>
                                     </div>
                                     <div class="mb-3">
    diff --git a/api/src/main/resources/templates/sso/users/list_users.html b/api/src/main/resources/templates/sso/users/list_users.html
    index 1075b39c..0b8910c6 100755
    --- a/api/src/main/resources/templates/sso/users/list_users.html
    +++ b/api/src/main/resources/templates/sso/users/list_users.html
    @@ -76,7 +76,8 @@
                                 actions += `<button class="btn btn-secondary view-policy-btn" data-agent-id="${myId}">View
                                     Policy</button> &nbsp; | &nbsp;`;
                                 actions += `<button class="btn btn-primary edit-policy-btn" data-agent-id="${myId}">Edit Policy</button> &nbsp; | &nbsp;`;
    -                            actions += `<button class="btn btn-primary audit-agent-btn" data-agent-id="${myId}">Audit Graph</button>`;
    +                            actions += `<button class="btn btn-primary audit-agent-btn" data-agent-id="${myId}">Audit Graph</button> &nbsp; | &nbsp;`;
    +                            actions += `<a href="/api/v1/users/delete?userId=${myId}&type=non_person_entity" class="btn btn-primary" >Delete</a>`;
                             }
                             return actions;
                         }
    diff --git a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    index 4a3b0819..f454d135 100644
    --- a/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    +++ b/core/src/main/java/io/sentrius/sso/core/services/security/KeycloakService.java
    @@ -104,6 +104,16 @@ public String extractUsername(String token) {
             return claims.get("preferred_username", String.class); // Extracts agent identity
         }
     
    +    public void removeAgentClient(String clientId) {
    +        ClientsResource clients = keycloak.getKeycloak().realm(realm).clients();
    +        ClientResource client = clients.get(clientId);
    +        if (client != null) {
    +            client.remove();
    +        } else {
    +            log.warn("Client with ID {} not found", clientId);
    +        }
    +    }
    +
         public AgentRegistrationDTO registerAgentClient(AgentRegistrationDTO agent) {
             ClientsResource clients = keycloak.getKeycloak().realm(realm).clients();
     
    diff --git a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    index 61425911..04133fb6 100644
    --- a/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    +++ b/dataplane/src/main/java/io/sentrius/sso/core/services/agents/AgentService.java
    @@ -289,11 +289,13 @@ public void pingAndRemoveUnavailableAgents() {
                         repository.delete(heartbeat);
                         continue;
                     }
    +                log.info("Ping user {}: {}", user.getUserId(), heartbeat);
                     ping(user).join(); // This will update the pingCache
                     Optional<AgentStatus> status = getPing(user);
                     if (status.isEmpty()) {
                         // Remove agent if not available
                         repository.delete(heartbeat);
    +                    keycloakService.removeAgentClient(agentId);
                         log.info("Removed unavailable agent: {}", agentId);
                     }
                 } catch (Exception e) {