@@ -21,11 +21,13 @@ import (
2121 "fmt"
2222 "net/http"
2323 "ragflow/internal/common"
24+ "ragflow/internal/dao"
2425 "ragflow/internal/logger"
2526 "ragflow/internal/server"
2627 "ragflow/internal/service"
2728 "ragflow/internal/utility"
2829 "strconv"
30+ "strings"
2931 "time"
3032
3133 "github.com/gin-gonic/gin"
@@ -794,6 +796,115 @@ func (h *Handler) RestartService(c *gin.Context) {
794796 success (c , result , "" )
795797}
796798
799+ func (h * Handler ) ListProviders (c * gin.Context ) {
800+
801+ keywords := ""
802+ if queryKeywords := c .Query ("available" ); queryKeywords != "" {
803+ keywords = queryKeywords
804+ }
805+
806+ // convert keywords to small case
807+ keywords = strings .ToLower (keywords )
808+ if keywords == "true" {
809+ // list pool providers
810+ providers , err := dao .GetModelProviderManager ().ListProviders ()
811+ if err != nil {
812+ c .JSON (http .StatusOK , gin.H {
813+ "code" : common .CodeNotFound ,
814+ "message" : err .Error (),
815+ })
816+ return
817+ }
818+
819+ c .JSON (http .StatusOK , gin.H {
820+ "code" : 0 ,
821+ "message" : "success" ,
822+ "data" : providers ,
823+ })
824+ }
825+ }
826+
827+ func (h * Handler ) ShowProvider (c * gin.Context ) {
828+ providerName := c .Param ("provider_name" )
829+ if providerName == "" {
830+ c .JSON (http .StatusBadRequest , gin.H {
831+ "code" : 400 ,
832+ "message" : "Provider name is required" ,
833+ })
834+ return
835+ }
836+
837+ provider , err := dao .GetModelProviderManager ().GetProviderByName (providerName )
838+ if err != nil {
839+ c .JSON (http .StatusOK , gin.H {
840+ "code" : common .CodeNotFound ,
841+ "message" : err .Error (),
842+ })
843+ return
844+ }
845+ c .JSON (http .StatusOK , gin.H {
846+ "code" : 0 ,
847+ "message" : "success" ,
848+ "data" : provider ,
849+ })
850+ }
851+
852+ func (h * Handler ) ListModels (c * gin.Context ) {
853+ providerName := c .Param ("provider_name" )
854+ if providerName == "" {
855+ c .JSON (http .StatusBadRequest , gin.H {
856+ "code" : 400 ,
857+ "message" : "Provider name is required" ,
858+ })
859+ return
860+ }
861+ models , err := dao .GetModelProviderManager ().ListModels (providerName )
862+ if err != nil {
863+ c .JSON (http .StatusOK , gin.H {
864+ "code" : common .CodeNotFound ,
865+ "message" : err .Error (),
866+ })
867+ return
868+ }
869+ c .JSON (http .StatusOK , gin.H {
870+ "code" : 0 ,
871+ "message" : "success" ,
872+ "data" : models ,
873+ })
874+ }
875+
876+ func (h * Handler ) ShowModel (c * gin.Context ) {
877+ providerName := c .Param ("provider_name" )
878+ if providerName == "" {
879+ c .JSON (http .StatusBadRequest , gin.H {
880+ "code" : 400 ,
881+ "message" : "Provider name is required" ,
882+ })
883+ return
884+ }
885+ modelName := c .Param ("model_name" )
886+ if modelName == "" {
887+ c .JSON (http .StatusBadRequest , gin.H {
888+ "code" : 400 ,
889+ "message" : "Model name is required" ,
890+ })
891+ return
892+ }
893+ model , err := dao .GetModelProviderManager ().GetModelByName (providerName , modelName )
894+ if err != nil {
895+ c .JSON (http .StatusOK , gin.H {
896+ "code" : common .CodeNotFound ,
897+ "message" : err .Error (),
898+ })
899+ return
900+ }
901+ c .JSON (http .StatusOK , gin.H {
902+ "code" : 0 ,
903+ "message" : "success" ,
904+ "data" : model ,
905+ })
906+ }
907+
797908// GetVariables handle get variables
798909// Python logic: if request body is empty, list all variables; otherwise get single variable by var_name from body
799910func (h * Handler ) GetVariables (c * gin.Context ) {
0 commit comments