This is an automated email from the ASF dual-hosted git repository. xtsong pushed a commit to branch main in repository https://gitbox.apache.org/repos/asf/flink-agents.git
commit 3d28c238ead9487eb910006c0d3834586f83e237 Author: WenjinXie <wenjin...@gmail.com> AuthorDate: Tue Aug 5 10:09:53 2025 +0800 [hotfix] Move event and action to separate module. --- .../python_java_utils.py => api/events/__init__.py} | 18 ------------------ python/flink_agents/api/{ => events}/event.py | 7 ++++--- python/flink_agents/api/runner_context.py | 2 +- python/flink_agents/api/tests/test_decorators.py | 2 +- python/flink_agents/api/tests/test_event.py | 2 +- python/flink_agents/examples/agent_example.py | 2 +- python/flink_agents/examples/my_agent.py | 2 +- .../python_java_utils.py => plan/actions/__init__.py} | 18 ------------------ python/flink_agents/plan/{ => actions}/action.py | 2 +- .../python_agent_plan_compatibility_test_agent.py | 2 +- python/flink_agents/plan/tests/resources/action.json | 2 +- python/flink_agents/plan/tests/test_action.py | 6 +++--- python/flink_agents/plan/tests/test_function.py | 2 +- python/flink_agents/runtime/flink_runner_context.py | 2 +- python/flink_agents/runtime/local_runner.py | 2 +- python/flink_agents/runtime/python_java_utils.py | 2 +- .../runtime/tests/test_local_execution_environment.py | 2 +- 17 files changed, 20 insertions(+), 55 deletions(-) diff --git a/python/flink_agents/runtime/python_java_utils.py b/python/flink_agents/api/events/__init__.py similarity index 60% copy from python/flink_agents/runtime/python_java_utils.py copy to python/flink_agents/api/events/__init__.py index a4bf1b8..e154fad 100644 --- a/python/flink_agents/runtime/python_java_utils.py +++ b/python/flink_agents/api/events/__init__.py @@ -15,21 +15,3 @@ # See the License for the specific language governing permissions and # limitations under the License. ################################################################################# -from typing import Any - -import cloudpickle - -from flink_agents.api.event import InputEvent - - -def convert_to_python_object(bytesObject: bytes) -> Any: - """Used for deserializing Python objects.""" - return cloudpickle.loads(bytesObject) - -def wrap_to_input_event(bytesObject: bytes) -> bytes: - """Wrap data to python input event and serialize.""" - return cloudpickle.dumps(InputEvent(input=cloudpickle.loads(bytesObject))) - -def get_output_from_output_event(bytesObject: bytes) -> Any: - """Get output data from OutputEvent and serialize.""" - return cloudpickle.dumps(convert_to_python_object(bytesObject).output) diff --git a/python/flink_agents/api/event.py b/python/flink_agents/api/events/event.py similarity index 94% rename from python/flink_agents/api/event.py rename to python/flink_agents/api/events/event.py index 4f85648..600de78 100644 --- a/python/flink_agents/api/event.py +++ b/python/flink_agents/api/events/event.py @@ -32,12 +32,13 @@ class Event(BaseModel, ABC, extra="allow"): id : UUID Unique identifier for the event, automatically generated using uuid4. """ + id: UUID = Field(default_factory=uuid4) - @model_validator(mode='after') - def validate_extra(self) -> 'Event': + @model_validator(mode="after") + def validate_extra(self) -> "Event": """Ensure init fields is serializable.""" - #TODO: support Event contains Row field be json serializable + # TODO: support Event contains Row field be json serializable for value in self.model_dump().values(): if isinstance(value, Row): return self diff --git a/python/flink_agents/api/runner_context.py b/python/flink_agents/api/runner_context.py index f06d27d..9833fe4 100644 --- a/python/flink_agents/api/runner_context.py +++ b/python/flink_agents/api/runner_context.py @@ -18,7 +18,7 @@ from abc import ABC, abstractmethod from typing import Any, Callable, Tuple, Dict -from flink_agents.api.event import Event +from flink_agents.api.events.event import Event from flink_agents.api.memory_object import MemoryObject from flink_agents.api.metric_group import MetricGroup from flink_agents.api.resource import Resource, ResourceType diff --git a/python/flink_agents/api/tests/test_decorators.py b/python/flink_agents/api/tests/test_decorators.py index 7d20127..3ad5b54 100644 --- a/python/flink_agents/api/tests/test_decorators.py +++ b/python/flink_agents/api/tests/test_decorators.py @@ -20,7 +20,7 @@ from typing import List import pytest from flink_agents.api.decorators import action -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.api.runner_context import RunnerContext diff --git a/python/flink_agents/api/tests/test_event.py b/python/flink_agents/api/tests/test_event.py index eeed674..754bade 100644 --- a/python/flink_agents/api/tests/test_event.py +++ b/python/flink_agents/api/tests/test_event.py @@ -22,7 +22,7 @@ from pydantic import ValidationError from pydantic_core import PydanticSerializationError from pyflink.common import Row -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent def test_event_init_serializable() -> None: #noqa D103 diff --git a/python/flink_agents/examples/agent_example.py b/python/flink_agents/examples/agent_example.py index f9e008d..56487cb 100644 --- a/python/flink_agents/examples/agent_example.py +++ b/python/flink_agents/examples/agent_example.py @@ -19,7 +19,7 @@ from typing import Any from flink_agents.api.agent import Agent from flink_agents.api.decorators import action -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.api.execution_environment import AgentsExecutionEnvironment from flink_agents.api.runner_context import RunnerContext diff --git a/python/flink_agents/examples/my_agent.py b/python/flink_agents/examples/my_agent.py index b810d64..cb119d8 100644 --- a/python/flink_agents/examples/my_agent.py +++ b/python/flink_agents/examples/my_agent.py @@ -24,7 +24,7 @@ from pydantic import BaseModel from flink_agents.api.agent import Agent from flink_agents.api.decorators import action -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.api.runner_context import RunnerContext diff --git a/python/flink_agents/runtime/python_java_utils.py b/python/flink_agents/plan/actions/__init__.py similarity index 60% copy from python/flink_agents/runtime/python_java_utils.py copy to python/flink_agents/plan/actions/__init__.py index a4bf1b8..e154fad 100644 --- a/python/flink_agents/runtime/python_java_utils.py +++ b/python/flink_agents/plan/actions/__init__.py @@ -15,21 +15,3 @@ # See the License for the specific language governing permissions and # limitations under the License. ################################################################################# -from typing import Any - -import cloudpickle - -from flink_agents.api.event import InputEvent - - -def convert_to_python_object(bytesObject: bytes) -> Any: - """Used for deserializing Python objects.""" - return cloudpickle.loads(bytesObject) - -def wrap_to_input_event(bytesObject: bytes) -> bytes: - """Wrap data to python input event and serialize.""" - return cloudpickle.dumps(InputEvent(input=cloudpickle.loads(bytesObject))) - -def get_output_from_output_event(bytesObject: bytes) -> Any: - """Get output data from OutputEvent and serialize.""" - return cloudpickle.dumps(convert_to_python_object(bytesObject).output) diff --git a/python/flink_agents/plan/action.py b/python/flink_agents/plan/actions/action.py similarity index 98% rename from python/flink_agents/plan/action.py rename to python/flink_agents/plan/actions/action.py index eb94e55..5e9a9f6 100644 --- a/python/flink_agents/plan/action.py +++ b/python/flink_agents/plan/actions/action.py @@ -19,7 +19,7 @@ from typing import List from pydantic import BaseModel, field_serializer, model_validator -from flink_agents.api.event import Event +from flink_agents.api.events.event import Event from flink_agents.api.runner_context import RunnerContext from flink_agents.plan.function import Function, JavaFunction, PythonFunction diff --git a/python/flink_agents/plan/tests/compatibility/python_agent_plan_compatibility_test_agent.py b/python/flink_agents/plan/tests/compatibility/python_agent_plan_compatibility_test_agent.py index 30e1b82..f0d440d 100644 --- a/python/flink_agents/plan/tests/compatibility/python_agent_plan_compatibility_test_agent.py +++ b/python/flink_agents/plan/tests/compatibility/python_agent_plan_compatibility_test_agent.py @@ -17,7 +17,7 @@ ################################################################################# from flink_agents.api.agent import Agent from flink_agents.api.decorators import action -from flink_agents.api.event import Event, InputEvent +from flink_agents.api.events.event import Event, InputEvent from flink_agents.api.runner_context import RunnerContext diff --git a/python/flink_agents/plan/tests/resources/action.json b/python/flink_agents/plan/tests/resources/action.json index ae2b1d4..da2cf91 100644 --- a/python/flink_agents/plan/tests/resources/action.json +++ b/python/flink_agents/plan/tests/resources/action.json @@ -6,6 +6,6 @@ "func_type": "PythonFunction" }, "listen_event_types": [ - "flink_agents.api.event.InputEvent" + "flink_agents.api.events.event.InputEvent" ] } \ No newline at end of file diff --git a/python/flink_agents/plan/tests/test_action.py b/python/flink_agents/plan/tests/test_action.py index 79ed2e7..053053d 100644 --- a/python/flink_agents/plan/tests/test_action.py +++ b/python/flink_agents/plan/tests/test_action.py @@ -20,9 +20,9 @@ from pathlib import Path import pytest -from flink_agents.api.event import InputEvent +from flink_agents.api.events.event import InputEvent from flink_agents.api.runner_context import RunnerContext -from flink_agents.plan.action import Action +from flink_agents.plan.actions.action import Action from flink_agents.plan.function import PythonFunction @@ -71,7 +71,7 @@ def test_action_deserialize(action: Action) -> None: # noqa: D103 expected_json = f.read() action = Action.model_validate_json(expected_json) assert action.name == 'legal' - assert action.listen_event_types == ['flink_agents.api.event.InputEvent'] + assert action.listen_event_types == ['flink_agents.api.events.event.InputEvent'] func = action.exec assert func.module == 'flink_agents.plan.tests.test_action' assert func.qualname == 'legal_signature' diff --git a/python/flink_agents/plan/tests/test_function.py b/python/flink_agents/plan/tests/test_function.py index f79e7bb..c11ee3b 100644 --- a/python/flink_agents/plan/tests/test_function.py +++ b/python/flink_agents/plan/tests/test_function.py @@ -23,7 +23,7 @@ from typing import TYPE_CHECKING, Any, Callable, Dict, Generator, Tuple import pytest -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.plan.function import ( PythonFunction, _is_function_cacheable, diff --git a/python/flink_agents/runtime/flink_runner_context.py b/python/flink_agents/runtime/flink_runner_context.py index 5f3bb90..16a3014 100644 --- a/python/flink_agents/runtime/flink_runner_context.py +++ b/python/flink_agents/runtime/flink_runner_context.py @@ -20,7 +20,7 @@ from typing import Any, Callable, Tuple, Dict import cloudpickle from typing_extensions import override -from flink_agents.api.event import Event +from flink_agents.api.events.event import Event from flink_agents.api.resource import Resource, ResourceType from flink_agents.api.runner_context import RunnerContext from flink_agents.plan.agent_plan import AgentPlan diff --git a/python/flink_agents/runtime/local_runner.py b/python/flink_agents/runtime/local_runner.py index b4bd7c4..392e00e 100644 --- a/python/flink_agents/runtime/local_runner.py +++ b/python/flink_agents/runtime/local_runner.py @@ -23,7 +23,7 @@ from typing import Any, Dict, List, Callable, Tuple, Generator from typing_extensions import override from flink_agents.api.agent import Agent -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.api.memory_object import MemoryObject from flink_agents.api.metric_group import MetricGroup from flink_agents.api.resource import Resource, ResourceType diff --git a/python/flink_agents/runtime/python_java_utils.py b/python/flink_agents/runtime/python_java_utils.py index a4bf1b8..9f96a62 100644 --- a/python/flink_agents/runtime/python_java_utils.py +++ b/python/flink_agents/runtime/python_java_utils.py @@ -19,7 +19,7 @@ from typing import Any import cloudpickle -from flink_agents.api.event import InputEvent +from flink_agents.api.events.event import InputEvent def convert_to_python_object(bytesObject: bytes) -> Any: diff --git a/python/flink_agents/runtime/tests/test_local_execution_environment.py b/python/flink_agents/runtime/tests/test_local_execution_environment.py index 322f9c5..9be22ce 100644 --- a/python/flink_agents/runtime/tests/test_local_execution_environment.py +++ b/python/flink_agents/runtime/tests/test_local_execution_environment.py @@ -21,7 +21,7 @@ import pytest from flink_agents.api.agent import Agent from flink_agents.api.decorators import action -from flink_agents.api.event import Event, InputEvent, OutputEvent +from flink_agents.api.events.event import Event, InputEvent, OutputEvent from flink_agents.api.execution_environment import AgentsExecutionEnvironment from flink_agents.api.runner_context import RunnerContext