๐Ÿ“ฆ langgenius / dify

๐Ÿ“„ ext_forward_refs.py ยท 50 lines
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50import logging

from dify_app import DifyApp


def is_enabled() -> bool:
    return True


def init_app(app: DifyApp):
    """Resolve Pydantic forward refs that would otherwise cause circular imports.

    Rebuilds models in core.app.entities.app_invoke_entities with the real TraceQueueManager type.
    Safe to run multiple times.
    """
    logger = logging.getLogger(__name__)
    try:
        from core.app.entities.app_invoke_entities import (
            AdvancedChatAppGenerateEntity,
            AgentChatAppGenerateEntity,
            AppGenerateEntity,
            ChatAppGenerateEntity,
            CompletionAppGenerateEntity,
            ConversationAppGenerateEntity,
            EasyUIBasedAppGenerateEntity,
            RagPipelineGenerateEntity,
            WorkflowAppGenerateEntity,
        )
        from core.ops.ops_trace_manager import TraceQueueManager  # heavy import, do it at startup only

        ns = {"TraceQueueManager": TraceQueueManager}
        for Model in (
            AppGenerateEntity,
            EasyUIBasedAppGenerateEntity,
            ConversationAppGenerateEntity,
            ChatAppGenerateEntity,
            CompletionAppGenerateEntity,
            AgentChatAppGenerateEntity,
            AdvancedChatAppGenerateEntity,
            WorkflowAppGenerateEntity,
            RagPipelineGenerateEntity,
        ):
            try:
                Model.model_rebuild(_types_namespace=ns)
            except Exception as e:
                logger.debug("model_rebuild skipped for %s: %s", Model.__name__, e)
    except Exception as e:
        # Don't block app startup; just log at debug level.
        logger.debug("ext_forward_refs init skipped: %s", e)