@@ -59,6 +59,18 @@ func NewInvokeContext(id, action, argsJSON string) (*InvokeContext, error) {
5959}
6060
6161func LoadConfigFromFile (path string ) (* SlimConfig , error ) {
62+ cfg , err := loadConfigFromFile (path )
63+ if err != nil {
64+ return nil , err
65+ }
66+
67+ if err := fillDefaults (cfg ); err != nil {
68+ return nil , err
69+ }
70+ return cfg , nil
71+ }
72+
73+ func loadConfigFromFile (path string ) (* SlimConfig , error ) {
6274 data , err := os .ReadFile (path )
6375 if err != nil {
6476 return nil , NewError (ErrConfigLoad , err .Error ())
@@ -69,13 +81,18 @@ func LoadConfigFromFile(path string) (*SlimConfig, error) {
6981 return nil , NewError (ErrConfigLoad , err .Error ())
7082 }
7183
72- if err := fillDefaults (& cfg ); err != nil {
73- return nil , err
74- }
7584 return & cfg , nil
7685}
7786
7887func LoadConfig () (* SlimConfig , error ) {
88+ cfg := loadConfigFromEnv ()
89+ if err := fillDefaults (cfg ); err != nil {
90+ return nil , err
91+ }
92+ return cfg , nil
93+ }
94+
95+ func loadConfigFromEnv () * SlimConfig {
7996 cfg := & SlimConfig {
8097 Mode : env ("SLIM_MODE" , ModeRemote ),
8198 }
@@ -88,10 +105,10 @@ func LoadConfig() (*SlimConfig, error) {
88105 UvPath : env ("SLIM_UV_PATH" , "" ),
89106 PythonEnvInitTimeout : envInt ("SLIM_PYTHON_ENV_INIT_TIMEOUT" , 0 ),
90107 MaxExecutionTimeout : envInt ("SLIM_MAX_EXECUTION_TIMEOUT" , 0 ),
91- PipMirrorURL : env ("SLIM_PIP_MIRROR_URL" , "" ),
92- PipExtraArgs : env ("SLIM_PIP_EXTRA_ARGS" , "" ),
93- MarketplaceURL : env ("SLIM_MARKETPLACE_URL" , "" ),
94- IgnoreUvLock : envBool ("SLIM_IGNORE_UV_LOCK" , false ),
108+ PipMirrorURL : env ("SLIM_PIP_MIRROR_URL" , "" ),
109+ PipExtraArgs : env ("SLIM_PIP_EXTRA_ARGS" , "" ),
110+ MarketplaceURL : env ("SLIM_MARKETPLACE_URL" , "" ),
111+ IgnoreUvLock : envBool ("SLIM_IGNORE_UV_LOCK" , false ),
95112 }
96113 case ModeRemote :
97114 cfg .Remote = RemoteConfig {
@@ -100,7 +117,22 @@ func LoadConfig() (*SlimConfig, error) {
100117 }
101118 }
102119
103- if err := fillDefaults (cfg ); err != nil {
120+ return cfg
121+ }
122+
123+ func LoadExtractConfig (configFile string , hasLocalPath bool ) (* SlimConfig , error ) {
124+ var cfg * SlimConfig
125+ var err error
126+ if configFile != "" {
127+ cfg , err = loadConfigFromFile (configFile )
128+ } else {
129+ cfg = loadConfigFromEnv ()
130+ }
131+ if err != nil {
132+ return nil , err
133+ }
134+
135+ if err := fillExtractDefaults (cfg , hasLocalPath ); err != nil {
104136 return nil , err
105137 }
106138 return cfg , nil
@@ -160,3 +192,30 @@ func fillDefaults(cfg *SlimConfig) error {
160192
161193 return nil
162194}
195+
196+ func fillExtractDefaults (cfg * SlimConfig , hasLocalPath bool ) error {
197+ if cfg .Mode == "" {
198+ cfg .Mode = ModeRemote
199+ }
200+
201+ switch cfg .Mode {
202+ case ModeLocal :
203+ if cfg .Local .Folder == "" && ! hasLocalPath {
204+ return NewError (ErrConfigInvalid , "local.folder is required when extract uses -id" )
205+ }
206+ if cfg .Local .MarketplaceURL == "" {
207+ cfg .Local .MarketplaceURL = "https://marketplace.dify.ai"
208+ }
209+ case ModeRemote :
210+ if cfg .Remote .DaemonAddr == "" {
211+ return NewError (ErrConfigInvalid , "remote.daemon_addr is required" )
212+ }
213+ if cfg .Remote .DaemonKey == "" {
214+ return NewError (ErrConfigInvalid , "remote.daemon_key is required" )
215+ }
216+ default :
217+ return NewError (ErrUnknownMode , cfg .Mode )
218+ }
219+
220+ return nil
221+ }
0 commit comments