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

  1. Check the logged exception for the root cause (timeout vs HTTP error) and fix model connectivity/credentials
  2. Increase METADATA_GENERATION_TIMEOUT_SECONDS if timeouts occur on large workflow descriptions
  3. Retry the export when the model service recovers to get real generated metadata
  4. 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

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


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)