package com.vincent.rsf.server.ai.store;
|
|
import com.fasterxml.jackson.core.type.TypeReference;
|
import com.vincent.rsf.server.ai.config.AiDefaults;
|
import com.vincent.rsf.server.ai.dto.AiChatMemoryDto;
|
import com.vincent.rsf.server.ai.dto.AiChatRuntimeDto;
|
import com.vincent.rsf.server.ai.dto.AiChatSessionDto;
|
import com.vincent.rsf.server.ai.store.support.AiRedisExecutor;
|
import com.vincent.rsf.server.ai.store.support.AiRedisIndexSupport;
|
import com.vincent.rsf.server.ai.store.support.AiRedisKeys;
|
import lombok.RequiredArgsConstructor;
|
import org.springframework.stereotype.Component;
|
|
import java.util.List;
|
|
@Component
|
@RequiredArgsConstructor
|
public class AiConversationCacheStore {
|
|
private final AiRedisExecutor aiRedisExecutor;
|
private final AiRedisIndexSupport aiRedisIndexSupport;
|
private final AiRedisKeys aiRedisKeys;
|
|
public AiChatRuntimeDto getRuntime(Long tenantId, Long userId, String promptCode, Long sessionId, Long aiParamId) {
|
return aiRedisExecutor.readJson(aiRedisKeys.buildRuntimeKey(tenantId, userId, promptCode, sessionId, aiParamId), AiChatRuntimeDto.class);
|
}
|
|
public void cacheRuntime(Long tenantId, Long userId, String promptCode, Long sessionId, Long aiParamId, AiChatRuntimeDto runtime) {
|
String key = aiRedisKeys.buildRuntimeKey(tenantId, userId, promptCode, sessionId, aiParamId);
|
aiRedisExecutor.writeJson(key, runtime, AiDefaults.RUNTIME_CACHE_TTL_SECONDS);
|
rememberConversationKey(tenantId, userId, key);
|
aiRedisIndexSupport.remember(aiRedisKeys.buildTenantRuntimeIndexKey(tenantId), key);
|
}
|
|
public AiChatMemoryDto getMemory(Long tenantId, Long userId, String promptCode, Long sessionId) {
|
return aiRedisExecutor.readJson(aiRedisKeys.buildMemoryKey(tenantId, userId, promptCode, sessionId), AiChatMemoryDto.class);
|
}
|
|
public void cacheMemory(Long tenantId, Long userId, String promptCode, Long sessionId, AiChatMemoryDto memory) {
|
String key = aiRedisKeys.buildMemoryKey(tenantId, userId, promptCode, sessionId);
|
aiRedisExecutor.writeJson(key, memory, AiDefaults.MEMORY_CACHE_TTL_SECONDS);
|
rememberConversationKey(tenantId, userId, key);
|
}
|
|
public List<AiChatSessionDto> getSessionList(Long tenantId, Long userId, String promptCode, String keyword) {
|
return aiRedisExecutor.readJson(aiRedisKeys.buildSessionsKey(tenantId, userId, promptCode, keyword), new TypeReference<List<AiChatSessionDto>>() {
|
});
|
}
|
|
public void cacheSessionList(Long tenantId, Long userId, String promptCode, String keyword, List<AiChatSessionDto> sessions) {
|
String key = aiRedisKeys.buildSessionsKey(tenantId, userId, promptCode, keyword);
|
aiRedisExecutor.writeJson(key, sessions, AiDefaults.SESSION_LIST_CACHE_TTL_SECONDS);
|
rememberConversationKey(tenantId, userId, key);
|
}
|
|
public void evictUserConversationCaches(Long tenantId, Long userId) {
|
aiRedisIndexSupport.deleteTrackedKeys(aiRedisKeys.buildConversationIndexKey(tenantId, userId));
|
}
|
|
public void evictTenantRuntimeCaches(Long tenantId) {
|
aiRedisIndexSupport.deleteTrackedKeys(aiRedisKeys.buildTenantRuntimeIndexKey(tenantId));
|
}
|
|
private void rememberConversationKey(Long tenantId, Long userId, String key) {
|
aiRedisIndexSupport.remember(aiRedisKeys.buildConversationIndexKey(tenantId, userId), key);
|
}
|
}
|