| | |
| | | import java.io.ByteArrayOutputStream;
|
| | | import java.io.File;
|
| | | import java.io.InputStream;
|
| | | import java.util.ArrayList;
|
| | | import java.util.Date;
|
| | | import java.util.HashSet;
|
| | | import java.util.List;
|
| | | import java.util.Map;
|
| | | import java.util.*;
|
| | | import java.util.Map.Entry;
|
| | | import java.util.Set;
|
| | | import javax.servlet.http.HttpServletRequest;
|
| | | import javax.servlet.http.HttpServletResponse;
|
| | |
|
| | | import com.google.gson.Gson;
|
| | | import org.springframework.web.bind.annotation.RequestParam;
|
| | | import org.springframework.web.multipart.MultipartFile;
|
| | | import org.springframework.web.servlet.ModelAndView;
|
| | |
| | | {
|
| | | for(MultipartFile file : files)
|
| | | {
|
| | | String fileId = SMTStatic.newUUID();
|
| | | String fileText="";
|
| | | String fileSuffix = (String) SMTAIServerApp.getApp().getGlobalConfig("file_suffix", false);
|
| | | String fileName = new File(file.getOriginalFilename()).getName();
|
| | | byte[] fileData = readAttachFile(file);
|
| | | String fileText = new String(fileData, "UTF-8");
|
| | | if (fileSuffix.contains(fileName.substring(fileName.lastIndexOf(".") + 1))) {
|
| | | fileText = SMTAIServerApp.fileTranslTxt(file);
|
| | | }
|
| | | String fileId = SMTStatic.newUUID();
|
| | | db.executeSQL(
|
| | | " INSERT INTO chat_history_attach(attach_id, attach_type, attach_title, attach_bytes)"
|
| | | + " VALUES(?,?,?,?)", new Object[] {
|
| | |
| | | tranReq.setAttachTables(jsonTables);
|
| | | _mustRawMode = true;
|
| | | }
|
| | | |
| | | Json jsonMetrics = tranReq.convParamToJson("metrics", false);
|
| | | if(jsonMetrics != null)
|
| | | {
|
| | | tranReq.setJsonAttachMetrics(jsonMetrics);
|
| | | _mustRawMode = true;
|
| | | }
|
| | |
|
| | | _tranReq = tranReq;
|
| | | _tranReq.setChunkedMode(true);
|
| | | }
|
| | |
| | | String sampleId = tranReq.convParamToString("sample_id", false);
|
| | | String llmId = tranReq.convParamToString("llm_id", false);
|
| | | String historyGroupId = tranReq.convParamToString("history_group_id", true);
|
| | | String question = java.net.URLDecoder.decode(tranReq.convParamToString("question", true), "UTF-8");
|
| | | String question = tranReq.convParamToString("question", true);
|
| | | String processId = tranReq.convParamToString("process_id", false);
|
| | | String sRawMode = tranReq.convParamToString("raw_mode", false);
|
| | | String prevQuestion = tranReq.convParamToString("prev_question", false);
|
| | |
| | |
|
| | | if(SMTStatic.isNullOrEmpty(groupType))
|
| | | groupType = "业务场景";
|
| | | else
|
| | | groupType = java.net.URLDecoder.decode(groupType, "UTF-8");
|
| | |
|
| | | tranReq.setCurQuestionPos(curPos);
|
| | | tranReq.setCurGroupType(groupType);
|
| | |
| | | String attachTableId = tranReq.convParamToString("id", true);
|
| | | Json jsonFilters = tranReq.convParamToJson("filter", false);
|
| | | Json jsonOrders = tranReq.convParamToJson("order", false);
|
| | | Integer limit = tranReq.convParamToInteger("limit", false);
|
| | | SMTAIAttachTableDef attachTableDef = (SMTAIAttachTableDef) SMTAIServerApp.getApp().getAttachTableDef(attachTableId);
|
| | | |
| | | if (limit==null)
|
| | | limit=100;
|
| | | SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
|
| | | attachTableDef.queryRecordsToJson(jsonFilters, jsonOrders, jsonWr);
|
| | | attachTableDef.queryRecordsToJson(jsonFilters, jsonOrders, jsonWr,limit);
|
| | |
|
| | | return tranReq.returnJson(jsonWr);
|
| | |
|
| | |
| | | Date startTime = tranReq.convParamToDate("start_time", true);
|
| | | Date endTime = tranReq.convParamToDate("end_time", true);
|
| | | Json jsonQuotaKeys = tranReq.convParamToJson("quota_keys", true);
|
| | | |
| | | Integer limit = tranReq.convParamToInteger("limit", false);
|
| | | if (limit==null)
|
| | | limit=100;
|
| | | SMTAIAttachMetricDef attachMetricDef = SMTAIServerApp.getApp().getAttachMetricDef(attachMetricId);
|
| | |
|
| | | SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
|
| | | attachMetricDef.queryValueToJson(startTime, endTime, jsonQuotaKeys, jsonWr);
|
| | | attachMetricDef.queryValueToJson(startTime, endTime, jsonQuotaKeys, jsonWr,limit);
|
| | |
|
| | | return tranReq.returnJson(jsonWr);
|
| | | }
|
| | | |
| | | public ModelAndView callLLM(SMTAIServerRequest tranReq) throws Exception |
| | |
|
| | | public ModelAndView callLLM(SMTAIServerRequest tranReq) throws Exception
|
| | | {
|
| | | String llmId = tranReq.convParamToString("llm_id", false);
|
| | | Json jsonSystems = tranReq.convParamToJson("system_json", false);
|
| | | String question = tranReq.convParamToString("question", true);
|
| | | boolean answerIsJson = tranReq.convParamToBoolean("answer_is_json", true);
|
| | | |
| | | |
| | |
|
| | |
|
| | | SMTJsonWriter jsonWr = tranReq.newReturnJsonWriter(true, null, null);
|
| | | SMTLLMConnect conn = SMTAIServerApp.getApp().allocLLMConnect(llmId);
|
| | | |
| | |
|
| | | List<String> listSystem = new ArrayList<>();
|
| | | |
| | |
|
| | | if(jsonSystems != null)
|
| | | {
|
| | | for(Json jsonSystem : jsonSystems.asJsonList())
|
| | |
| | | listSystem.add(jsonSystem.asString());
|
| | | }
|
| | | }
|
| | | |
| | |
|
| | | String answer = conn.callWithMessage(listSystem, question, tranReq);
|
| | | if(answerIsJson)
|
| | | {
|
| | |
| | |
|
| | | return tranReq.returnJson(jsonWr);
|
| | | }
|
| | | public ModelAndView downloadFileByFileId(SMTAIServerRequest tranReq, HttpServletResponse response) throws Exception {
|
| | | String fileId = tranReq.convParamToString("file_id", true); // 获取请求中的file_id
|
| | | SMTDatabase db = SMTAIServerApp.getApp().allocDatabase();
|
| | |
|
| | | try {
|
| | | // 查询指定file_id的文件记录
|
| | | DBRecords dbRecords = db.querySQL("SELECT * FROM ai_times.chat_history_attach WHERE attach_id=?", new Object[]{fileId});
|
| | | if (dbRecords.getRecords().isEmpty()) {
|
| | | throw new Exception("文件不存在");
|
| | | }
|
| | | // 获取文件信息
|
| | | DBRecord fileRecord = dbRecords.getRecords().get(0);
|
| | | String attachTitle = fileRecord.getString("attach_title"); // 获取文件标题
|
| | | String extension = attachTitle.substring(attachTitle.lastIndexOf(".") + 1);
|
| | | // 扩展名和 MIME 类型映射
|
| | |
|
| | | Object fileTypeMapping = SMTAIServerApp.getApp().getGlobalConfig("file_type_mapping", false);
|
| | | Json json = Json.read(fileTypeMapping.toString());
|
| | | Map<String, Object> mimeTypes = json.asMap();
|
| | | String mimeType = (String) mimeTypes.getOrDefault(extension.toLowerCase(), "application/octet-stream");
|
| | | // 获取文件的字节数据,假设返回的是字节数组
|
| | | byte[] bytes = (byte[]) fileRecord.getValue("attach_bytes"); // 获取字节数据
|
| | | return tranReq.returnDownloadByteArray(bytes, attachTitle, mimeType);
|
| | | // // 设置响应头和文件名
|
| | | // String fileName = attachTitle != null ? attachTitle : "downloaded_file";
|
| | | // response.setHeader("Content-Disposition", "attachment; filename=\"" + fileName + "\"");
|
| | | // response.setContentType("application/octet-stream");
|
| | | // response.getOutputStream().write(bytes); // 写入字节数据
|
| | | // response.getOutputStream().flush();
|
| | | } catch (Exception e) {
|
| | | throw new Exception("Error processing file download: " + e.getMessage());
|
| | | }
|
| | | }
|
| | |
|
| | | }
|