From 90384b26b3e4677e7d909f356fb2f5d49942e19f Mon Sep 17 00:00:00 2001 From: CodingOnStar Date: Thu, 16 Apr 2026 16:58:52 +0800 Subject: [PATCH] merge --- api/controllers/console/__init__.py | 2 +- api/controllers/console/app/app.py | 2 +- api/core/evaluation/base_evaluation_instance.py | 3 ++- api/core/evaluation/entities/judgment_entity.py | 3 +-- api/core/evaluation/judgment/processor.py | 5 +++-- api/core/evaluation/runners/agent_evaluation_runner.py | 3 ++- api/core/evaluation/runners/base_evaluation_runner.py | 3 ++- api/core/evaluation/runners/llm_evaluation_runner.py | 3 ++- api/core/evaluation/runners/retrieval_evaluation_runner.py | 3 ++- api/core/evaluation/runners/snippet_evaluation_runner.py | 3 ++- api/core/evaluation/runners/workflow_evaluation_runner.py | 3 ++- api/models/evaluation.py | 2 +- api/services/billing_service.py | 2 ++ api/services/evaluation_service.py | 6 +++--- api/services/snippet_dsl_service.py | 4 ++-- api/services/snippet_generate_service.py | 2 +- api/services/snippet_service.py | 2 +- api/services/workflow_service.py | 2 +- api/tasks/evaluation_task.py | 2 +- api/tests/unit_tests/services/test_webhook_service.py | 6 ------ 20 files changed, 32 insertions(+), 29 deletions(-) diff --git a/api/controllers/console/__init__.py b/api/controllers/console/__init__.py index 5e9cfe8f3f..9249f891c4 100644 --- a/api/controllers/console/__init__.py +++ b/api/controllers/console/__init__.py @@ -120,10 +120,10 @@ from .explore import ( saved_message, trial, ) -from .socketio import workflow as socketio_workflow # pyright: ignore[reportUnusedImport] # Import snippet controllers from .snippets import snippet_workflow, snippet_workflow_draft_variable +from .socketio import workflow as socketio_workflow # pyright: ignore[reportUnusedImport] # Import tag controllers from .tag import tags diff --git a/api/controllers/console/app/app.py b/api/controllers/console/app/app.py index 06810d7094..214545bac8 100644 --- a/api/controllers/console/app/app.py +++ b/api/controllers/console/app/app.py @@ -568,7 +568,7 @@ class AppApi(Resource): row = db.session.execute( select(Workflow.type).where(Workflow.id == app_model.workflow_id) ).scalar() - app_model.workflow_type = row if row else None + app_model.workflow_type = row or None else: app_model.workflow_type = None diff --git a/api/core/evaluation/base_evaluation_instance.py b/api/core/evaluation/base_evaluation_instance.py index 67fbf0374c..76cbe2f9c5 100644 --- a/api/core/evaluation/base_evaluation_instance.py +++ b/api/core/evaluation/base_evaluation_instance.py @@ -3,6 +3,8 @@ from abc import ABC, abstractmethod from collections.abc import Mapping from typing import Any +from graphon.node_events.base import NodeRunResult + from core.evaluation.entities.evaluation_entity import ( CustomizedMetrics, EvaluationCategory, @@ -11,7 +13,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationMetric, NodeInfo, ) -from graphon.node_events.base import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/entities/judgment_entity.py b/api/core/evaluation/entities/judgment_entity.py index 4a59879c06..c871d95520 100644 --- a/api/core/evaluation/entities/judgment_entity.py +++ b/api/core/evaluation/entities/judgment_entity.py @@ -26,9 +26,8 @@ Typical usage:: from collections.abc import Sequence from typing import Any, Literal -from pydantic import BaseModel, Field - from graphon.utils.condition.entities import SupportedComparisonOperator +from pydantic import BaseModel, Field class JudgmentCondition(BaseModel): diff --git a/api/core/evaluation/judgment/processor.py b/api/core/evaluation/judgment/processor.py index 7a0ce38b75..7bf4cdf5f5 100644 --- a/api/core/evaluation/judgment/processor.py +++ b/api/core/evaluation/judgment/processor.py @@ -14,14 +14,15 @@ import logging from collections.abc import Sequence from typing import Any, cast +from graphon.utils.condition.entities import SupportedComparisonOperator +from graphon.utils.condition.processor import _evaluate_condition # pyright: ignore[reportPrivateUsage] + from core.evaluation.entities.judgment_entity import ( JudgmentCondition, JudgmentConditionResult, JudgmentConfig, JudgmentResult, ) -from graphon.utils.condition.entities import SupportedComparisonOperator -from graphon.utils.condition.processor import _evaluate_condition # pyright: ignore[reportPrivateUsage] logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/agent_evaluation_runner.py b/api/core/evaluation/runners/agent_evaluation_runner.py index ef3bbe704c..fbeca41cf9 100644 --- a/api/core/evaluation/runners/agent_evaluation_runner.py +++ b/api/core/evaluation/runners/agent_evaluation_runner.py @@ -2,6 +2,8 @@ import logging from collections.abc import Mapping from typing import Any +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, @@ -9,7 +11,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationItemResult, ) from core.evaluation.runners.base_evaluation_runner import BaseEvaluationRunner -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/base_evaluation_runner.py b/api/core/evaluation/runners/base_evaluation_runner.py index 9046c2ddad..fe3fb7c61f 100644 --- a/api/core/evaluation/runners/base_evaluation_runner.py +++ b/api/core/evaluation/runners/base_evaluation_runner.py @@ -11,12 +11,13 @@ persisting to the database) is handled by the evaluation task, not the runner. import logging from abc import ABC, abstractmethod +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, EvaluationItemResult, ) -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/llm_evaluation_runner.py b/api/core/evaluation/runners/llm_evaluation_runner.py index 4b1c244838..b9322a11cc 100644 --- a/api/core/evaluation/runners/llm_evaluation_runner.py +++ b/api/core/evaluation/runners/llm_evaluation_runner.py @@ -2,6 +2,8 @@ import logging from collections.abc import Mapping from typing import Any +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, @@ -9,7 +11,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationItemResult, ) from core.evaluation.runners.base_evaluation_runner import BaseEvaluationRunner -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/retrieval_evaluation_runner.py b/api/core/evaluation/runners/retrieval_evaluation_runner.py index 66b8ab7360..5188e05451 100644 --- a/api/core/evaluation/runners/retrieval_evaluation_runner.py +++ b/api/core/evaluation/runners/retrieval_evaluation_runner.py @@ -1,6 +1,8 @@ import logging from typing import Any +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, @@ -8,7 +10,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationItemResult, ) from core.evaluation.runners.base_evaluation_runner import BaseEvaluationRunner -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/snippet_evaluation_runner.py b/api/core/evaluation/runners/snippet_evaluation_runner.py index bc516f9ee8..7c5be24144 100644 --- a/api/core/evaluation/runners/snippet_evaluation_runner.py +++ b/api/core/evaluation/runners/snippet_evaluation_runner.py @@ -8,6 +8,8 @@ import logging from collections.abc import Mapping from typing import Any +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, @@ -15,7 +17,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationItemResult, ) from core.evaluation.runners.base_evaluation_runner import BaseEvaluationRunner -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/core/evaluation/runners/workflow_evaluation_runner.py b/api/core/evaluation/runners/workflow_evaluation_runner.py index e1cc9defdb..9f64aaa70d 100644 --- a/api/core/evaluation/runners/workflow_evaluation_runner.py +++ b/api/core/evaluation/runners/workflow_evaluation_runner.py @@ -2,6 +2,8 @@ import logging from collections.abc import Mapping from typing import Any +from graphon.node_events import NodeRunResult + from core.evaluation.base_evaluation_instance import BaseEvaluationInstance from core.evaluation.entities.evaluation_entity import ( DefaultMetric, @@ -9,7 +11,6 @@ from core.evaluation.entities.evaluation_entity import ( EvaluationItemResult, ) from core.evaluation.runners.base_evaluation_runner import BaseEvaluationRunner -from graphon.node_events import NodeRunResult logger = logging.getLogger(__name__) diff --git a/api/models/evaluation.py b/api/models/evaluation.py index 680d6ab31c..fce50c5f48 100644 --- a/api/models/evaluation.py +++ b/api/models/evaluation.py @@ -85,7 +85,7 @@ class EvaluationConfiguration(Base): """Return judgment config (stored in the judgement_conditions column).""" if self.judgement_conditions: parsed = json.loads(self.judgement_conditions) - return parsed if parsed else None + return parsed or None return None @property diff --git a/api/services/billing_service.py b/api/services/billing_service.py index eeaddfee2f..068c93d94f 100644 --- a/api/services/billing_service.py +++ b/api/services/billing_service.py @@ -53,6 +53,8 @@ class QuotaReleaseResult(TypedDict): _quota_reserve_adapter = TypeAdapter(QuotaReserveResult) _quota_commit_adapter = TypeAdapter(QuotaCommitResult) _quota_release_adapter = TypeAdapter(QuotaReleaseResult) + + class _BillingQuota(TypedDict): size: int limit: int diff --git a/api/services/evaluation_service.py b/api/services/evaluation_service.py index 196af2a617..3f4500c061 100644 --- a/api/services/evaluation_service.py +++ b/api/services/evaluation_service.py @@ -4,6 +4,8 @@ import logging from collections.abc import Mapping from typing import Any, Union +from graphon.enums import WorkflowNodeExecutionMetadataKey +from graphon.node_events.base import NodeRunResult from openpyxl import Workbook, load_workbook from openpyxl.styles import Alignment, Border, Font, PatternFill, Side from openpyxl.utils import get_column_letter @@ -23,8 +25,6 @@ from core.evaluation.entities.evaluation_entity import ( NodeInfo, ) from core.evaluation.evaluation_manager import EvaluationManager -from graphon.enums import WorkflowNodeExecutionMetadataKey -from graphon.node_events.base import NodeRunResult from models.evaluation import ( EvaluationConfiguration, EvaluationRun, @@ -813,9 +813,9 @@ class EvaluationService: workflow_run_id: str, ) -> dict[str, NodeRunResult]: """Query all node execution records for a workflow run.""" + from graphon.enums import WorkflowNodeExecutionStatus from sqlalchemy import asc, select - from graphon.enums import WorkflowNodeExecutionStatus from models.workflow import WorkflowNodeExecutionModel stmt = ( diff --git a/api/services/snippet_dsl_service.py b/api/services/snippet_dsl_service.py index f074a40f09..8dbd7085b7 100644 --- a/api/services/snippet_dsl_service.py +++ b/api/services/snippet_dsl_service.py @@ -7,6 +7,8 @@ from enum import StrEnum from urllib.parse import urlparse import yaml # type: ignore +from graphon.enums import BuiltinNodeTypes +from graphon.model_runtime.utils.encoders import jsonable_encoder from packaging import version from pydantic import BaseModel, Field from sqlalchemy import select @@ -15,8 +17,6 @@ from sqlalchemy.orm import Session from core.helper import ssrf_proxy from core.plugin.entities.plugin import PluginDependency from extensions.ext_redis import redis_client -from graphon.enums import BuiltinNodeTypes -from graphon.model_runtime.utils.encoders import jsonable_encoder from models import Account from models.snippet import CustomizedSnippet, SnippetType from models.workflow import Workflow diff --git a/api/services/snippet_generate_service.py b/api/services/snippet_generate_service.py index 5e0d25c8f7..230128d2b2 100644 --- a/api/services/snippet_generate_service.py +++ b/api/services/snippet_generate_service.py @@ -23,13 +23,13 @@ import logging from collections.abc import Generator, Mapping, Sequence from typing import Any, Union +from graphon.file.models import File from sqlalchemy.orm import make_transient from core.app.app_config.features.file_upload.manager import FileUploadConfigManager from core.app.apps.workflow.app_generator import WorkflowAppGenerator from core.app.entities.app_invoke_entities import InvokeFrom from factories import file_factory -from graphon.file.models import File from models import Account from models.model import AppMode, EndUser from models.snippet import CustomizedSnippet diff --git a/api/services/snippet_service.py b/api/services/snippet_service.py index a2cdc23f3d..f3b383d98b 100644 --- a/api/services/snippet_service.py +++ b/api/services/snippet_service.py @@ -4,12 +4,12 @@ from collections.abc import Mapping, Sequence from datetime import UTC, datetime from typing import Any +from graphon.enums import BuiltinNodeTypes, NodeType from sqlalchemy import func, select from sqlalchemy.orm import Session, sessionmaker from core.workflow.node_factory import LATEST_VERSION, NODE_TYPE_CLASSES_MAPPING from extensions.ext_database import db -from graphon.enums import BuiltinNodeTypes, NodeType from libs.infinite_scroll_pagination import InfiniteScrollPagination from models import Account from models.enums import WorkflowRunTriggeredFrom diff --git a/api/services/workflow_service.py b/api/services/workflow_service.py index b4ae59f1b4..aab41efe50 100644 --- a/api/services/workflow_service.py +++ b/api/services/workflow_service.py @@ -5,7 +5,7 @@ import uuid from collections.abc import Callable, Generator, Mapping, Sequence from typing import Any, cast -from graphon.entities import GraphInitParams, WorkflowNodeExecution +from graphon.entities import WorkflowNodeExecution from graphon.entities.graph_config import NodeConfigDict from graphon.entities.pause_reason import HumanInputRequired from graphon.enums import ( diff --git a/api/tasks/evaluation_task.py b/api/tasks/evaluation_task.py index 4e3f7acb2e..838a2b5d4b 100644 --- a/api/tasks/evaluation_task.py +++ b/api/tasks/evaluation_task.py @@ -4,6 +4,7 @@ import logging from typing import Any from celery import shared_task +from graphon.node_events import NodeRunResult from openpyxl import Workbook from openpyxl.styles import Alignment, Border, Font, PatternFill, Side from openpyxl.utils import get_column_letter @@ -27,7 +28,6 @@ from core.evaluation.runners.retrieval_evaluation_runner import RetrievalEvaluat from core.evaluation.runners.snippet_evaluation_runner import SnippetEvaluationRunner from core.evaluation.runners.workflow_evaluation_runner import WorkflowEvaluationRunner from extensions.ext_database import db -from graphon.node_events import NodeRunResult from libs.datetime_utils import naive_utc_now from models.enums import CreatorUserRole from models.evaluation import EvaluationRun, EvaluationRunItem, EvaluationRunStatus diff --git a/api/tests/unit_tests/services/test_webhook_service.py b/api/tests/unit_tests/services/test_webhook_service.py index 02fbe473df..bf645f9795 100644 --- a/api/tests/unit_tests/services/test_webhook_service.py +++ b/api/tests/unit_tests/services/test_webhook_service.py @@ -561,18 +561,13 @@ class TestWebhookServiceUnit: assert result == (mock_trigger, mock_workflow, mock_config, mock_data, None) - # === Merged from test_webhook_service_additional.py === from types import SimpleNamespace from typing import Any, cast -from unittest.mock import MagicMock -import pytest -from flask import Flask from graphon.variables.types import SegmentType -from werkzeug.datastructures import FileStorage from werkzeug.exceptions import RequestEntityTooLarge from core.workflow.nodes.trigger_webhook.entities import ( @@ -587,7 +582,6 @@ from models.trigger import WorkflowWebhookTrigger from models.workflow import Workflow from services.errors.app import QuotaExceededError from services.trigger import webhook_service as service_module -from services.trigger.webhook_service import WebhookService class _FakeQuery: