瀏覽代碼

fix: ensure Decimal values in metadata are JSON serializable (fixes #19936) (#19955)

Co-authored-by: crazywoola <427733928@qq.com>
tags/1.4.1
Zihe JI 5 月之前
父節點
當前提交
87f9d11d65
沒有連結到貢獻者的電子郵件帳戶。

+ 4
- 1
api/core/repositories/sqlalchemy_workflow_node_execution_repository.py 查看文件

from sqlalchemy.engine import Engine from sqlalchemy.engine import Engine
from sqlalchemy.orm import sessionmaker from sqlalchemy.orm import sessionmaker


from core.model_runtime.utils.encoders import jsonable_encoder
from core.workflow.entities.node_entities import NodeRunMetadataKey from core.workflow.entities.node_entities import NodeRunMetadataKey
from core.workflow.entities.node_execution_entities import ( from core.workflow.entities.node_execution_entities import (
NodeExecution, NodeExecution,
db_model.status = domain_model.status db_model.status = domain_model.status
db_model.error = domain_model.error db_model.error = domain_model.error
db_model.elapsed_time = domain_model.elapsed_time db_model.elapsed_time = domain_model.elapsed_time
db_model.execution_metadata = json.dumps(domain_model.metadata) if domain_model.metadata else None
db_model.execution_metadata = (
json.dumps(jsonable_encoder(domain_model.metadata)) if domain_model.metadata else None
)
db_model.created_at = domain_model.created_at db_model.created_at = domain_model.created_at
db_model.created_by_role = self._creator_user_role db_model.created_by_role = self._creator_user_role
db_model.created_by = self._creator_user_id db_model.created_by = self._creator_user_id

+ 4
- 2
api/tests/unit_tests/repositories/workflow_node_execution/test_sqlalchemy_repository.py 查看文件



import json import json
from datetime import datetime from datetime import datetime
from decimal import Decimal
from unittest.mock import MagicMock, PropertyMock from unittest.mock import MagicMock, PropertyMock


import pytest import pytest
from pytest_mock import MockerFixture from pytest_mock import MockerFixture
from sqlalchemy.orm import Session, sessionmaker from sqlalchemy.orm import Session, sessionmaker


from core.model_runtime.utils.encoders import jsonable_encoder
from core.repositories import SQLAlchemyWorkflowNodeExecutionRepository from core.repositories import SQLAlchemyWorkflowNodeExecutionRepository
from core.workflow.entities.node_entities import NodeRunMetadataKey from core.workflow.entities.node_entities import NodeRunMetadataKey
from core.workflow.entities.node_execution_entities import NodeExecution, NodeExecutionStatus from core.workflow.entities.node_execution_entities import NodeExecution, NodeExecutionStatus
status=NodeExecutionStatus.RUNNING, status=NodeExecutionStatus.RUNNING,
error=None, error=None,
elapsed_time=1.5, elapsed_time=1.5,
metadata={NodeRunMetadataKey.TOTAL_TOKENS: 100},
metadata={NodeRunMetadataKey.TOTAL_TOKENS: 100, NodeRunMetadataKey.TOTAL_PRICE: Decimal("0.0")},
created_at=datetime.now(), created_at=datetime.now(),
finished_at=None, finished_at=None,
) )
assert db_model.inputs_dict == domain_model.inputs assert db_model.inputs_dict == domain_model.inputs
assert db_model.process_data_dict == domain_model.process_data assert db_model.process_data_dict == domain_model.process_data
assert db_model.outputs_dict == domain_model.outputs assert db_model.outputs_dict == domain_model.outputs
assert db_model.execution_metadata_dict == domain_model.metadata
assert db_model.execution_metadata_dict == jsonable_encoder(domain_model.metadata)


assert db_model.status == domain_model.status assert db_model.status == domain_model.status
assert db_model.error == domain_model.error assert db_model.error == domain_model.error

Loading…
取消
儲存