in server/src/main/java/com/epam/aidial/core/server/controller/ControllerSelector.java [83:333]
static {
// GET routes
get(PATTERN_DEPLOYMENT, (proxy, context, pathMatcher) -> {
DeploymentController controller = new DeploymentController(context);
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
return () -> controller.getDeployment(deploymentId);
});
get(PATTERN_DEPLOYMENTS, (proxy, context, pathMatcher) -> {
DeploymentController controller = new DeploymentController(context);
return controller::getDeployments;
});
get(PATTERN_MODEL, (proxy, context, pathMatcher) -> {
ModelController controller = new ModelController(context);
String modelId = UrlUtil.decodePath(pathMatcher.group(1));
return () -> controller.getModel(modelId);
});
get(PATTERN_MODELS, (proxy, context, pathMatcher) -> {
ModelController controller = new ModelController(context);
return controller::getModels;
});
get(PATTERN_ADDON, (proxy, context, pathMatcher) -> {
AddonController controller = new AddonController(context);
String addonId = UrlUtil.decodePath(pathMatcher.group(1));
return () -> controller.getAddon(addonId);
});
get(PATTERN_ADDONS, (proxy, context, pathMatcher) -> {
AddonController controller = new AddonController(context);
return controller::getAddons;
});
get(PATTERN_ASSISTANT, (proxy, context, pathMatcher) -> {
AssistantController controller = new AssistantController(context);
String assistantId = UrlUtil.decodePath(pathMatcher.group(1));
return () -> controller.getAssistant(assistantId);
});
get(PATTERN_ASSISTANTS, (proxy, context, pathMatcher) -> {
AssistantController controller = new AssistantController(context);
return controller::getAssistants;
});
get(PATTERN_APPLICATION, (proxy, context, pathMatcher) -> {
ApplicationController controller = new ApplicationController(context);
String application = UrlUtil.decodePath(pathMatcher.group(1));
return () -> controller.getApplication(application);
});
get(PATTERN_APPLICATIONS, (proxy, context, pathMatcher) -> {
ApplicationController controller = new ApplicationController(context);
return controller::getApplications;
});
get(PATTERN_FILES_METADATA, (proxy, context, pathMatcher) -> {
FileMetadataController controller = new FileMetadataController(proxy, context);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
get(PATTERN_FILES, (proxy, context, pathMatcher) -> {
DownloadFileController controller = new DownloadFileController(proxy, context);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
get(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
ResourceController controller = new ResourceController(proxy, context, false);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
get(PATTERN_RESOURCE_METADATA, (proxy, context, pathMatcher) -> {
ResourceController controller = new ResourceController(proxy, context, true);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
get(PATTERN_BUCKET, (proxy, context, pathMatcher) -> {
BucketController controller = new BucketController(proxy, context);
return controller::getBucket;
});
get(INVITATION, (proxy, context, pathMatcher) -> {
String invitationId = UrlUtil.decodePath(pathMatcher.group(1));
InvitationController controller = new InvitationController(proxy, context);
return () -> controller.getOrAcceptInvitation(invitationId);
});
get(INVITATIONS, (proxy, context, pathMatcher) -> {
InvitationController controller = new InvitationController(proxy, context);
return controller::getInvitations;
});
get(DEPLOYMENT_LIMITS, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
LimitController controller = new LimitController(proxy, context);
return () -> controller.getLimits(deploymentId);
});
get(PATTERN_CONFIGURATION, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
.map(Deployment::getFeatures)
.map(Features::getConfigurationEndpoint)
.orElse(null);
DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
return () -> controller.handle(deploymentId, getter, false);
});
get(USER_INFO, (proxy, context, pathMatcher) -> new UserInfoController(context));
get(APP_SCHEMAS, (proxy, context, pathMatcher) -> {
ApplicationTypeSchemaController controller = new ApplicationTypeSchemaController(context);
String operation = pathMatcher.group(1);
return switch (operation) {
case "schemas" -> controller::handleListSchemas;
case "meta_schema" -> controller::handleGetMetaSchema;
case "schema" -> controller::handleGetSchema;
default -> null;
};
});
// POST routes
post(PATTERN_POST_DEPLOYMENT, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
String deploymentApi = UrlUtil.decodePath(pathMatcher.group(2));
DeploymentPostController controller = new DeploymentPostController(proxy, context);
return () -> controller.handle(deploymentId, deploymentApi);
});
post(PATTERN_RATE_RESPONSE, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
.map(Deployment::getFeatures)
.map(Features::getRateEndpoint)
.orElse(null);
DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
return () -> controller.handle(deploymentId, getter, false);
});
post(PATTERN_TOKENIZE, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
.map(Deployment::getFeatures)
.map(Features::getTokenizeEndpoint)
.orElse(null);
DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
return () -> controller.handle(deploymentId, getter, true);
});
post(PATTERN_TRUNCATE_PROMPT, (proxy, context, pathMatcher) -> {
String deploymentId = UrlUtil.decodePath(pathMatcher.group(1));
Function<Deployment, String> getter = (model) -> Optional.ofNullable(model)
.map(Deployment::getFeatures)
.map(Features::getTruncatePromptEndpoint)
.orElse(null);
DeploymentFeatureController controller = new DeploymentFeatureController(proxy, context);
return () -> controller.handle(deploymentId, getter, true);
});
post(SHARE_RESOURCE_OPERATIONS, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
ShareController.Operation op = ShareController.Operation.valueOf(operation.toUpperCase());
ShareController controller = new ShareController(proxy, context);
return () -> controller.handle(op);
});
post(PUBLICATIONS, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
PublicationController controller = new PublicationController(proxy, context);
return switch (operation) {
case "list" -> controller::listPublications;
case "get" -> controller::getPublication;
case "create" -> controller::createPublication;
case "delete" -> controller::deletePublication;
case "approve" -> controller::approvePublication;
case "reject" -> controller::rejectPublication;
default -> null;
};
});
post(PUBLICATION_RULES, (proxy, context, pathMatcher) -> {
PublicationController controller = new PublicationController(proxy, context);
return controller::listRules;
});
post(RESOURCE_OPERATIONS, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
ResourceOperationController controller = new ResourceOperationController(proxy, context);
return switch (operation) {
case "move" -> controller::move;
case "subscribe" -> controller::subscribe;
default -> null;
};
});
post(PUBLISHED_RESOURCES, (proxy, context, pathMatcher) -> {
PublicationController controller = new PublicationController(proxy, context);
return controller::listPublishedResources;
});
post(NOTIFICATIONS, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
NotificationController controller = new NotificationController(proxy, context);
return switch (operation) {
case "list" -> controller::listNotifications;
case "delete" -> controller::deleteNotification;
default -> null;
};
});
post(APPLICATIONS, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
ApplicationController controller = new ApplicationController(context);
return switch (operation) {
case "deploy" -> controller::deployApplication;
case "undeploy" -> controller::undeployApplication;
case "logs" -> controller::getApplicationLogs;
default -> null;
};
});
post(CODE_INTERPRETER, (proxy, context, pathMatcher) -> {
String operation = pathMatcher.group(1);
CodeInterpreterController controller = new CodeInterpreterController(context);
return switch (operation) {
case "open_session" -> controller::openSession;
case "close_session" -> controller::closeSession;
case "execute_code" -> controller::executeCode;
case "upload_file" -> controller::uploadFile;
case "download_file" -> controller::downloadFile;
case "list_files" -> controller::listFiles;
case "transfer_input_file" -> controller::transferInputFile;
case "transfer_output_file" -> controller::transferOutputFile;
default -> null;
};
});
// DELETE routes
delete(PATTERN_FILES, (proxy, context, pathMatcher) -> {
ResourceController controller = new ResourceController(proxy, context, false);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
delete(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
ResourceController controller = new ResourceController(proxy, context, false);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
delete(INVITATION, (proxy, context, pathMatcher) -> {
String invitationId = UrlUtil.decodePath(pathMatcher.group(1));
InvitationController controller = new InvitationController(proxy, context);
return () -> controller.deleteInvitation(invitationId);
});
// PUT routes
put(PATTERN_FILES, (proxy, context, pathMatcher) -> {
UploadFileController controller = new UploadFileController(proxy, context);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
put(PATTERN_RESOURCE, (proxy, context, pathMatcher) -> {
ResourceController controller = new ResourceController(proxy, context, false);
String path = context.getRequest().path();
return () -> controller.handle(resourcePath(path));
});
}