You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

1234567891011121314151617181920212223242526272829303132333435363738394041424344
  1. from contextvars import ContextVar
  2. from threading import Lock
  3. from typing import TYPE_CHECKING
  4. from contexts.wrapper import RecyclableContextVar
  5. from core.datasource.__base.datasource_provider import DatasourcePluginProviderController
  6. if TYPE_CHECKING:
  7. from core.model_runtime.entities.model_entities import AIModelEntity
  8. from core.plugin.entities.plugin_daemon import PluginModelProviderEntity
  9. from core.tools.plugin_tool.provider import PluginToolProviderController
  10. from core.workflow.entities.variable_pool import VariablePool
  11. """
  12. To avoid race-conditions caused by gunicorn thread recycling, using RecyclableContextVar to replace with
  13. """
  14. plugin_tool_providers: RecyclableContextVar[dict[str, "PluginToolProviderController"]] = RecyclableContextVar(
  15. ContextVar("plugin_tool_providers")
  16. )
  17. plugin_tool_providers_lock: RecyclableContextVar[Lock] = RecyclableContextVar(ContextVar("plugin_tool_providers_lock"))
  18. plugin_model_providers: RecyclableContextVar[list["PluginModelProviderEntity"] | None] = RecyclableContextVar(
  19. ContextVar("plugin_model_providers")
  20. )
  21. plugin_model_providers_lock: RecyclableContextVar[Lock] = RecyclableContextVar(
  22. ContextVar("plugin_model_providers_lock")
  23. )
  24. plugin_model_schema_lock: RecyclableContextVar[Lock] = RecyclableContextVar(ContextVar("plugin_model_schema_lock"))
  25. plugin_model_schemas: RecyclableContextVar[dict[str, "AIModelEntity"]] = RecyclableContextVar(
  26. ContextVar("plugin_model_schemas")
  27. )
  28. datasource_plugin_providers: RecyclableContextVar[dict[str, "DatasourcePluginProviderController"]] = (
  29. RecyclableContextVar(ContextVar("datasource_plugin_providers"))
  30. )
  31. datasource_plugin_providers_lock: RecyclableContextVar[Lock] = RecyclableContextVar(
  32. ContextVar("datasource_plugin_providers_lock")
  33. )