langchain-ai/deepagents · warning

Skipping {group} plugin {plugin_label}: entry point {ep.valu

Error message

Skipping {group} plugin {plugin_label}: entry point {ep.value!r} did not resolve to a callable.

What it means

Deep Agents loads builtin profile plugins via importlib entry points. After resolving an entry point, if the loaded object is not callable, `_invoke_profile_plugins` skips that plugin, logs, and emits this warning rather than crashing startup. The plugin's registration never runs.

Source

Thrown at libs/deepagents/deepagents/profiles/_builtin_profiles.py:229

        eps = entry_points(group=group)
    except Exception as exc:  # noqa: BLE001
        msg = f"Failed to enumerate {group} entry points; no third-party plugins in this group will load: {type(exc).__name__}: {exc}"
        logger.warning(msg, exc_info=True)
        warnings.warn(msg, stacklevel=2)
        return
    for ep in eps:
        plugin_label = _format_plugin_label(ep)
        try:
            register = ep.load()
        except Exception as exc:
            msg = f"Skipping {group} plugin {plugin_label}: failed to load entry point {ep.value!r}: {type(exc).__name__}: {exc}"
            logger.exception(msg)
            warnings.warn(msg, stacklevel=2)
            continue
        if not callable(register):
            msg = f"Skipping {group} plugin {plugin_label}: entry point {ep.value!r} did not resolve to a callable."
            logger.error(msg)
            warnings.warn(msg, stacklevel=2)
            continue
        try:
            register()
        except Exception as exc:
            msg = f"Skipping {group} plugin {plugin_label}: registration callable {ep.value!r} raised: {type(exc).__name__}: {exc}"
            logger.exception(msg)
            warnings.warn(msg, stacklevel=2)

View on GitHub (pinned to a1af029e6e)

Solutions

  1. Inspect the referenced entry-point value and make it point to a callable (module:function) that performs registration
  2. Reinstall/upgrade the offending plugin package so its metadata matches the current code
  3. Check for duplicate/stale installs (pip show / importlib.metadata.entry_points) pointing at outdated modules

Example fix

# before (pyproject.toml)
[project.entry-points.deepagents_profiles]
my_plugin = "mypkg.plugin"
# after
[project.entry-points.deepagents_profiles]
my_plugin = "mypkg.plugin:register"
Defensive patterns

Strategy: validation

Validate before calling

from importlib.metadata import entry_points
for ep in entry_points(group="deepagents_profiles"):
    obj = ep.load()
    assert callable(obj), f"entry point {ep.value!r} is not callable"

Type guard

def is_callable_entry_point(ep) -> bool:
    try:
        return callable(ep.load())
    except Exception:
        return False

Try / catch

import warnings
with warnings.catch_warnings(record=True) as caught:
    warnings.simplefilter("always")
    load_profiles()
for w in caught:
    if "did not resolve to a callable" in str(w.message):
        logger.warning("plugin skipped: %s", w.message)

Prevention

When it happens

Trigger: An installed distribution declares an entry point (in the relevant plugin group) whose `ep.value` resolves to a module attribute that is not callable — e.g. pointing at a module, class attribute, or constant instead of a function.

Common situations: Hand-edited entry-point declarations in pyproject.toml/setup.cfg; renamed or moved registration functions after a package refactor so the entry-point target now resolves to a non-callable shim; stale installed metadata from an old version still on sys.path.

Related errors


AI-assisted analysis of langchain-ai/deepagents@a1af029e6e (2026-08-29). Data as JSON: /api/errors/f73a1bab4265493f. Report an issue: GitHub.