123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439440441442443444445446447448449450451452453454455456457458459460461462463464465466467468469470471472473474475476477478479480481482483484485486487488489490491492493494495496497498499500501502503504505506507508509510511512513514515516517518519520521522523524525526527528529530531532533534535536537538539540541542543544545546547548549550551552553554555556557558559560561562563564565566567568569570571572573574575576577578579580581582583584585586587588589590591592593594595596597598599600601602603604605606607608609610611612613614615616617618619620621622623624625626627628629630631632633634635636637638639640641642643644645646647648649650651652653654655656657658659660661662663664665666667668669670671672673674675676677678679680681682683684685686687688689690691692693694695696697698699700701702703704705706707708709710711712713714715716717718719720721722723724725726727728729730731732733734735736737738739740741742743744745746747748749750751752753754755756757758759760761762763764765766767768769770771772773774775776777778779780781782783784785786787788789790791792793794795796797798799800801802803804805806807808809810811812813814815816817818819820821822823824825826827828829830831832833834835836837838839840841842843844845846847848849850851852853854855856857858859860861862863864865866867868869870871872873874875876877878879880881882883884885886887888889890891892893894895896897898899900901902903904905906907908909910911912913914915916917918919920921922923924925926927928929930931932933934935936937938939940941942943944945946947948949950951952953954955956957958959960961962963964965966967968969970971972973974975976977978979980981982983984985986987988989990991992993994995996997998999100010011002100310041005100610071008100910101011101210131014101510161017101810191020102110221023102410251026102710281029103010311032103310341035103610371038103910401041104210431044104510461047104810491050105110521053105410551056105710581059106010611062106310641065106610671068106910701071107210731074107510761077107810791080108110821083108410851086108710881089109010911092109310941095109610971098109911001101110211031104110511061107110811091110111111121113111411151116111711181119112011211122112311241125112611271128112911301131113211331134113511361137113811391140 |
- //package com.backendsys.SDK.Meitu;
- //
- //import java.io.File;
- //import java.io.FileInputStream;
- //import java.io.InputStream;
- //import java.net.URI;
- //import java.net.URISyntaxException;
- //import java.net.URL;
- //import java.util.ArrayList;
- //import java.util.HashMap;
- //import java.util.Iterator;
- //import java.util.List;
- //import java.util.Map;
- //import java.util.concurrent.Executors;
- //import java.util.concurrent.ScheduledExecutorService;
- //import java.util.concurrent.ThreadFactory;
- //import java.util.concurrent.TimeUnit;
- //import java.util.Map.Entry;
- //
- //import com.backendsys.SDK.Meitu.model.BizConfigResponseDTO;
- //import com.backendsys.SDK.Meitu.model.InferenceParamsDTO;
- //import com.backendsys.SDK.Meitu.model.MtlabParamsDTO;
- //import com.backendsys.SDK.Meitu.model.SdkRequestDTO;
- //import com.backendsys.SDK.Meitu.model.SdkResponseDTO;
- //import com.backendsys.SDK.Meitu.model.BizConfigResponseDTO.BizData;
- //import com.backendsys.SDK.Meitu.model.SdkRequestDTO.InitImage;
- //import com.obs.services.ObsClient;
- //import com.obs.services.ObsConfiguration;
- //import com.obs.services.exception.ObsException;
- //import com.obs.services.model.PutObjectResult;
- //
- //import lombok.Data;
- //import lombok.Getter;
- //import lombok.Setter;
- //import lombok.extern.slf4j.Slf4j;
- //import shade.fasterxml.jackson.annotation.JsonProperty;
- //import shade.fasterxml.jackson.databind.DeserializationFeature;
- //import shade.fasterxml.jackson.databind.JsonNode;
- //import shade.fasterxml.jackson.databind.ObjectMapper;
- //import shade.fasterxml.jackson.databind.node.ArrayNode;
- //import shade.okhttp3.HttpUrl;
- //import shade.okhttp3.MediaType;
- //import shade.okhttp3.OkHttpClient;
- //import shade.okhttp3.Request;
- //import shade.okhttp3.RequestBody;
- //import shade.okhttp3.Response;
- //
- ///**
- // * ai 访问客户端
- // */
- //@Slf4j
- //public class AiClient {
- // public static final String default_strategy_type = "mtai";
- // public static final String default_strategy_host = "https://strategy.app.meitudata.com";
- //
- // public static final int default_obs_socket_timeout = 30; // 单位秒
- // public static final int default_obs_connect_timeout = 10; // 单位秒
- //
- // public static final int default_api_socket_timeout = 45; // 单位秒 sync_timeout默认30秒,请求超时需要高于这个数
- // public static final int default_api_connect_timeout = 5; // 单位秒
- //
- // public static final int default_status_socket_timeout = 2; // 单位秒
- // public static final int default_status_connect_timeout = 2; // 单位秒
- //
- // public static final int status_code_suc = 10; // 成功
- // public static final int status_code_timeout = 9; // 同步请求超时
- // public static final int status_code_fail = 2; // 失败
- //
- // public static final int get_strategy_retry_times = 3; // 获取策略重试次数
- // public static final int get_strategy_retry_duration = 1000; // 重试间隔时间
- // public static final int get_strategy_connect_timeout = 10; // 重试间隔时间
- // public static final int get_strategy_socket_timeout = 30; // 重试间隔时间
- //
- // public static final int get_biz_config_connect_timeout = 10; // 重试间隔时间
- // public static final int get_biz_config_socket_timeout = 30; // 重试间隔时间
- // public static final String process_type_mtlab = "mtlab";
- // public static final String process_type_inference = "inference";
- //
- // private String openapiHost = null;
- //
- // @Setter(lombok.AccessLevel.PROTECTED)
- // private String ak;
- // @Setter(lombok.AccessLevel.PROTECTED)
- // private String sk;
- // @Setter(lombok.AccessLevel.PROTECTED)
- // private String types;
- // @Setter(lombok.AccessLevel.PROTECTED)
- // private String strategyHost;
- //
- // @Getter(lombok.AccessLevel.PROTECTED)
- // private Map<String, List<ObsClientAware>> obsAwareMap;
- // @Getter(lombok.AccessLevel.PROTECTED)
- // private Map<String, List<ApiAware>> apiAwareMap;
- // private OkHttpClient strategyOkHttpClient = new OkHttpClient.Builder()
- // .connectTimeout(get_strategy_connect_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .readTimeout(get_strategy_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .writeTimeout(get_strategy_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .build();
- //
- // private OkHttpClient bziConfigOkHttpClient = new OkHttpClient.Builder()
- // .connectTimeout(get_biz_config_connect_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .readTimeout(get_strategy_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .writeTimeout(get_biz_config_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .build();
- //
- // ScheduledExecutorService scheduledExecutorService = Executors.newScheduledThreadPool(1, new ThreadFactory() {
- // private int count = 0;
- //
- // @Override
- // public Thread newThread(Runnable r) {
- // count++;
- // return new Thread(r, "refresh_strategy-" + count);
- // }
- // });
- //
- // protected AiClient() {
- //
- // }
- //
- // /**
- // *
- // * @param accessKey
- // * @param secret
- // * @param "types" 需要获取处理token类型(效果类型,创意玩法/文生图/图生图等),支持多个名称,例:type=p1,p2
- // */
- // public AiClient(String accessKey, String secret) {
- // this(accessKey, secret, default_strategy_type, default_strategy_host);
- // }
- //
- // /**
- // *
- // * @param ak
- // * @param sk
- // * @param types 需要获取处理token类型(效果类型,创意玩法/文生图/图生图等),支持多个名称,例:type=p1,p2
- // * @param strategyHost 策略服务地址
- // */
- // public AiClient(String ak, String sk, String types, String strategyHost) {
- // this.ak = ak;
- // this.sk = sk;
- // this.types = types;
- // this.strategyHost = strategyHost;
- // init();
- // }
- //
- // protected SdkResponseDTO.Result push(SdkRequestDTO sdkRequestDTO, String type, String processType) {
- // log.info("push start, sdkRequestDTO:{}", sdkRequestDTO);
- // if (sdkRequestDTO.getTask() == null || sdkRequestDTO.getTask().length() == 0) {
- // throw new AIException(AIException.code_params_err, "task is null");
- // }
- // if (sdkRequestDTO.getTaskType() == null || sdkRequestDTO.getTaskType().length() == 0) {
- // throw new AIException(AIException.code_params_err, "taskType is null");
- // }
- //
- // List<ApiAware> apiAwares = apiAwareMap.get(type);
- // if (apiAwares == null) {
- // throw new AIException(AIException.code_params_err,
- // String.format("type:%s is not configured", type));
- // }
- // SdkResponseDTO.Result result = retryPush(sdkRequestDTO, apiAwares, processType);
- //
- // return result;
- // }
- //
- // /**
- // * 美图设计室任务提交接口
- // *
- // * @param mtlabParamsDTO
- // * @return
- // */
- // public SdkResponseDTO.Result pushMtlabTask(MtlabParamsDTO mtlabParamsDTO) {
- // mtlabParamsDTO.setTaskType("mtlab");
- // for (InitImage initImage : mtlabParamsDTO.getInitImages()) {
- // String url = initImage.getUrl();
- // url = upload(default_strategy_type, url);
- // initImage.setUrl(url);
- // }
- // return push(mtlabParamsDTO, default_strategy_type, process_type_mtlab);
- // }
- //
- // /**
- // * 获取业务配置,业务配置是AI服务在调用推理时,用来约定用户能使用的模型、风格与图像尺寸的配置。
- // */
- // public BizData getBusinessConfig() {
- // String url = String.format("%s/whee/business/config.json", openapiHost);
- // Map<String, String> header = new HashMap<>();
- // Map<String, String> params = new HashMap<>();
- //
- // Request reuqest = buildGetRequest(url, params, header);
- //
- // Response response = null;
- // try {
- // response = bziConfigOkHttpClient.newCall(reuqest).execute();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_biz_config_net_err, "Request exception", ex);
- // }
- // try {
- // String body = "";
- // try {
- // body = response.body().string();
- // } catch (Exception ex) {
- // // 忽略异常
- // }
- //
- // // body反序列到BizConfigResponseDTO
- // ObjectMapper objectMapper = new ObjectMapper();
- // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- // BizConfigResponseDTO bizConfigResponseDTO = null;
- // try {
- // bizConfigResponseDTO = objectMapper.readValue(body, BizConfigResponseDTO.class);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_biz_config_err, "Deserialization Exception", ex);
- // }
- //
- // if (bizConfigResponseDTO.getCode() != 0) {
- // throw new AIException(AIException.code_cloud_biz_config_err,
- // String.format("Request exception:httpCode=%s,messge=%s", response.code(), response.message()));
- // }
- // return bizConfigResponseDTO.getData();
- // } finally {
- // if (response != null) {
- // response.close();
- // }
- // }
- //
- // }
- //
- // /**
- // * 执行推理,推理接口包含文生图与图生图
- // *
- // * @param inferenceParamsDTO
- // * @return
- // */
- // public SdkResponseDTO.Result inference(InferenceParamsDTO inferenceParamsDTO) {
- // ObjectMapper objectMapper = new ObjectMapper();
- // if (inferenceParamsDTO.getModel() == null || inferenceParamsDTO.getModel().length() == 0) {
- // throw new AIException(AIException.code_params_err, "model is null");
- // }
- // if (inferenceParamsDTO.getPrompt() == null || inferenceParamsDTO.getPrompt().length() == 0) {
- // throw new AIException(AIException.code_params_err, "prompt is null");
- // }
- // if (inferenceParamsDTO.getModelHash() == null || inferenceParamsDTO.getModelHash().length() == 0) {
- // inferenceParamsDTO.setModelHash("XZKFKEVaKRPSDC5PHl2Fi0xBbYts25xnfA6hsfEp");
- // }
- // if (inferenceParamsDTO.getModelPlatform() == null || inferenceParamsDTO.getModelPlatform().length() == 0) {
- // throw new AIException(AIException.code_params_err, "model platform is null");
- // }
- //
- // log.info("inference start, inferenceParamsDTO:{}", jsonToString(inferenceParamsDTO, objectMapper));
- // long start = System.currentTimeMillis();
- // SdkResponseDTO.Result result = doInference(inferenceParamsDTO, default_strategy_type);
- //
- // log.info("inference end, result:{} latency:{}", jsonToString(result, objectMapper),
- // System.currentTimeMillis() - start);
- // return result;
- //
- // }
- //
- // /**
- // * 推理接口,如果initImages有传入为图生图,没有传入为文生图
- // *
- // * @param inferenceParamsDTO
- // * @param type
- // */
- // private SdkResponseDTO.Result doInference(InferenceParamsDTO inferenceParamsDTO, String type) {
- // List<InitImage> initImageObjectList = new ArrayList<>();
- // String[] initImage = inferenceParamsDTO.getInitImages();
- // String task;
- // if (initImage != null && initImage.length > 0) {
- // String[] newInitImage = new String[initImage.length];
- // for (int i = 0; i < initImage.length; i++) {
- // String url = upload(type, initImage[i]);
- // newInitImage[i] = url;
- // InitImage image = new InitImage();
- // image.setUrl(url);
- // initImageObjectList.add(image);
- // }
- // task = "img2img";
- // inferenceParamsDTO.setInitImages(newInitImage);
- // } else {
- // task = "txt2img";
- // }
- //
- // SdkRequestDTO request = new SdkRequestDTO();
- // request.setInitImages(initImageObjectList);
- // request.setTaskType("inference");
- // request.setTask(task);
- // request.setParams(jsonToString(inferenceParamsDTO, null));
- // SdkResponseDTO.Result result = push(request, type, process_type_inference);
- // return result;
- //
- // }
- //
- // /**
- // * 重试的机制放在AiClientRefreshStrategyTask
- // */
- // private void init() {
- // String configStr = getStrategy();
- // log.info("Get Strategy Success, config:{}", configStr);
- // ConfigAware configAware = parseTockenConfig(configStr);
- // initObsClient(configAware.getObsConfigMap());
- // initApiConfig(configAware.getApiConfigMap());
- // int minTTL = configAware.getMinTTL();
- // if (minTTL <= 0) {
- // minTTL = 3600;
- // }
- // long delay = minTTL / 2;
- // log.info("Add refresh strategy task, delay={} ttl={}", delay, minTTL);
- // scheduledExecutorService.schedule(new AiClientRefreshStrategyTask(this), delay, TimeUnit.SECONDS);
- // }
- //
- // protected Request buildGetRequest(String url, Map<String, String> params, Map<String, String> headers) {
- // HttpUrl.Builder httpUrlBuild = HttpUrl
- // .parse(url)
- // .newBuilder();
- //
- // for (Entry<String, String> entry : params.entrySet()) {
- // httpUrlBuild.addQueryParameter(entry.getKey(), entry.getValue());
- // }
- //
- // HttpUrl httpUrl = httpUrlBuild.build();
- //
- // Signer signer = new Signer(ak, sk);
- // Map<String, String> sigHeader = null;
- //
- // try {
- // sigHeader = signer.sign(httpUrl.toString(), "GET", headers, "");
- // } catch (URISyntaxException ex) {
- // throw new AIException(AIException.code_sig_err, "Sign exception", ex);
- // }
- //
- // log.info("get request, url={} header={}", httpUrl.toString(), jsonToString(sigHeader, null));
- //
- // Request.Builder request = new Request.Builder()
- // .url(httpUrlBuild.build()).get();
- //
- // sigHeader.forEach((key, value) -> {
- // request.addHeader(key, value);
- // });
- // return request.build();
- // }
- //
- // /**
- // * 关闭客户端
- // */
- // public void close() {
- // log.info("close ai client");
- //
- // scheduledExecutorService.shutdownNow();
- //
- // obsAwareMap.forEach((s, clientList) -> {
- // for (ObsClientAware obsClientAware : clientList) {
- // try {
- // obsClientAware.getObsClient().close();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_obs_close_err, "Close obs client exception", ex);
- // }
- //
- // }
- // });
- //
- // bziConfigOkHttpClient.dispatcher().executorService().shutdownNow();
- //
- // strategyOkHttpClient.dispatcher().executorService().shutdownNow();
- //
- // apiAwareMap.forEach((k, clientList) -> {
- // for (ApiAware apiAware : clientList) {
- // if (!apiAware.getPushClient().dispatcher().executorService().isShutdown()) {
- // apiAware.getPushClient().dispatcher().executorService().shutdownNow();
- // }
- // if (!apiAware.getStatusClient().dispatcher().executorService().isShutdown()) {
- // apiAware.getStatusClient().dispatcher().executorService().shutdownNow();
- // }
- // }
- // });
- // }
- //
- // /**
- // * 请求策略服务获取策略配置
- // *
- // * @return 策略配置
- // */
- // protected String getStrategy() {
- // long start = System.currentTimeMillis();
- // String url = String.format("%s/ai/token_policy", strategyHost);
- // Map<String, String> params = new HashMap<>();
- // params.put("type", types);
- // URI uri = URI.create(url);
- // Map<String, String> headMap = new HashMap<>();
- //
- // Request request = buildGetRequest(url, params, headMap);
- //
- // log.info("get strategy request, url={}", request.url().toString());
- //
- // Response response = null;
- // try {
- // response = strategyOkHttpClient.newCall(request).execute();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_strategy_net_error, "Request exception", ex);
- // }
- // try {
- //
- // String body = "";
- // try {
- // body = response.body().string();
- // } catch (Exception ex) {
- // // 忽略异常
- // }
- //
- // log.info("get strategy response, latency={} url={} httpcode={} body={}", System.currentTimeMillis() - start,
- // url, response.code(), body);
- //
- // if (!response.isSuccessful()) {
- // throw new AIException(AIException.code_strategy_err,
- // String.format("Request exception:httpCode=%s,messge=%s", response.code(), response.message()));
- // }
- // return body;
- //
- // } finally {
- // response.close();
- // }
- // }
- //
- // /**
- // * 解析返回后端返回的参数
- // *
- // * @param json
- // * @return
- // */
- // protected ConfigAware parseTockenConfig(String jsonString) {
- // ConfigAware configAware = new ConfigAware();
- // ObjectMapper objectMapper = new ObjectMapper();
- // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- // JsonNode jsonNode = null;
- // try {
- // jsonNode = objectMapper.readTree(jsonString);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_strategy_err, "反序列化异常", ex);
- // }
- //
- // int code = jsonNode.get("code").asInt();
- //
- // if (code != 0) {
- // int errorCode = jsonNode.get("error_code").asInt();
- // String message = jsonNode.get("message").asText();
- // throw new AIException(AIException.code_strategy_err, String.format("%s:%s", errorCode, message));
- // }
- // JsonNode dataNode = jsonNode.get("data");
- // if (dataNode == null || dataNode.isNull()) {
- // throw new AIException(AIException.code_strategy_err, "data is null");
- // }
- // Map<String, List<ObsConfig>> obsConfigMap = new HashMap<>();
- // Map<String, List<APIConfig>> apiConfigMap = new HashMap<>();
- // configAware.setApiConfigMap(apiConfigMap);
- // configAware.setObsConfigMap(obsConfigMap);
- // Iterator<Entry<String, JsonNode>> fields = dataNode.fields();
- // int minTTL = Integer.MAX_VALUE;
- // while (fields.hasNext()) {
- // Entry<String, JsonNode> field = fields.next();
- // String bizName = field.getKey();
- // JsonNode bizConfig = field.getValue();
- // List<ObsConfig> obsConfigs = obsConfigMap.get(bizName);
- // if (obsConfigs == null) {
- // obsConfigs = new ArrayList<>();
- // obsConfigMap.put(bizName, obsConfigs);
- // }
- //
- // List<APIConfig> apiConfigs = apiConfigMap.get(bizName);
- // if (apiConfigs == null) {
- // apiConfigs = new ArrayList<>();
- // apiConfigMap.put(bizName, apiConfigs);
- // }
- //
- // int ttl = parseObsConfig(objectMapper, bizConfig.get("upload"), obsConfigs);
- // if (minTTL > ttl) {
- // minTTL = ttl;
- // }
- // parseApiConfig(objectMapper, bizConfig.get("api"), apiConfigs);
- // }
- //
- // configAware.setMinTTL(minTTL);
- //
- // return configAware;
- // }
- //
- // private void parseApiConfig(ObjectMapper objectMapper, JsonNode apiConfigJSON, List<APIConfig> apiConfigs) {
- // List<JsonNode> configJSONArr = parseConfigJsonNodeArr(apiConfigJSON);
- // for (JsonNode curConfigJSON : configJSONArr) {
- // APIConfig apiConfig = null;
- // try {
- // apiConfig = objectMapper.treeToValue(curConfigJSON, APIConfig.class);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_strategy_err, "Deserialization Exception", ex);
- // }
- // if (openapiHost == null && apiConfig.getUrl() != null) {
- // openapiHost = apiConfig.getUrl();
- // }
- //
- // apiConfigs.add(apiConfig);
- // }
- // }
- //
- // /**
- // *
- // * @param objectMapper
- // * @param obsConfigJSON
- // * @param obsConfigs
- // * @return 最小的ttl
- // * @throws Exception
- // */
- // private int parseObsConfig(ObjectMapper objectMapper, JsonNode obsConfigJSON, List<ObsConfig> obsConfigs) {
- // int minTTL = Integer.MAX_VALUE;
- // List<JsonNode> configJSONArr = parseConfigJsonNodeArr(obsConfigJSON);
- // for (JsonNode curConfigJSON : configJSONArr) {
- // ObsConfig apiConfig = null;
- // try {
- // apiConfig = objectMapper.treeToValue(curConfigJSON, ObsConfig.class);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_strategy_err, "Deserialization Exception", ex);
- // }
- // if (minTTL > apiConfig.getTtl()) {
- // minTTL = apiConfig.getTtl();
- // }
- // obsConfigs.add(apiConfig);
- // }
- // return minTTL;
- // }
- //
- // private List<JsonNode> parseConfigJsonNodeArr(JsonNode configJSON) {
- // List<JsonNode> resultList = new ArrayList<>();
- // ArrayNode orderJSONArr = configJSON.withArray("order");
- // for (JsonNode jsonNode : orderJSONArr) {
- // String order = jsonNode.asText();
- // JsonNode curConfigJSON = configJSON.get(order);
- // if (curConfigJSON == null || curConfigJSON.isNull()) {
- // continue;
- // }
- // resultList.add(curConfigJSON);
- // }
- //
- // return resultList;
- //
- // }
- //
- // /**
- // * 初始化api访问配置
- // */
- // protected void initApiConfig(Map<String, List<APIConfig>> apiConfigMap) {
- // // 为了允许多个type有多个配置
- // Map<String, List<ApiAware>> apiAwareMap = new HashMap<>();
- // // 当前status是一个不可变更的值
- // OkHttpClient statusClient = new OkHttpClient.Builder()
- // .connectTimeout(default_status_connect_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .writeTimeout(default_status_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .readTimeout(default_status_socket_timeout, java.util.concurrent.TimeUnit.SECONDS)
- // .build();
- //
- // for (Entry<String, List<APIConfig>> entry : apiConfigMap.entrySet()) {
- // List<APIConfig> apiConfigs = entry.getValue();
- // String type = entry.getKey();
- // List<ApiAware> apiAwaress = apiAwareMap.get(type);
- // if (apiAwaress == null) {
- // apiAwaress = new ArrayList<>();
- // apiAwareMap.put(type, apiAwaress);
- // }
- // for (APIConfig apiConfig : apiConfigs) {
- // OkHttpClient httpClient = new OkHttpClient.Builder()
- // .connectTimeout(apiConfig.getConnectTimeout() <= 0 ? default_api_connect_timeout
- // : apiConfig.getConnectTimeout(), java.util.concurrent.TimeUnit.SECONDS)
- // .readTimeout(apiConfig.getSocketTimeout() <= 0 ? default_api_socket_timeout
- // : apiConfig.getSocketTimeout(), java.util.concurrent.TimeUnit.SECONDS)
- // .build();
- //
- // apiAwaress.add(new ApiAware(httpClient, statusClient, apiConfig, apiConfig.getUrl()));
- // if (apiConfig.getBackupUrl() != null && apiConfig.getBackupUrl().length() > 0) {
- // apiAwaress.add(new ApiAware(httpClient, statusClient, apiConfig, apiConfig.getBackupUrl()));
- // }
- // }
- // }
- // this.apiAwareMap = apiAwareMap;
- //
- // }
- //
- // /**
- // * 根据下发的obsConfig初始化obs客户端
- // */
- // protected void initObsClient(Map<String, List<ObsConfig>> obsConfigMap) {
- // Map<String, List<ObsClientAware>> obsClientAwareMap = new HashMap<>();
- // for (Entry<String, List<ObsConfig>> entry : obsConfigMap.entrySet()) {
- // List<ObsConfig> obsConfigs = entry.getValue();
- // String type = entry.getKey();
- // List<ObsClientAware> obsClientAwares = obsClientAwareMap.get(type);
- // if (obsClientAwares == null) {
- // obsClientAwares = new ArrayList<>();
- // obsClientAwareMap.put(type, obsClientAwares);
- // }
- // for (ObsConfig obsConfig : obsConfigs) {
- //
- // ObsConfiguration config = buildObjConfiguration(obsConfig, obsConfig.getUrl());
- // ObsClient obsClient = new ObsClient(obsConfig.getCredentials().getAccessKey(),
- // obsConfig.getCredentials().getSecretKey(),
- // obsConfig.getCredentials().getSessionToken(),
- // config);
- // obsClientAwares.add(new ObsClientAware(obsClient, obsConfig));
- //
- // if (obsConfig.getBackupUrl() != null && obsConfig.getBackupUrl().length() > 0) {
- // ObsConfiguration backupConfig = buildObjConfiguration(obsConfig, obsConfig.getBackupUrl());
- // ObsClient bakcupClient = new ObsClient(obsConfig.getCredentials().getAccessKey(),
- // obsConfig.getCredentials().getSecretKey(),
- // obsConfig.getCredentials().getSessionToken(),
- // backupConfig);
- // obsClientAwares.add(new ObsClientAware(bakcupClient, obsConfig));
- // }
- //
- // }
- // }
- // this.obsAwareMap = obsClientAwareMap;
- // }
- //
- // private ObsConfiguration buildObjConfiguration(ObsConfig obsConfig, String url) {
- // ObsConfiguration config = new ObsConfiguration();
- // if (obsConfig.getSocketTimeout() <= 0) {
- // config.setSocketTimeout(default_obs_socket_timeout * 1000);
- // } else {
- // config.setSocketTimeout(obsConfig.getSocketTimeout() * 1000);
- // }
- //
- // if (obsConfig.getConnectTimeout() <= 0) {
- // config.setConnectionTimeout(default_obs_connect_timeout * 1000);
- // } else {
- // config.setConnectionTimeout(obsConfig.getConnectTimeout() * 1000);
- // }
- //
- // config.setEndPoint(url);
- // return config;
- // }
- //
- // /**
- // *
- // * @throws Exception
- // */
- // protected String upload(String type, String uri) {
- // InputStream inputStream = null;
- // // 允许上传http的资源链接,因为需要从网络现在后上传到obs,需要控制资源大小在10M以内
- // if (uri.startsWith("https://") || uri.startsWith("http://")) {
- // try {
- // URL url = new URL(uri);
- // inputStream = url.openStream();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_params_resource,
- // String.format("Resource access errorm, file:%s", uri), ex);
- // }
- // } else {
- // File file = new File(uri);
- // if (!file.exists()) {
- // throw new AIException(AIException.code_params_resource_notfound,
- // (String.format("file:%s is not exists", uri)));
- // }
- // try {
- // inputStream = new FileInputStream(file);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_params_resource,
- // String.format("Resource access errorm, file:%s", uri), ex);
- // }
- // }
- //
- // List<ObsClientAware> obsClientAwares = obsAwareMap.get(type);
- // if (obsClientAwares == null) {
- // throw new AIException(AIException.code_params_err, String.format("type:%s is not configured", type));
- // }
- //
- // Exception ex = null;
- //
- // for (ObsClientAware obsClientAware : obsClientAwares) {
- // try {
- // log.info("upload start, type={} uri={} key={} bucket={} client={}", type, uri,
- // obsClientAware.getObsConfig().getKey(),
- // obsClientAware.getObsConfig().getBucket(),
- // obsClientAware.getObsClient().toString());
- //
- // PutObjectResult result = obsClientAware.getObsClient()
- // .putObject(obsClientAware.getObsConfig().getBucket(),
- // obsClientAware.getObsConfig().getKey(),
- // inputStream);
- // String objUrl = result.getObjectUrl();
- // return objUrl;
- // } catch (ObsException obsException) {
- // log.warn(String.format("Upload OBS exception,code:%s,message:%s", obsException.getResponseCode(),
- // obsException.getLocalizedMessage()), obsException);
- // ex = obsException;
- // }
- // }
- // throw new AIException(AIException.code_upload_err, "Upload OBS exception", ex);
- // }
- //
- // /**
- // * 重试创建AI处理任务
- // *
- // * @param sdkRequestDTO
- // * @return
- // * @throws Exception
- // */
- // private SdkResponseDTO.Result retryPush(SdkRequestDTO sdkRequestDTO, List<ApiAware> apiAwares, String processType) {
- // AIException finalEx = null;
- // for (ApiAware apiAware : apiAwares) {
- // APIConfig apConfig = apiAware.getApiConfig();
- // for (int i = 0; i < apConfig.getRetry().times; i++) {
- // sleepRetry(i, apConfig.getRetry());
- // SdkResponseDTO response = null;
- // try {
- // response = doPush(sdkRequestDTO, apiAware, processType);
- // } catch (AIException ex) {
- // log.info("push retry, times=" + i, ex);
- // // 权限问题直接返回
- // if (ex.getErrorCode() == AIException.code_cloud_process_unauthorized
- // || ex.getErrorCode() == AIException.code_params_err) {
- // throw ex;
- // }
- // finalEx = ex;
- // continue;
- // } catch (Exception ex) {
- // log.info("push retry, times=" + i, ex);
- // finalEx = new AIException(AIException.code_cloud_process_err, "Request exception", ex);
- // continue;
- // }
- // if (response == null) {
- // continue;
- // }
- //
- // // 使用status异步获取结果
- // if (response.getCode() == 0 && response.getData().getStatus() == status_code_suc) {
- // return response.getData().getResult();
- // }
- // if (response.getCode() == 0 && response.getData().getStatus() == status_code_timeout) {
- // if (response.getData() == null || response.getData().getResult() == null
- // || response.getData().getResult().getId() == null) {
- // throw new AIException(AIException.code_cloud_process_err,
- // "Task ID not found in backend request");
- // }
- // return getResultStatus(sdkRequestDTO, response.getData().getResult().getId(), apiAware);
- // } else {
- // // 后端出现异常,不在进行循环
- // throw new AIException(response.getCode(),
- // response.getMessage());
- // }
- // }
- // }
- // throw finalEx;
- // }
- //
- // /**
- // * 重新获取状态
- // *
- // * @param taskId
- // * @return
- // * @throws Exception
- // */
- // private SdkResponseDTO.Result getResultStatus(SdkRequestDTO requestDTO, String taskId, ApiAware apiAware) {
- // AIException finalEx = null;
- // StatusQuery statusQuery = apiAware.getApiConfig().getStatusQuery();
- // String durations = statusQuery.durations;
- // if (durations == null || durations.length() == 0) {
- // durations = String.valueOf(statusQuery.defaultDuration);
- // }
- //
- // String[] durationArr = durations.split(",");
- // for (String duration : durationArr) {
- // try {
- // Thread.sleep(Integer.parseInt(duration));
- // } catch (InterruptedException e) {
- // log.warn("sleep异常", e);
- // }
- // SdkResponseDTO responseDTO = null;
- // try {
- // responseDTO = doResultStatus(requestDTO.getContext(), taskId, apiAware);
- // } catch (AIException ex) {
- // finalEx = ex;
- // continue;
- // } catch (Exception ex) {
- // finalEx = new AIException(AIException.code_cloud_get_status_err, "Get status exception", ex);
- // continue;
- //
- // }
- //
- // if (responseDTO == null) {
- // continue;
- // }
- //
- // if (responseDTO.getCode() == 0 && responseDTO.getData().getStatus() == status_code_suc) {
- // // 使用status异步获取结果
- // return responseDTO.getData().getResult();
- // } else if (responseDTO.getCode() == 0 && responseDTO.getData().getStatus() == status_code_fail) {
- // // 后端出现异常,不在进行循环
- // throw new AIException(responseDTO.getCode(),
- // responseDTO.getMessage());
- // } else if (responseDTO.getCode() != 0) {
- // throw new AIException(responseDTO.getCode(),
- // responseDTO.getMessage());
- // }
- //
- // }
- //
- // if (finalEx != null) {
- // throw finalEx;
- // } else {
- // throw new AIException(AIException.code_cloud_process_timeout, "Process timeout");
- // }
- // }
- //
- // /**
- // * 获取
- // *
- // * @param requestDTO
- // * @param taskId
- // * @param apiAware
- // * @return
- // */
- // private SdkResponseDTO doResultStatus(String contextParam, String taskId, ApiAware apiAware) {
- // long start = System.currentTimeMillis();
- // ObjectMapper objectMapper = new ObjectMapper();
- // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- // Map<String, String> headers = new HashMap<>();
- // Map<String, String> params = new HashMap<>();
- // params.put("task_id", taskId);
- // if (contextParam != null && contextParam.length() > 0) {
- // params.put("context", contextParam);
- // }
- //
- // Request request = buildGetRequest(apiAware.getStatusUrl(), params, headers);
- //
- // Response response = null;
- // try {
- // response = apiAware.getPushClient().newCall(request).execute();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_process_net_err, "Request exception", ex);
- // }
- //
- // try {
- // String body = "";
- // try {
- // body = response.body().string();
- // } catch (Exception ex) {
- // // 忽略异常
- // }
- //
- // log.info("get status response, latency={} url={} httpcode={} body={}", System.currentTimeMillis() - start,
- // apiAware.getPushUrl(), response.code(), body);
- //
- // if (!response.isSuccessful()) {
- // throw new AIException(AIException.code_cloud_process_err,
- // String.format("Request exception:httpCode:", response.code()));
- // }
- //
- // try {
- // SdkResponseDTO responseDTO = objectMapper.readValue(body, SdkResponseDTO.class);
- // return responseDTO;
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_process_err, "Result deserialization exception", ex);
- // }
- // } finally {
- // response.close();
- // }
- // }
- //
- // private void sleepRetry(int index, RetryConfig retryConfig) {
- // if (index == 0) {
- // return;
- // }
- // try {
- // Thread.sleep(retryConfig.duration);
- // } catch (InterruptedException e) {
- // log.warn("sleep异常", e);
- // }
- // }
- //
- // /**
- // * 提交ai 任务
- // *
- // * @param sdkRequestDTO
- // * @return
- // */
- // protected SdkResponseDTO doPush(SdkRequestDTO sdkRequestDTO, ApiAware apiAware, String processType) {
- // String url = apiAware.getPushUrl();
- // if (process_type_inference.equals(processType)) {
- // url = apiAware.getInferenceUrl();
- // }
- // long start = System.currentTimeMillis();
- // String json = null;
- // ObjectMapper objectMapper = new ObjectMapper();
- // objectMapper.configure(DeserializationFeature.FAIL_ON_UNKNOWN_PROPERTIES, false);
- // try {
- // json = objectMapper.writeValueAsString(sdkRequestDTO);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_serialization_err, "Json exception", ex);
- // }
- // URI uri = URI.create(url);
- // String host = uri.getHost();
- // Map<String, String> headers = new HashMap<>();
- // headers.put(Signer.HeaderHost, host);
- //
- // Signer signer = new Signer(ak, sk);
- // Map<String, String> sigHeader = null;
- // try {
- // sigHeader = signer.sign(url, "POST", headers, json);
- // } catch (URISyntaxException ex) {
- // throw new AIException(AIException.code_cloud_process_err, "Sign exception", ex);
- // }
- //
- // Request.Builder request = new Request.Builder()
- // .post(RequestBody.create(json, MediaType.parse("application/json")))
- // .url(url);
- //
- // sigHeader.forEach((key, value) -> {
- // if (Signer.HeaderHost.equals(key)) {
- // return;
- // }
- // request.addHeader(key, value);
- // });
- //
- // log.info("push request, url={} body={} header={}", url, json,
- // jsonToString(sigHeader, objectMapper));
- //
- // OkHttpClient okHttpClient = apiAware.getPushClient();
- //
- // /**
- // * 设置同步超时时间
- // */
- // if (sdkRequestDTO.getSyncTimeout() > 0) {
- // OkHttpClient.Builder builder = apiAware.getPushClient().newBuilder();
- // int socketTimeout = sdkRequestDTO.getSyncTimeout() * 2;
- // if (sdkRequestDTO.getSyncTimeout() > 0) {
- // builder.readTimeout(socketTimeout, TimeUnit.SECONDS);
- // builder.writeTimeout(socketTimeout, TimeUnit.SECONDS);
- // }
- // okHttpClient = builder.build();
- // }
- //
- // Response response = null;
- // try {
- // response = okHttpClient.newCall(request.build()).execute();
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_process_net_err, "Request exception", ex);
- // }
- //
- // try {
- // String body = null;
- // try {
- // body = response.body().string();
- // } catch (Exception ex) {
- // // 忽略异常
- // }
- //
- // log.info("push response, latency={} url={} httpcode={} body={}", System.currentTimeMillis() - start,
- // url, response.code(), body);
- //
- // if (!response.isSuccessful()) {
- // if (response.code() == 400) {
- // int code = response.code();
- // String msg = response.message();
- // try {
- // SdkResponseDTO responseDTO = objectMapper.readValue(body, SdkResponseDTO.class);
- // code = responseDTO.getCode();
- // msg = responseDTO.getMessage();
- // } catch (Exception ex) {
- // // 忽略错误,出现错误也是正常情况。
- // }
- // throw new AIException(AIException.code_params_err,
- // String.format("Request exception:code=%s, message=%s", code, msg));
- // } else if (response.code() == 401 || response.code() == 403) {
- // throw new AIException(AIException.code_cloud_process_unauthorized,
- // String.format("Request exception:httpCode=%s, message=%s", response.code(),
- // response.message()));
- // } else {
- // throw new AIException(AIException.code_cloud_process_err,
- // String.format("Request exception:httpCode=%s, message=%s", response.code(),
- // response.message()));
- // }
- //
- // }
- //
- // try {
- // SdkResponseDTO responseDTO = objectMapper.readValue(body, SdkResponseDTO.class);
- // return responseDTO;
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_cloud_process_err, "Result deserialization exception", ex);
- // }
- // } finally {
- // response.close();
- // }
- // }
- //
- // protected String jsonToString(Object obj, ObjectMapper objectMapper) {
- // if (objectMapper == null) {
- // objectMapper = new ObjectMapper();
- // }
- //
- // try {
- // return objectMapper.writeValueAsString(obj);
- // } catch (Exception ex) {
- // throw new AIException(AIException.code_serialization_err, "Json exception", ex);
- // }
- // }
- //
- // @Data
- // protected static class ConfigAware {
- // private Map<String, List<ObsConfig>> obsConfigMap;
- // private Map<String, List<APIConfig>> apiConfigMap;
- // private int minTTL; // token最小存活时间,单位秒。所有obsconfig中ttl最小的
- // }
- //
- // @Data
- // protected static class ObsConfig {
- // @JsonProperty("socket_timeout")
- // private int socketTimeout = default_obs_socket_timeout; // 单位秒
- // @JsonProperty("connect_timeout")
- // private int connectTimeout = default_obs_connect_timeout; // 单位秒
- //
- // private String url;
- //
- // @JsonProperty("backup_url")
- // private String backupUrl;
- //
- // private Credentials credentials;
- //
- // private String key;
- //
- // private String bucket;
- //
- // /**
- // * token存活时间,单位秒
- // */
- // private int ttl;
- // }
- //
- // @Data
- // protected static class Credentials {
- // @JsonProperty("access_key")
- // private String accessKey;
- // @JsonProperty("secret_key")
- // private String secretKey;
- // @JsonProperty("session_token")
- // private String sessionToken;
- // }
- //
- // @Data
- // protected static class ObsClientAware {
- // private ObsClient obsClient;
- // private ObsConfig obsConfig;
- //
- // public ObsClientAware(ObsClient obsClient, ObsConfig obsConfig) {
- // this.obsClient = obsClient;
- // this.obsConfig = obsConfig;
- // }
- // }
- //
- // @Data
- // protected static class APIConfig {
- // private String url;
- // @JsonProperty("backup_url")
- // private String backupUrl;
- // @JsonProperty("push_path")
- // private String pushPath;
- // @JsonProperty("status_path")
- // private String statusPath;
- // private RetryConfig retry;
- // @JsonProperty("connect_timeout")
- // private int connectTimeout = 5; // 单位秒
- // @JsonProperty("socket_timeout")
- // private int socketTimeout = 10; // 单位秒
- // @JsonProperty("status_query")
- // private StatusQuery statusQuery;
- // private String type;
- // }
- //
- // @Data
- // protected static class RetryConfig {
- // private String strategy;
- // private int duration; // 单位毫秒
- // private int times; // 重试次数
- // }
- //
- // @Data
- // protected static class StatusQuery {
- // private String path;
- // private String durations; // "2000,2000,2000,1000,1000,500,500" 点位毫秒
- // @JsonProperty("default")
- // private String defaultDuration;
- //
- // }
- //
- // @Data
- // protected static class ApiAware {
- // private OkHttpClient pushClient;
- // private OkHttpClient statusClient;
- // private APIConfig apiConfig;
- // private String pushUrl;
- // private String statusUrl;
- // private String inferenceUrl;
- //
- // public ApiAware(OkHttpClient pushClient, OkHttpClient statusClient, APIConfig apiConfig, String host) {
- // this.pushClient = pushClient;
- // this.statusClient = statusClient;
- // this.apiConfig = apiConfig;
- // this.pushUrl = host + "/" + apiConfig.pushPath;
- // this.statusUrl = host + "/" + apiConfig.statusPath;
- // this.inferenceUrl = host + "/whee/business/push.json";
- //
- // }
- // }
- //
- // /**
- // * 自动刷新策略任务,如果无法获取策略将进行轮询获取,知道获取到策略为止
- // */
- // private static class AiClientRefreshStrategyTask implements Runnable {
- // private AiClient aiClient;
- //
- // public AiClientRefreshStrategyTask(AiClient aiClient) {
- // this.aiClient = aiClient;
- // }
- //
- // public void run() {
- // log.info("refresh strategy task start");
- // Exception finalEx = null;
- // for (int i = 0; i < get_strategy_retry_times; i++) {
- // try {
- // aiClient.init();
- // return;
- // } catch (Exception ex) {
- // log.info("Retry getting strategy exception", ex);
- // finalEx = ex;
- // continue;
- // }
- // }
- //
- // if (finalEx != null) {
- // log.error("Getting strategy exception", finalEx);
- // }
- //
- // }
- // }
- //}
|