in server/src/main/java/com/epam/aidial/core/server/function/enhancement/EnhanceAssistantRequestFn.java [40:96]
private static void enhanceAssistantRequest(ProxyContext context, ObjectNode tree) {
Config config = context.getConfig();
Assistant assistant = (Assistant) context.getDeployment();
ArrayNode messages = (ArrayNode) tree.get("messages");
if (assistant.getPrompt() != null) {
deletePrompt(messages);
insertPrompt(messages, assistant.getPrompt());
}
Set<String> names = new LinkedHashSet<>(assistant.getAddons());
ArrayNode addons = (ArrayNode) tree.get("addons");
if (addons == null) {
addons = tree.putArray("addons");
}
for (JsonNode addon : addons) {
String name = addon.get("name").asText("");
names.add(name);
}
addons.removeAll();
Map<String, String> headers = new HashMap<>();
int addonIndex = 0;
for (String name : names) {
Addon addon = config.getAddons().get(name);
if (addon == null) {
throw new HttpException(HttpStatus.NOT_FOUND, "No addon: " + name);
}
if (!addon.hasAccess(context.getUserRoles())) {
throw new HttpException(HttpStatus.FORBIDDEN, "Forbidden addon: " + name);
}
String url = addon.getEndpoint();
addons.addObject().put("url", url).put("name", name);
if (addon.getToken() != null && !addon.getToken().isBlank()) {
headers.put("x-addon-token-" + addonIndex, addon.getToken());
}
++addonIndex;
}
String name = tree.get("model").asText(null);
Model model = config.getModels().get(name);
if (model == null) {
throw new HttpException(HttpStatus.NOT_FOUND, "No model: " + name);
}
if (!model.hasAccess(context.getUserRoles())) {
throw new HttpException(HttpStatus.FORBIDDEN, "Forbidden model: " + name);
}
context.setRequestHeaders(headers);
}