Merge pull request #14147 from dashevchenko/githubAiRequestFix
Fixed file attaching for Github AI models
This commit is contained in:
commit
89c153fc15
@ -16,6 +16,11 @@
|
|||||||
package org.thingsboard.server.service.ai;
|
package org.thingsboard.server.service.ai;
|
||||||
|
|
||||||
import com.google.common.util.concurrent.FluentFuture;
|
import com.google.common.util.concurrent.FluentFuture;
|
||||||
|
import dev.langchain4j.data.message.ChatMessage;
|
||||||
|
import dev.langchain4j.data.message.Content;
|
||||||
|
import dev.langchain4j.data.message.TextContent;
|
||||||
|
import dev.langchain4j.data.message.UserMessage;
|
||||||
|
import dev.langchain4j.model.ModelProvider;
|
||||||
import dev.langchain4j.model.chat.ChatModel;
|
import dev.langchain4j.model.chat.ChatModel;
|
||||||
import dev.langchain4j.model.chat.request.ChatRequest;
|
import dev.langchain4j.model.chat.request.ChatRequest;
|
||||||
import dev.langchain4j.model.chat.response.ChatResponse;
|
import dev.langchain4j.model.chat.response.ChatResponse;
|
||||||
@ -24,6 +29,11 @@ import org.springframework.stereotype.Service;
|
|||||||
import org.thingsboard.server.common.data.ai.model.chat.AiChatModelConfig;
|
import org.thingsboard.server.common.data.ai.model.chat.AiChatModelConfig;
|
||||||
import org.thingsboard.server.common.data.ai.model.chat.Langchain4jChatModelConfigurer;
|
import org.thingsboard.server.common.data.ai.model.chat.Langchain4jChatModelConfigurer;
|
||||||
|
|
||||||
|
import java.util.List;
|
||||||
|
import java.util.stream.Collectors;
|
||||||
|
|
||||||
|
import static org.thingsboard.server.common.data.StringUtils.escapeControlChars;
|
||||||
|
|
||||||
@Service
|
@Service
|
||||||
@RequiredArgsConstructor
|
@RequiredArgsConstructor
|
||||||
class AiChatModelServiceImpl implements AiChatModelService {
|
class AiChatModelServiceImpl implements AiChatModelService {
|
||||||
@ -34,7 +44,39 @@ class AiChatModelServiceImpl implements AiChatModelService {
|
|||||||
@Override
|
@Override
|
||||||
public <C extends AiChatModelConfig<C>> FluentFuture<ChatResponse> sendChatRequestAsync(AiChatModelConfig<C> chatModelConfig, ChatRequest chatRequest) {
|
public <C extends AiChatModelConfig<C>> FluentFuture<ChatResponse> sendChatRequestAsync(AiChatModelConfig<C> chatModelConfig, ChatRequest chatRequest) {
|
||||||
ChatModel langChainChatModel = chatModelConfig.configure(chatModelConfigurer);
|
ChatModel langChainChatModel = chatModelConfig.configure(chatModelConfigurer);
|
||||||
|
if (langChainChatModel.provider() == ModelProvider.GITHUB_MODELS) {
|
||||||
|
chatRequest = prepareGithubChatRequest(chatRequest);
|
||||||
|
}
|
||||||
return aiRequestsExecutor.sendChatRequestAsync(langChainChatModel, chatRequest);
|
return aiRequestsExecutor.sendChatRequestAsync(langChainChatModel, chatRequest);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
private ChatRequest prepareGithubChatRequest(ChatRequest chatRequest) {
|
||||||
|
List<ChatMessage> messages = chatRequest.messages().stream()
|
||||||
|
.map(this::prepareUserMessage)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return ChatRequest.builder()
|
||||||
|
.messages(messages)
|
||||||
|
.responseFormat(chatRequest.responseFormat())
|
||||||
|
.build();
|
||||||
|
}
|
||||||
|
|
||||||
|
private ChatMessage prepareUserMessage(ChatMessage message) {
|
||||||
|
if (message instanceof UserMessage userMessage) {
|
||||||
|
List<Content> newContents = userMessage.contents().stream()
|
||||||
|
.map(this::prepareContent)
|
||||||
|
.collect(Collectors.toList());
|
||||||
|
|
||||||
|
return UserMessage.from(newContents);
|
||||||
|
}
|
||||||
|
return message;
|
||||||
|
}
|
||||||
|
|
||||||
|
private Content prepareContent(Content content) {
|
||||||
|
if (content instanceof TextContent txt) {
|
||||||
|
return new TextContent(escapeControlChars(txt.text()));
|
||||||
|
}
|
||||||
|
return content;
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
@ -275,4 +275,11 @@ public class StringUtils {
|
|||||||
return result;
|
return result;
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public static String escapeControlChars(String text) {
|
||||||
|
return text
|
||||||
|
.replace("\n", "\\n")
|
||||||
|
.replace("\r", "\\r")
|
||||||
|
.replace("\t", "\\t");
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
|||||||
Loading…
x
Reference in New Issue
Block a user