private static void enhanceAssistantRequest()

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);
    }