|
- /* ******************************************************************************
- * 2019 - present Contributed by Apulis Technology (Shenzhen) Co. LTD
- *
- * This program and the accompanying materials are made available under the
- * terms of the MIT License, which is available at
- * https://www.opensource.org/licenses/MIT
- *
- * See the NOTICE file distributed with this work for additional
- * information regarding copyright ownership.
- * Unless required by applicable law or agreed to in writing, software
- * distributed under the License is distributed on an "AS IS" BASIS, WITHOUT
- * WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the
- * License for the specific language governing permissions and limitations
- * under the License.
- *
- * SPDX-License-Identifier: MIT
- ******************************************************************************/
- package services
-
- import (
- "bytes"
- "encoding/json"
- "fmt"
- "net/http"
- "net/url"
- "path"
- "strings"
- "time"
-
- "github.com/apulis/app/ai-arts-backend/internal/configs"
- "github.com/apulis/app/ai-arts-backend/internal/dto"
- "github.com/apulis/app/ai-arts-backend/internal/utils"
- "github.com/apulis/app/ai-arts-backend/pkg/exports"
- )
-
- var globalAiLabService = &AiLabService{}
-
- func GetGlobalAiLabService() *AiLabService {
- return globalAiLabService
- }
-
- type AiLabService struct{}
-
- func (p *AiLabService) CreateLab(req *dto.CreateAiLabReq, header http.Header) (int64, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.CreateLab")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs"
- u, _ := url.Parse(urlpath)
-
- b, _ := json.Marshal(req)
- r := bytes.NewReader(b)
-
- resp, err := DoRequest(u.String(), "POST", header, r)
-
- if err != nil {
- return 0, nil, err
- }
- var data int64
- commResponse, err := ParseResponse(resp, &data)
- return data, commResponse, err
- }
-
- func (p *AiLabService) DeleteLab(req *dto.DeleteAiLabReq, header http.Header) (int64, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.DeleteLab")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs"
- u, _ := url.Parse(urlpath)
-
- u.Path = path.Join(u.Path, fmt.Sprintf("%d", req.LabId))
-
- resp, err := DoRequest(u.String(), "DELETE", header, nil)
-
- if err != nil {
- return 0, nil, err
- }
- var data int64
- commResponse, err := ParseResponse(resp, data)
- return data, commResponse, err
- }
-
- func (p *AiLabService) GetRunList(req *dto.GetAiLabRunListReq, header http.Header) (*dto.GetAiLabRunListResp, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.GetRunList")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs/{labId}/runs"
- u, _ := url.Parse(urlpath)
- u.Path = strings.ReplaceAll(u.Path, "{labId}", fmt.Sprintf("%d", req.LabId))
- u.RawQuery = ParseQueryFromStruct(*req)
-
- resp, err := DoRequest(u.String(), "GET", header, nil)
- if err != nil {
- return nil, nil, err
- }
- data := &dto.GetAiLabRunListResp{}
- commResponse, err := ParseResponse(resp, data)
- fmt.Println(data, commResponse, err)
- return data, commResponse, err
- }
-
- func (p *AiLabService) GetRealStats(req *dto.AiLabRealStatsReq, header http.Header) (*dto.AiLabRealStatsResp, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.GetRealStats")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs/{labId}/real-stats"
- u, _ := url.Parse(urlpath)
- u.Path = strings.ReplaceAll(u.Path, "{labId}", fmt.Sprintf("%d", req.LabId))
- resp, err := DoRequest(u.String(), "GET", header, nil)
- if err != nil {
- return nil, nil, err
- }
- data := &dto.AiLabRealStatsResp{}
- commResponse, err := ParseResponse(resp, data)
- return data, commResponse, err
- }
-
- func (p *AiLabService) StartCodeRunLab(req *dto.CreateAiLabRunReq, header http.Header) (*dto.CreateAiLabRunResp, *exports.CommResponse, error) {
- return p.startAiLab(req, "code-labs", header)
- }
-
- func (p *AiLabService) StartTrainLab(req *dto.CreateAiLabRunReq, header http.Header) (*dto.CreateAiLabRunResp, *exports.CommResponse, error) {
- return p.startAiLab(req, "runs", header)
- }
-
- func (p *AiLabService) StartEvalLab(req *dto.CreateAiLabRunReq, header http.Header) (*dto.CreateAiLabRunResp, *exports.CommResponse, error) {
- return p.startAiLab(req, fmt.Sprintf("runs/%s/evaluates", req.Parent), header)
- }
-
- func (p *AiLabService) StopCodeRunLab(req *dto.DeleteAiLabRunReq, header http.Header) (*dto.DeleteAiLabRunResp, *exports.CommResponse, error) {
- return p.stopRunLab(req, header)
- }
-
- func (p *AiLabService) stopRunLab(req *dto.DeleteAiLabRunReq, header http.Header) (*dto.DeleteAiLabRunResp, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.StopRunLab")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs/{labId}/runs/{runId}"
- u, _ := url.Parse(urlpath)
- u.Path = strings.ReplaceAll(u.Path, "{labId}", fmt.Sprintf("%d", req.LabId))
- u.Path = strings.ReplaceAll(u.Path, "{runId}", req.RunId)
-
- req.Action = "kill"
- u.RawQuery = ParseQueryFromStruct(*req)
-
- resp, err := DoRequest(u.String(), "POST", header, nil)
- if err != nil {
- return nil, nil, err
- }
- data := &dto.DeleteAiLabRunResp{}
- commResponse, err := ParseResponse(resp, &data.Data)
- return data, commResponse, err
- }
-
- func (p *AiLabService) startAiLab(req *dto.CreateAiLabRunReq, labType string, header http.Header) (*dto.CreateAiLabRunResp, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.StartCodeRunLab")
- urlpath := configs.GetAppConfig().Resources.Ailab + "/labs/{labId}/" + labType
- u, _ := url.Parse(urlpath)
- u.Path = strings.ReplaceAll(u.Path, "{labId}", fmt.Sprintf("%d", req.LabId))
- //@todo: add debug command ???
- if configs.GetAppConfig().Debug && len(req.Cmd) == 1{
- req.Cmd = append(req.Cmd,"||","sleep 3600")
- }
- b, _ := json.Marshal(req)
- r := bytes.NewReader(b)
- fmt.Println(string(b))
- resp, err := DoRequest(u.String(), "POST", header, r)
- if err != nil {
- return nil, nil, err
- }
- data := &dto.CreateAiLabRunResp{}
- commResponse, err := ParseResponse(resp, data)
- return data, commResponse, err
- }
-
- func (p *AiLabService) AiLabRunOpt(req *dto.AiLabRunOptReq, header http.Header) (interface{}, *exports.CommResponse, error) {
- defer utils.TimeCost(time.Now(), "AiLabService.AiLabRunOpt")
- urlpath := fmt.Sprintf(configs.GetAppConfig().Resources.Ailab+"/labs/%d/runs/%s", req.LabId, req.RunId)
- u, _ := url.Parse(urlpath)
-
- u.RawQuery = ParseQueryFromStruct(*req)
- if configs.GetAppConfig().Debug && len(req.Cmd) == 1{
- req.Cmd = append(req.Cmd,"||","sleep 3600")
- }
- b, _ := json.Marshal(req)
- r := bytes.NewReader(b)
- fmt.Println(string(b))
- resp, err := DoRequest(u.String(), "POST", header, r)
- if err != nil {
- return 0, nil, err
- }
- var data interface{}
- commResponse, err := ParseResponse(resp, &data)
- return data, commResponse, err
- }
-
- func (p* AiLabService) AiLabQueryRunUserInfo(runId string) (uinfo*dto.LabRunUserInfo,err APIError){
- url := fmt.Sprintf(configs.GetAppConfig().Resources.Ailab+"/runs/%s/uinfo", runId)
- uinfo = &dto.LabRunUserInfo{}
- err = AIStudioRequest(url,"GET",nil,nil,uinfo)
- return
- }
|