From 794d87e408e5ad41d7fedcef8b1ee7ff3f51eb78 Mon Sep 17 00:00:00 2001 From: Mohammad Zwaib Date: Wed, 15 Jul 2026 23:28:25 +0200 Subject: [PATCH] chat-log-build --- .../java/com/homme/demo/HommeApplication.java | 2 +- .../java/com/homme/demo/entity/ChatLog.java | 41 +++++++++++++++++++ .../demo/repository/ChatLogRepository.java | 8 ++++ .../com/homme/demo/service/RagService.java | 32 ++++++++++++--- 4 files changed, 76 insertions(+), 7 deletions(-) create mode 100644 src/main/java/com/homme/demo/entity/ChatLog.java create mode 100644 src/main/java/com/homme/demo/repository/ChatLogRepository.java diff --git a/src/main/java/com/homme/demo/HommeApplication.java b/src/main/java/com/homme/demo/HommeApplication.java index 6071776..6dd841c 100644 --- a/src/main/java/com/homme/demo/HommeApplication.java +++ b/src/main/java/com/homme/demo/HommeApplication.java @@ -21,7 +21,7 @@ public class HommeApplication { private AzureWebSearchAgentService azureWebSearchAgentService; public static void main(String[] args) { - System.out.println("Main hömme"); + SpringApplication.run(HommeApplication.class, args); } diff --git a/src/main/java/com/homme/demo/entity/ChatLog.java b/src/main/java/com/homme/demo/entity/ChatLog.java new file mode 100644 index 0000000..b346d58 --- /dev/null +++ b/src/main/java/com/homme/demo/entity/ChatLog.java @@ -0,0 +1,41 @@ +package com.homme.demo.entity; + +import java.time.LocalDateTime; + +import jakarta.persistence.Column; +import jakarta.persistence.Entity; +import jakarta.persistence.GeneratedValue; +import jakarta.persistence.GenerationType; +import jakarta.persistence.Id; +import jakarta.persistence.Table; +import lombok.AllArgsConstructor; +import lombok.Builder; +import lombok.Getter; +import lombok.NoArgsConstructor; +import lombok.Setter; + +@Entity +@Table(name = "chat_log") +@Getter +@Setter +@Builder +@NoArgsConstructor +@AllArgsConstructor +public class ChatLog { + + @Id + @GeneratedValue(strategy = GenerationType.IDENTITY) + private Integer id; + + @Column(columnDefinition = "TEXT") + private String question; + + @Column(columnDefinition = "TEXT") + private String answer; + + private Double bestDistance; + + private Boolean usedWeb; + + private LocalDateTime createdAt; +} diff --git a/src/main/java/com/homme/demo/repository/ChatLogRepository.java b/src/main/java/com/homme/demo/repository/ChatLogRepository.java new file mode 100644 index 0000000..3dde4c2 --- /dev/null +++ b/src/main/java/com/homme/demo/repository/ChatLogRepository.java @@ -0,0 +1,8 @@ +package com.homme.demo.repository; + +import org.springframework.data.jpa.repository.JpaRepository; + +import com.homme.demo.entity.ChatLog; + +public interface ChatLogRepository extends JpaRepository { +} diff --git a/src/main/java/com/homme/demo/service/RagService.java b/src/main/java/com/homme/demo/service/RagService.java index 16f44b9..153398d 100644 --- a/src/main/java/com/homme/demo/service/RagService.java +++ b/src/main/java/com/homme/demo/service/RagService.java @@ -1,13 +1,16 @@ package com.homme.demo.service; import java.time.LocalDate; +import java.time.LocalDateTime; import java.util.List; import org.springframework.beans.factory.annotation.Autowired; import org.springframework.stereotype.Service; import org.springframework.transaction.annotation.Transactional; +import com.homme.demo.entity.ChatLog; import com.homme.demo.entity.DocumentChunck; +import com.homme.demo.repository.ChatLogRepository; import com.homme.demo.repository.DocumentChunckRepository; @@ -26,7 +29,10 @@ public class RagService { @Autowired private DocumentChunckRepository documentChunckRepository; - + + @Autowired + private ChatLogRepository chatLogRepository; + private static final double DISTANCE_THRESHOULD = 0.68; // ===== system: Rolle, Ton und Regeln (statisch) ===== @@ -101,7 +107,7 @@ public class RagService { """; - @Transactional(readOnly = true) + @Transactional public String answerQuestion(String question) { long t1 = System.currentTimeMillis(); @@ -121,9 +127,10 @@ public class RagService { String webResults = "Kein Webkontext verfuegbar." ; boolean hatRelevantenKontext = false; + Double bestDistance = null; if(!rows.isEmpty()) { - - double bestDistance = ((Number) rows.get(0)[1]).doubleValue(); + + bestDistance = ((Number) rows.get(0)[1]).doubleValue(); hatRelevantenKontext = bestDistance <= DISTANCE_THRESHOULD; System.out.println("bestDistance "+ bestDistance+ " hatRelevantenKontext "+hatRelevantenKontext); @@ -173,11 +180,24 @@ public class RagService { ); long t2 = System.currentTimeMillis(); - String answer = azureMistralService.askMistral(SYSTEM_PROMPT, userPrompt, 250); + String answer = azureMistralService.askMistral(SYSTEM_PROMPT, userPrompt, 800); System.out.println("Mistarl = "+ (System.currentTimeMillis() - t2)+ "ms"); + Double roundedDistance = (bestDistance == null) + ? null + : Math.round(bestDistance * 100.0) / 100.0; + + ChatLog log = ChatLog.builder() + .question(question) + .answer(answer) + .bestDistance(roundedDistance) + .usedWeb(!hatRelevantenKontext) + .createdAt(LocalDateTime.now()) + .build(); + chatLogRepository.save(log); + return answer; - + }