diff --git a/ai-provider/model-runtime/model-providers/stepfun/assets/icon_l_en.svg b/ai-provider/model-runtime/model-providers/stepfun/assets/icon_l_en.svg
index f63f4fff..c2ecea91 100644
--- a/ai-provider/model-runtime/model-providers/stepfun/assets/icon_l_en.svg
+++ b/ai-provider/model-runtime/model-providers/stepfun/assets/icon_l_en.svg
@@ -1 +1 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/ai-provider/model-runtime/model-providers/stepfun/assets/icon_s_en.svg b/ai-provider/model-runtime/model-providers/stepfun/assets/icon_s_en.svg
index 14f12419..12ee4641 100644
--- a/ai-provider/model-runtime/model-providers/stepfun/assets/icon_s_en.svg
+++ b/ai-provider/model-runtime/model-providers/stepfun/assets/icon_s_en.svg
@@ -1 +1,2 @@
-
\ No newline at end of file
+
\ No newline at end of file
diff --git a/controller/publish/iml.go b/controller/publish/iml.go
index ded2386b..94cd1505 100644
--- a/controller/publish/iml.go
+++ b/controller/publish/iml.go
@@ -39,11 +39,7 @@ func (c *imlPublishController) ReleaseDo(ctx *gin.Context, serviceId string, inp
c.releaseModule.Delete(ctx, serviceId, newReleaseId)
return nil, err
}
- //err = c.publishModule.Publish(ctx, serviceId, apply.Id)
- //if err != nil {
- // c.releaseModule.Delete(ctx, serviceId, newReleaseId)
- // return nil, err
- //}
+
err = c.publishModule.Publish(ctx, serviceId, apply.Id)
if err != nil {
c.releaseModule.Delete(ctx, serviceId, newReleaseId)
diff --git a/controller/service/iml.go b/controller/service/iml.go
index 0fcd2721..26177c6a 100644
--- a/controller/service/iml.go
+++ b/controller/service/iml.go
@@ -3,10 +3,19 @@ package service
import (
"context"
"fmt"
+ "net/http"
+ "strings"
+
+ "github.com/APIParkLab/APIPark/model/plugin_model"
+ "github.com/APIParkLab/APIPark/service/api"
+
+ router_dto "github.com/APIParkLab/APIPark/module/router/dto"
+
model_runtime "github.com/APIParkLab/APIPark/ai-provider/model-runtime"
"github.com/APIParkLab/APIPark/module/ai"
ai_api "github.com/APIParkLab/APIPark/module/ai-api"
ai_api_dto "github.com/APIParkLab/APIPark/module/ai-api/dto"
+ "github.com/APIParkLab/APIPark/module/router"
"github.com/APIParkLab/APIPark/module/service"
service_dto "github.com/APIParkLab/APIPark/module/service/dto"
"github.com/APIParkLab/APIPark/module/upstream"
@@ -14,7 +23,6 @@ import (
"github.com/eolinker/go-common/store"
"github.com/gin-gonic/gin"
"github.com/google/uuid"
- "strings"
)
var (
@@ -27,6 +35,7 @@ type imlServiceController struct {
module service.IServiceModule `autowired:""`
docModule service.IServiceDocModule `autowired:""`
aiAPIModule ai_api.IAPIModule `autowired:""`
+ routerModule router.IRouterModule `autowired:""`
providerModule ai.IProviderModule `autowired:""`
upstreamModule upstream.IUpstreamModule `autowired:""`
transaction store.ITransaction `autowired:""`
@@ -110,32 +119,81 @@ func (i *imlServiceController) CreateAIService(ctx *gin.Context, teamID string,
if err != nil {
return err
}
+ path := fmt.Sprintf("/%s/demo_translation_api", strings.Trim(input.Prefix, "/"))
+ timeout := 300000
+ retry := 0
+ aiPrompt := &ai_api_dto.AiPrompt{
+ Variables: []*ai_api_dto.AiPromptVariable{
+ {
+ Key: "source_lang",
+ Description: "",
+ Require: true,
+ },
+ {
+ Key: "target_lang",
+ Description: "",
+ Require: true,
+ },
+ {
+ Key: "text",
+ Description: "",
+ Require: true,
+ },
+ },
+ Prompt: "You need to translate {{source_lang}} into {{target_lang}}, and the following is the content that needs to be translated.\n---\n{{text}}",
+ }
+ aiModel := &ai_api_dto.AiModel{
+ Id: pv.DefaultLLM,
+ Config: pv.DefaultLLMConfig,
+ }
+ name := "Demo Translation API"
+ description := "A demo that shows you how to use a prompt to create a Translation API."
err = i.aiAPIModule.Create(
ctx,
info.Id,
&ai_api_dto.CreateAPI{
- Name: "Default API",
- Path: fmt.Sprintf("/%s", strings.Trim(input.Prefix, "/")),
- Description: "Default API for service",
+ Name: name,
+ Path: path,
+ Description: description,
Disable: false,
- AiPrompt: &ai_api_dto.AiPrompt{
- Variables: []*ai_api_dto.AiPromptVariable{
- {
- Key: "Query",
- Description: "",
- Require: true,
- },
- },
- Prompt: "{{Query}}",
- },
- AiModel: &ai_api_dto.AiModel{
- Id: pv.DefaultLLM,
- Config: pv.DefaultLLMConfig,
- },
- Timeout: 300000,
- Retry: 0,
+ AiPrompt: aiPrompt,
+ AiModel: aiModel,
+ Timeout: timeout,
+ Retry: retry,
},
)
+ plugins := make(map[string]api.PluginSetting)
+ plugins["ai_prompt"] = api.PluginSetting{
+ Config: plugin_model.ConfigType{
+ "prompt": aiPrompt.Prompt,
+ "variables": aiPrompt.Variables,
+ },
+ }
+ plugins["ai_formatter"] = api.PluginSetting{
+ Config: plugin_model.ConfigType{
+ "model": aiModel.Id,
+ "provider": fmt.Sprintf("%s@ai-provider", info.Provider.Id),
+ "config": aiModel.Config,
+ },
+ }
+ _, err = i.routerModule.Create(ctx, info.Id, &router_dto.Create{
+ Id: input.Id,
+ Name: name,
+ Path: path,
+ Methods: []string{
+ http.MethodPost,
+ },
+ Description: description,
+ Protocols: []string{"http", "https"},
+ MatchRules: nil,
+ Proxy: &router_dto.InputProxy{
+ Path: path,
+ Timeout: timeout,
+ Retry: retry,
+ Plugins: plugins,
+ },
+ Disable: false,
+ })
_, err = i.upstreamModule.Save(ctx, info.Id, newAIUpstream(info.Id, *input.Provider, p.URI()))
return err
})
diff --git a/module/release/iml.go b/module/release/iml.go
index a4e4769f..9cffa8da 100644
--- a/module/release/iml.go
+++ b/module/release/iml.go
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
+
api_doc "github.com/APIParkLab/APIPark/service/api-doc"
service_doc "github.com/APIParkLab/APIPark/service/service-doc"
@@ -136,13 +137,21 @@ func (m *imlReleaseModule) Create(ctx context.Context, serviceId string, input *
}
serviceDoc, err := m.serviceDocService.Get(ctx, serviceId)
if err != nil {
- return err
+ if !errors.Is(err, gorm.ErrRecordNotFound) {
+ return err
+ }
+ serviceDoc = &service_doc.Doc{
+ Doc: "",
+ }
}
err = m.serviceDocService.CommitDoc(ctx, serviceId, serviceDoc)
if err != nil {
return err
}
serviceDocCommit, err := m.serviceDocService.LatestDocCommit(ctx, serviceId)
+ if err != nil {
+
+ }
if !m.releaseService.Completeness(utils.SliceToSlice(clusters, func(s *cluster.Cluster) string {
return s.Uuid
}), apiUUIDS, requestCommits, apiProxy, upstreams) {
diff --git a/module/router/dto/input.go b/module/router/dto/input.go
index f281e1e2..27b57e17 100644
--- a/module/router/dto/input.go
+++ b/module/router/dto/input.go
@@ -3,9 +3,10 @@ package router_dto
import (
"errors"
"fmt"
- "github.com/eolinker/go-common/utils"
"strings"
+ "github.com/eolinker/go-common/utils"
+
"github.com/APIParkLab/APIPark/service/api"
)
@@ -21,6 +22,7 @@ var validMethods = map[string]struct{}{
type Create struct {
Id string `json:"id"`
+ Name string `json:"name"`
Path string `json:"path"`
Methods []string `json:"methods"`
Description string `json:"description"`
diff --git a/module/router/iml.go b/module/router/iml.go
index 7515d5c9..bc8af099 100644
--- a/module/router/iml.go
+++ b/module/router/iml.go
@@ -5,9 +5,10 @@ import (
"encoding/json"
"errors"
"fmt"
- "github.com/APIParkLab/APIPark/service/universally/commit"
"strings"
+ "github.com/APIParkLab/APIPark/service/universally/commit"
+
"github.com/APIParkLab/APIPark/service/service"
"github.com/APIParkLab/APIPark/service/upstream"
@@ -253,10 +254,14 @@ func (i *imlRouterModule) Create(ctx context.Context, serviceId string, dto *rou
if err != nil {
return err
}
-
+ name := dto.Name
+ if name == "" {
+ name = dto.Id
+ }
match, _ := json.Marshal(dto.MatchRules)
return i.apiService.Create(ctx, &api.Create{
UUID: dto.Id,
+ Name: name,
Description: dto.Description,
Service: serviceId,
Team: info.Team,
diff --git a/module/service-diff/iml.go b/module/service-diff/iml.go
index e4612394..c3e995c5 100644
--- a/module/service-diff/iml.go
+++ b/module/service-diff/iml.go
@@ -4,6 +4,7 @@ import (
"context"
"errors"
"fmt"
+
"github.com/APIParkLab/APIPark/service/api"
api_doc "github.com/APIParkLab/APIPark/service/api-doc"
"github.com/APIParkLab/APIPark/service/cluster"
@@ -95,6 +96,7 @@ func (m *imlServiceDiff) DiffForLatest(ctx context.Context, serviceId string, ba
Target: apiInfo.UUID,
Key: "request",
Data: &api.Request{
+ Name: apiInfo.Name,
Path: apiInfo.Path,
Methods: apiInfo.Methods,
Protocols: apiInfo.Protocols,
@@ -221,6 +223,7 @@ func (m *imlServiceDiff) diff(partitions []string, base, target *projectInfo) *s
for _, rc := range target.apiRequestCommits {
apiId := rc.Target
a := &service_diff.ApiDiff{
+ Name: rc.Data.Name,
APi: rc.Target,
Method: rc.Data.Methods,
Protocol: rc.Data.Protocols,
@@ -266,6 +269,7 @@ func (m *imlServiceDiff) diff(partitions []string, base, target *projectInfo) *s
apiInfo := rc.Data
if baseApis.Has(rc.Target) {
out.Apis = append(out.Apis, &service_diff.ApiDiff{
+ Name: apiInfo.Name,
APi: rc.Target,
Method: apiInfo.Methods,
Protocol: apiInfo.Protocols,
@@ -328,6 +332,7 @@ func (m *imlServiceDiff) Out(ctx context.Context, diff *service_diff.Diff) (*Dif
out := &DiffOut{}
out.Routers = utils.SliceToSlice(diff.Apis, func(i *service_diff.ApiDiff) *RouterDiffOut {
return &RouterDiffOut{
+ Name: i.Name,
Methods: i.Method,
Path: i.Path,
Change: i.Change,
diff --git a/module/service-diff/out.go b/module/service-diff/out.go
index 16dd6841..a6b98cf3 100644
--- a/module/service-diff/out.go
+++ b/module/service-diff/out.go
@@ -14,6 +14,7 @@ type DiffOut struct {
}
type RouterDiffOut struct {
+ Name string `json:"name,omitempty"`
Methods []string `json:"methods,omitempty"`
Protocols []string `json:"protocols,omitempty"`
Path string `json:"path,omitempty"`
diff --git a/service/api/iml.go b/service/api/iml.go
index 6b2a37e1..b3382655 100644
--- a/service/api/iml.go
+++ b/service/api/iml.go
@@ -37,31 +37,10 @@ type imlAPIService struct {
apiInfoStore api.IAPIInfoStore `autowired:""`
requestCommitService commit.ICommitWithKeyService[Request] `autowired:""`
proxyCommitService commit.ICommitWithKeyService[Proxy] `autowired:""`
- //pluginCommitService commit.ICommitWithKeyService[Plugin] `autowired:""`
universally.IServiceGet[API]
universally.IServiceDelete
}
-//func (i *imlAPIService) ListLatestCommitPlugin(ctx context.Context, aid ...string) ([]*commit.Commit[Plugin], error) {
-// return i.pluginCommitService.ListLatest(ctx, aid...)
-//}
-//
-//func (i *imlAPIService) GetPluginCommit(ctx context.Context, commitId string) (*commit.Commit[Plugin], error) {
-// return i.pluginCommitService.Get(ctx, commitId)
-//}
-//
-//func (i *imlAPIService) ListPluginCommit(ctx context.Context, commitId ...string) ([]*commit.Commit[Plugin], error) {
-// return i.pluginCommitService.List(ctx, commitId...)
-//}
-//
-//func (i *imlAPIService) SavePlugin(ctx context.Context, aid string, data *Plugin) error {
-// return i.pluginCommitService.Save(ctx, aid, data)
-//}
-//
-//func (i *imlAPIService) LatestPlugin(ctx context.Context, aid string) (*commit.Commit[Plugin], error) {
-// return i.pluginCommitService.Latest(ctx, aid)
-//}
-
func (i *imlAPIService) ListLatestCommitRequest(ctx context.Context, aid ...string) ([]*commit.Commit[Request], error) {
return i.requestCommitService.ListLatest(ctx, aid...)
}
@@ -137,6 +116,9 @@ func (i *imlAPIService) Save(ctx context.Context, id string, model *Edit) error
if err != nil {
return err
}
+ if model.Name != nil {
+ ev.Name = *model.Name
+ }
if model.Description != nil {
ev.Description = *model.Description
@@ -186,7 +168,7 @@ func (i *imlAPIService) Create(ctx context.Context, input *Create) (err error) {
ne := api.API{
UUID: input.UUID,
- Name: input.UUID,
+ Name: input.Name,
Service: input.Service,
Team: input.Team,
Creator: operater,
@@ -201,7 +183,7 @@ func (i *imlAPIService) Create(ctx context.Context, input *Create) (err error) {
ev := &api.Info{
Id: ne.Id,
UUID: ne.UUID,
- Name: ne.UUID,
+ Name: ne.Name,
Description: input.Description,
Updater: operater,
UpdateAt: time.Now(),
diff --git a/service/api/model.go b/service/api/model.go
index b71059be..5c96f8d0 100644
--- a/service/api/model.go
+++ b/service/api/model.go
@@ -9,7 +9,8 @@ import (
)
type API struct {
- UUID string
+ UUID string
+
Service string
Team string
Creator string
@@ -75,6 +76,7 @@ type Kind string
type Create struct {
UUID string
+ Name string
Description string
Service string
Team string
@@ -86,6 +88,7 @@ type Create struct {
}
type Edit struct {
+ Name *string
Description *string
Methods *[]string
Protocols *[]string
@@ -108,6 +111,7 @@ type PluginSetting struct {
}
type Request struct {
+ Name string `json:"name"`
Path string `json:"path"`
Methods []string `json:"methods"`
Protocols []string `json:"protocols"`
diff --git a/service/service_diff/diff.go b/service/service_diff/diff.go
index 2b579ce1..2c27ead5 100644
--- a/service/service_diff/diff.go
+++ b/service/service_diff/diff.go
@@ -19,9 +19,8 @@ type Status struct {
}
type ApiDiff struct {
- APi string `json:"api,omitempty"`
- //Upstream string `json:"upstream,omitempty"`
- //Name string `json:"name,omitempty"`
+ APi string `json:"api,omitempty"`
+ Name string `json:"name,omitempty"`
Method []string `json:"method,omitempty"`
Protocol []string `json:"protocol,omitempty"`
Disable bool `json:"disable,omitempty"`