iflytek/astron-agent · warning
Generate workflow skill metadata failed, workflowId=
Error message
Generate workflow skill metadata failed, workflowId={} What it means
generateSkillMetadata asks an LLM (via openAiModelProcessService) to produce skill metadata (name/description) for the exported workflow. The async call has a timeout (METADATA_GENERATION_TIMEOUT_SECONDS) and an exceptionally() handler: on timeout, error, or empty LLM output it logs this warning and yields null so the caller falls back to generated fallback metadata.
Solutions
- Check the logged exception for the root cause (timeout vs HTTP error) and fix model connectivity/credentials
- Increase METADATA_GENERATION_TIMEOUT_SECONDS if timeouts occur on large workflow descriptions
- Retry the export when the model service recovers to get real generated metadata
- Rely on the fallback metadata if acceptable, or preconfigure better name/description on the workflow so fallback quality is fine
Defensive patterns
Strategy: fallback
Validate before calling
// pre-flight check that the LLM service is configured/reachable
if (!openAiModelProcessService.isAvailable()) {
log.info("LLM unavailable; skill export will use fallback metadata");
} Try / catch
String content;
try {
content = CompletableFuture
.supplyAsync(() -> openAiModelProcessService.processNonStreaming(prompt))
.orTimeout(METADATA_GENERATION_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.join();
} catch (CompletionException | InterruptedException e) {
log.warn("Generate workflow skill metadata failed, workflowId={}", workflowId, e);
content = null;
} Prevention
- Configure and health-check model credentials before export operations
- Tune METADATA_GENERATION_TIMEOUT_SECONDS to p99 model latency plus margin
- Retry transient LLM failures with backoff before falling back
- Cache generated metadata per workflowId to avoid repeat generations
When it happens
Trigger: metadata() -> generateSkillMetadata when processNonStreaming(prompt) throws, exceeds METADATA_GENERATION_TIMEOUT_SECONDS, or the exceptionally handler fires (model 4xx/5xx, missing API key, network failure, rate limit).
Common situations: LLM service overloaded or rate-limited during bulk exports; METADATA_GENERATION_TIMEOUT_SECONDS set too low for large prompts; model credentials not configured in the environment; prompt length exceeding model context.
Related errors
- Parse generated skill metadata failed
- Timed out acquiring distributed lock, please try again later
- Timeout must be between 1-300 seconds
- OPEN_AI_API_ERROR
- NOT_CUSTOM_MODEL
AI-assisted analysis of iflytek/astron-agent@5e758547a8 (2026-09-12).
Data as JSON: /api/errors/494f04ca5435a7a0.
Report an issue: GitHub.
Appendix: source
Thrown at console/backend/hub/src/main/java/com/iflytek/astron/console/hub/service/workflow/impl/WorkflowSkillExportServiceImpl.java:127
} catch (Exception e) {
log.warn("Parse workflow inputs failed, workflowId={}", workflow.getId(), e);
}
return List.of();
}
private SkillMetadata generateSkillMetadata(String workflowName, String workflowDescription, Long workflowId) {
SkillMetadata fallback = new SkillMetadata(
toSkillName(workflowName, workflowId),
toFallbackDescription(workflowName, workflowDescription),
false);
try {
String prompt = buildMetadataPrompt(workflowName, workflowDescription);
String content = CompletableFuture
.supplyAsync(() -> openAiModelProcessService.processNonStreaming(prompt))
.orTimeout(METADATA_GENERATION_TIMEOUT_SECONDS, TimeUnit.SECONDS)
.exceptionally(ex -> {
log.warn("Generate workflow skill metadata failed, workflowId={}", workflowId, ex);
return null;
})
.join();
SkillMetadata generated = parseGeneratedMetadata(content);
if (generated != null) {
return generated;
}
} catch (Exception e) {
log.warn("Generate workflow skill metadata failed, workflowId={}", workflowId, e);
}
return fallback;
}
private String buildMetadataPrompt(String workflowName, String workflowDescription) {
return String.join(
System.lineSeparator(),
"You create Agent Skill metadata for a published workflow API.",
"Return JSON only, without Markdown fences or explanations.",View on GitHub (pinned to 5e758547a8)