alibaba/spring-ai-alibaba · error · IllegalArgumentException

unsupported app mode: ${param.getMode()}

Error message

unsupported app mode: ${param.getMode()}

What it means

Thrown by AppDelegateImpl.create when the requested app mode is not in AppMetadata.SUPPORT_MODES. Only supported modes (e.g. workflow, chatbot) can be created; anything else is rejected before an AppMetadata is built.

Source

Thrown at spring-ai-alibaba-admin/spring-ai-alibaba-admin-server-start/src/main/java/com/alibaba/cloud/ai/studio/admin/builder/generator/service/app/AppDelegateImpl.java:41

import com.alibaba.cloud.ai.studio.admin.builder.generator.model.AppMetadata;
import com.alibaba.cloud.ai.studio.admin.builder.generator.param.CreateAppParam;
import com.alibaba.cloud.ai.studio.admin.builder.generator.saver.AppSaver;

import org.springframework.stereotype.Service;

@Service
public class AppDelegateImpl implements AppDelegate {

	private AppSaver appSaver;

	public AppDelegateImpl(AppSaver appSaver) {
		this.appSaver = appSaver;
	}

	@Override
	public App create(CreateAppParam param) {
		if (!Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) {
			throw new IllegalArgumentException("unsupported app mode: " + param.getMode());
		}
		AppMetadata metadata = new AppMetadata().setId(UUID.randomUUID().toString())
			.setName(param.getName())
			.setMode(param.getMode())
			.setDescription(param.getDescription());
		App app = new App(metadata, null);
		return appSaver.save(app);
	}

	@Override
	public App get(String id) {
		return appSaver.get(id);
	}

	@Override
	public List<App> list() {
		return appSaver.list();
	}

View on GitHub (pinned to f82da0b50f)

Solutions

  1. Set param.setMode() to one of AppMetadata.SUPPORT_MODES (e.g. "workflow" or "chatbot")
  2. Check AppMetadata.SUPPORT_MODES for the list of accepted values
  3. Create the app in a supported mode and adapt the workflow instead

Example fix

// before
CreateAppParam p = new CreateAppParam(); p.setMode("agent-chat");
// after
CreateAppParam p = new CreateAppParam(); p.setMode(AppMetadata.CHATBOT_MODE);
Defensive patterns

Strategy: validation

Validate before calling

if (param.getMode() == null || !Arrays.asList(AppMetadata.SUPPORT_MODES).contains(param.getMode())) { throw new IllegalArgumentException("unsupported mode"); }

Type guard

boolean isSupportedMode(String mode) { return mode != null && Arrays.asList(AppMetadata.SUPPORT_MODES).contains(mode); }

Try / catch

try { delegate.create(param); } catch (IllegalArgumentException e) { return R.fail(400, "mode must be one of " + Arrays.toString(AppMetadata.SUPPORT_MODES)); }

Prevention

When it happens

Trigger: Calling the app-creation API/CreateAppParam with mode set to 'agent', 'completion', or any string outside SUPPORT_MODES.

Common situations: Clients copying modes from other platforms (Dify 'completion'/'agent-chat'), typos, older clients using modes dropped from SUPPORT_MODES.

Understand the failure class

Background: Invalid enum value errors: "Unknown type", "Invalid scope", "must be one of" — when a string is not on the library's allowed list — this error's family across 23 libraries.

Related errors


AI-assisted analysis of alibaba/spring-ai-alibaba@f82da0b50f (2026-09-09). Data as JSON: /api/errors/fb29068ceded96e8. Report an issue: GitHub.