| | |
| | | import com.vincent.rsf.server.ai.entity.AiMcpCallLog; |
| | | import com.vincent.rsf.server.ai.mapper.AiCallLogMapper; |
| | | import com.vincent.rsf.server.ai.mapper.AiMcpCallLogMapper; |
| | | import com.vincent.rsf.server.ai.store.AiObserveStatsStore; |
| | | import com.vincent.rsf.server.ai.service.AiCallLogService; |
| | | import lombok.RequiredArgsConstructor; |
| | | import org.springframework.stereotype.Service; |
| | |
| | | private static final Pattern BEARER_PATTERN = Pattern.compile("(?i)(bearer\\s+)([a-z0-9._-]+)"); |
| | | |
| | | private final AiMcpCallLogMapper aiMcpCallLogMapper; |
| | | private final AiRedisSupport aiRedisSupport; |
| | | private final AiObserveStatsStore aiObserveStatsStore; |
| | | |
| | | @Override |
| | | public AiCallLog startCallLog(String requestId, Long sessionId, Long userId, Long tenantId, String promptCode, |
| | |
| | | .setCreateTime(now) |
| | | .setUpdateTime(now); |
| | | this.save(callLog); |
| | | aiRedisSupport.recordObserveCallStarted(tenantId); |
| | | aiObserveStatsStore.recordObserveCallStarted(tenantId); |
| | | return callLog; |
| | | } |
| | | |
| | |
| | | .set(AiCallLog::getUpdateTime, new Date())); |
| | | AiCallLog latest = this.getById(callLogId); |
| | | if (latest != null) { |
| | | aiRedisSupport.recordObserveCallFinished(latest.getTenantId(), status, elapsedMs, firstTokenLatencyMs, totalTokens); |
| | | aiObserveStatsStore.recordObserveCallFinished(latest.getTenantId(), status, elapsedMs, firstTokenLatencyMs, totalTokens); |
| | | } |
| | | } |
| | | |
| | |
| | | .set(AiCallLog::getUpdateTime, new Date())); |
| | | AiCallLog latest = this.getById(callLogId); |
| | | if (latest != null) { |
| | | aiRedisSupport.recordObserveCallFinished(latest.getTenantId(), status, elapsedMs, firstTokenLatencyMs, null); |
| | | aiObserveStatsStore.recordObserveCallFinished(latest.getTenantId(), status, elapsedMs, firstTokenLatencyMs, null); |
| | | } |
| | | } |
| | | |
| | |
| | | .setUserId(userId) |
| | | .setTenantId(tenantId) |
| | | .setCreateTime(new Date())); |
| | | aiRedisSupport.recordObserveToolCall(tenantId, toolName, status); |
| | | aiObserveStatsStore.recordObserveToolCall(tenantId, toolName, status); |
| | | } |
| | | |
| | | @Override |
| | | public AiObserveStatsDto getObserveStats(Long tenantId) { |
| | | return aiRedisSupport.getObserveStats(tenantId, () -> loadObserveStatsFromDatabase(tenantId)); |
| | | return aiObserveStatsStore.getObserveStats(tenantId, () -> loadObserveStatsFromDatabase(tenantId)); |
| | | } |
| | | |
| | | private AiObserveStatsDto loadObserveStatsFromDatabase(Long tenantId) { |