PromptService.java

package fr.tiogars.chat.domains.prompt.services;

import fr.tiogars.chat.domains.prompt.models.PromptRequest;
import fr.tiogars.chat.domains.prompt.models.PromptResponse;
import org.springframework.stereotype.Service;

import java.time.Duration;
import java.time.Instant;

/**
 * Service for handling AI prompts.
 * This service uses the ChatClientAdapter to communicate with AI models.
 */
@Service
public class PromptService {

    private final ChatClientAdapter chatClient;

    public PromptService(ChatClientAdapter chatClient) {
        this.chatClient = chatClient;
    }

    /**
     * Process a prompt request and return the AI response.
     *
     * @param request the prompt request
     * @return the AI response
     */
    public PromptResponse processPrompt(PromptRequest request) {
        Instant start = Instant.now();

        String response;
        if (request.systemPrompt() != null && !request.systemPrompt().isBlank()) {
            response = chatClient.call(request.systemPrompt(), request.prompt());
        } else {
            response = chatClient.call(request.prompt());
        }

        Instant end = Instant.now();
        long processingTimeMs = Duration.between(start, end).toMillis();

        return new PromptResponse(
                response,
                request.model() != null ? request.model() : "unknown",
                response.length(),
                processingTimeMs,
                "stop"
        );
    }
}