{"record":{"id":"83c297bf6bf74d1b","repo":"mastra-ai/mastra","slug":"sub-agent-agent-id-returned-a-v1-model-but-does","errorCode":null,"errorMessage":"Sub-agent ${agent.id} returned a v1 model but does not implement generateLegacy","messagePattern":"Sub-agent (.+?) returned a v1 model but does not implement generateLegacy","errorType":"exception","errorClass":"Error","httpStatus":null,"severity":"error","filePath":"packages/core/src/agent/agent.ts","lineNumber":5456,"sourceCode":"                    runId: generateResult.runId,\n                    isAgentSuspend: true,\n                  });\n                }\n\n                result = {\n                  text: generateResult.text,\n                  finishReason: generateResult.finishReason,\n                  subAgentThreadId: effectiveGenerateThreadId,\n                  subAgentResourceId: effectiveGenerateResourceId,\n                  subAgentToolResults,\n                  usage: generateResult.usage,\n                };\n              } else if (\n                (methodType === 'generate' || methodType === 'generateLegacy') &&\n                resolvedModelVersion === 'v1'\n              ) {\n                if (typeof resolvedAgent.generateLegacy !== 'function') {\n                  throw new Error(`Sub-agent ${agent.id} returned a v1 model but does not implement generateLegacy`);\n                }\n                const generateResult = await resolvedAgent.generateLegacy(messagesForSubAgent, {\n                  requestContext: subAgentRequestContext,\n                  actor: invocationActor,\n                  ...resolveObservabilityContext(context ?? {}),\n                  context: filteredContextMessages as unknown as CoreMessage[],\n                  ...subAgentAbortOptions,\n                });\n                result = {\n                  text: generateResult.text,\n                  ...(generateResult.usage ? { usage: generateResult.usage } : {}),\n                };\n              } else if (\n                (methodType === 'stream' || methodType === 'streamLegacy') &&\n                supportedLanguageModelSpecifications.includes(resolvedModelVersion)\n              ) {\n                const streamResult = shouldResumeSubAgent\n                  ? await resolvedAgent.resumeStream(resumeData, {","sourceCodeStart":5438,"sourceCodeEnd":5474,"githubUrl":"https://github.com/mastra-ai/mastra/blob/75dd419e613fe9c39f846ffc500716141b74fda6/packages/core/src/agent/agent.ts#L5438-L5474","documentation":"Thrown when a sub-agent, invoked from a parent agent's tool/delegation path, resolves to a 'v1' model version (legacy AI SDK v1 model surface) but the sub-agent instance does not expose a `generateLegacy` method. The parent cannot drive a v1 model through the modern generate path, so it fails explicitly instead of erroring opaquely later.","triggerScenarios":"Parent agent delegation/tool call with `methodType === 'generate' || 'generateLegacy'`, the sub-agent resolves `resolvedModelVersion === 'v1'`, and `typeof resolvedAgent.generateLegacy !== 'function'` — typically a mixed-version setup where agents were constructed by different @mastra/core or model-provider versions.","commonSituations":"Gradual migration from legacy to v2 models where some agents still hold v1 model instances; mixing agents from different mastra packages in one network; a custom Agent subclass overriding generate and dropping the legacy shim.","solutions":["Upgrade the sub-agent's model to the current (v2) model version so the legacy path is not needed","Ensure all agents come from the same @mastra/core version so generateLegacy is present","If you must keep the v1 model, use a core version whose Agent implements generateLegacy","Check for a custom Agent subclass that overrides/omits generateLegacy and restore it"],"exampleFix":"// before\nsubAgent = new Agent({ name: 'child', model: legacyV1Model });\n// after\nsubAgent = new Agent({ name: 'child', model: currentV2Model });","handlingStrategy":"validation","validationCode":"function subAgentSupportsGenerate(agent) {\n  return typeof agent.generate === 'function' &&\n    (agent.generateLegacy !== undefined || agent.__modelVersion !== 'v1');\n}","typeGuard":"function canGenerateLegacy(agent) {\n  return typeof (agent as { generateLegacy?: unknown })?.generateLegacy === 'function';\n}","tryCatchPattern":"try {\n  return await parentAgent.generate(prompt, { agents: [subAgent] });\n} catch (e) {\n  if (typeof e?.message === 'string' && e.message.includes('does not implement generateLegacy')) {\n    throw new Error(`Sub-agent ${subAgentName} needs a v2 model or an upgraded core version`);\n  }\n  throw e;\n}","preventionTips":["Keep all agents on the same @mastra/core version in a network","Migrate all models off v1/legacy adapters before mixing agents","Add a startup check that each sub-agent exposes the needed generate/stream methods","Pin model provider packages consistently across services"],"tags":["agent","delegation","sub-agent","model-version","v1-legacy","compatibility"],"backgroundTag":"model-version-mismatch","analyzedSha":"75dd419e613fe9c39f846ffc500716141b74fda6","analyzedAt":"2026-08-30T00:15:31.844Z","schemaVersion":2},"datasetVersion":"2026-08-30T03:17:51.788Z"}