waldiez 0.4.6__py3-none-any.whl → 0.4.8__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Potentially problematic release.
This version of waldiez might be problematic. Click here for more details.
- waldiez/__init__.py +5 -5
- waldiez/_version.py +1 -1
- waldiez/cli.py +112 -73
- waldiez/exporter.py +61 -19
- waldiez/exporting/__init__.py +25 -6
- waldiez/exporting/agent/__init__.py +7 -3
- waldiez/exporting/agent/code_execution.py +114 -0
- waldiez/exporting/agent/exporter.py +354 -0
- waldiez/exporting/agent/extras/__init__.py +15 -0
- waldiez/exporting/agent/extras/captain_agent_extras.py +315 -0
- waldiez/exporting/agent/extras/group/target.py +178 -0
- waldiez/exporting/agent/extras/group_manager_agent_extas.py +500 -0
- waldiez/exporting/agent/extras/group_member_extras.py +181 -0
- waldiez/exporting/agent/extras/handoffs/__init__.py +19 -0
- waldiez/exporting/agent/extras/handoffs/after_work.py +78 -0
- waldiez/exporting/agent/extras/handoffs/available.py +74 -0
- waldiez/exporting/agent/extras/handoffs/condition.py +158 -0
- waldiez/exporting/agent/extras/handoffs/handoff.py +171 -0
- waldiez/exporting/agent/extras/handoffs/target.py +189 -0
- waldiez/exporting/agent/extras/rag/__init__.py +10 -0
- waldiez/exporting/agent/{utils/rag_user/chroma_utils.py → extras/rag/chroma_extras.py} +16 -15
- waldiez/exporting/agent/{utils/rag_user/mongo_utils.py → extras/rag/mongo_extras.py} +10 -10
- waldiez/exporting/agent/{utils/rag_user/pgvector_utils.py → extras/rag/pgvector_extras.py} +13 -13
- waldiez/exporting/agent/{utils/rag_user/qdrant_utils.py → extras/rag/qdrant_extras.py} +13 -13
- waldiez/exporting/agent/{utils/rag_user/vector_db.py → extras/rag/vector_db_extras.py} +59 -46
- waldiez/exporting/agent/extras/rag_user_proxy_agent_extras.py +245 -0
- waldiez/exporting/agent/extras/reasoning_agent_extras.py +88 -0
- waldiez/exporting/agent/factory.py +95 -0
- waldiez/exporting/agent/processor.py +150 -0
- waldiez/exporting/agent/system_message.py +36 -0
- waldiez/exporting/agent/termination.py +50 -0
- waldiez/exporting/chats/__init__.py +7 -3
- waldiez/exporting/chats/exporter.py +97 -0
- waldiez/exporting/chats/factory.py +65 -0
- waldiez/exporting/chats/processor.py +226 -0
- waldiez/exporting/chats/utils/__init__.py +6 -5
- waldiez/exporting/chats/utils/common.py +11 -45
- waldiez/exporting/chats/utils/group.py +55 -0
- waldiez/exporting/chats/utils/nested.py +37 -52
- waldiez/exporting/chats/utils/sequential.py +72 -61
- waldiez/exporting/chats/utils/{single_chat.py → single.py} +48 -50
- waldiez/exporting/core/__init__.py +196 -0
- waldiez/exporting/core/constants.py +17 -0
- waldiez/exporting/core/content.py +69 -0
- waldiez/exporting/core/context.py +244 -0
- waldiez/exporting/core/enums.py +89 -0
- waldiez/exporting/core/errors.py +19 -0
- waldiez/exporting/core/exporter.py +390 -0
- waldiez/exporting/core/exporters.py +67 -0
- waldiez/exporting/core/extras/__init__.py +39 -0
- waldiez/exporting/core/extras/agent_extras/__init__.py +27 -0
- waldiez/exporting/core/extras/agent_extras/captain_extras.py +57 -0
- waldiez/exporting/core/extras/agent_extras/group_manager_extras.py +102 -0
- waldiez/exporting/core/extras/agent_extras/rag_user_extras.py +53 -0
- waldiez/exporting/core/extras/agent_extras/reasoning_extras.py +68 -0
- waldiez/exporting/core/extras/agent_extras/standard_extras.py +263 -0
- waldiez/exporting/core/extras/base.py +241 -0
- waldiez/exporting/core/extras/chat_extras.py +118 -0
- waldiez/exporting/core/extras/flow_extras.py +70 -0
- waldiez/exporting/core/extras/model_extras.py +73 -0
- waldiez/exporting/core/extras/path_resolver.py +93 -0
- waldiez/exporting/core/extras/serializer.py +138 -0
- waldiez/exporting/core/extras/tool_extras.py +82 -0
- waldiez/exporting/core/protocols.py +259 -0
- waldiez/exporting/core/result.py +705 -0
- waldiez/exporting/core/types.py +329 -0
- waldiez/exporting/core/utils/__init__.py +11 -0
- waldiez/exporting/core/utils/comment.py +33 -0
- waldiez/exporting/core/utils/llm_config.py +117 -0
- waldiez/exporting/core/validation.py +96 -0
- waldiez/exporting/flow/__init__.py +6 -2
- waldiez/exporting/flow/execution_generator.py +193 -0
- waldiez/exporting/flow/exporter.py +107 -0
- waldiez/exporting/flow/factory.py +94 -0
- waldiez/exporting/flow/file_generator.py +214 -0
- waldiez/exporting/flow/merger.py +387 -0
- waldiez/exporting/flow/orchestrator.py +411 -0
- waldiez/exporting/flow/utils/__init__.py +9 -36
- waldiez/exporting/flow/utils/common.py +206 -0
- waldiez/exporting/flow/utils/importing.py +373 -0
- waldiez/exporting/flow/utils/linting.py +200 -0
- waldiez/exporting/flow/utils/{logging_utils.py → logging.py} +23 -9
- waldiez/exporting/models/__init__.py +3 -1
- waldiez/exporting/models/exporter.py +233 -0
- waldiez/exporting/models/factory.py +66 -0
- waldiez/exporting/models/processor.py +139 -0
- waldiez/exporting/tools/__init__.py +11 -0
- waldiez/exporting/tools/exporter.py +207 -0
- waldiez/exporting/tools/factory.py +57 -0
- waldiez/exporting/tools/processor.py +248 -0
- waldiez/exporting/tools/registration.py +133 -0
- waldiez/io/__init__.py +128 -0
- waldiez/io/_ws.py +199 -0
- waldiez/io/models/__init__.py +60 -0
- waldiez/io/models/base.py +66 -0
- waldiez/io/models/constants.py +78 -0
- waldiez/io/models/content/__init__.py +23 -0
- waldiez/io/models/content/audio.py +43 -0
- waldiez/io/models/content/base.py +45 -0
- waldiez/io/models/content/file.py +43 -0
- waldiez/io/models/content/image.py +96 -0
- waldiez/io/models/content/text.py +37 -0
- waldiez/io/models/content/video.py +43 -0
- waldiez/io/models/user_input.py +269 -0
- waldiez/io/models/user_response.py +215 -0
- waldiez/io/mqtt.py +681 -0
- waldiez/io/redis.py +782 -0
- waldiez/io/structured.py +419 -0
- waldiez/io/utils.py +184 -0
- waldiez/io/ws.py +298 -0
- waldiez/logger.py +481 -0
- waldiez/models/__init__.py +108 -51
- waldiez/models/agents/__init__.py +34 -70
- waldiez/models/agents/agent/__init__.py +10 -4
- waldiez/models/agents/agent/agent.py +466 -65
- waldiez/models/agents/agent/agent_data.py +119 -47
- waldiez/models/agents/agent/agent_type.py +13 -2
- waldiez/models/agents/agent/code_execution.py +12 -12
- waldiez/models/agents/agent/human_input_mode.py +8 -0
- waldiez/models/agents/agent/{linked_skill.py → linked_tool.py} +7 -7
- waldiez/models/agents/agent/nested_chat.py +35 -7
- waldiez/models/agents/agent/termination_message.py +30 -22
- waldiez/models/agents/{swarm_agent → agent}/update_system_message.py +22 -22
- waldiez/models/agents/agents.py +58 -63
- waldiez/models/agents/assistant/assistant.py +4 -4
- waldiez/models/agents/assistant/assistant_data.py +13 -1
- waldiez/models/agents/{captain_agent → captain}/captain_agent.py +5 -5
- waldiez/models/agents/{captain_agent → captain}/captain_agent_data.py +5 -5
- waldiez/models/agents/extra_requirements.py +11 -16
- waldiez/models/agents/group_manager/group_manager.py +103 -13
- waldiez/models/agents/group_manager/group_manager_data.py +36 -14
- waldiez/models/agents/group_manager/speakers.py +77 -24
- waldiez/models/agents/{rag_user → rag_user_proxy}/__init__.py +16 -16
- waldiez/models/agents/rag_user_proxy/rag_user_proxy.py +64 -0
- waldiez/models/agents/{rag_user/rag_user_data.py → rag_user_proxy/rag_user_proxy_data.py} +6 -5
- waldiez/models/agents/{rag_user → rag_user_proxy}/retrieve_config.py +182 -114
- waldiez/models/agents/{rag_user → rag_user_proxy}/vector_db_config.py +13 -13
- waldiez/models/agents/reasoning/reasoning_agent.py +6 -6
- waldiez/models/agents/reasoning/reasoning_agent_data.py +110 -63
- waldiez/models/agents/reasoning/reasoning_agent_reason_config.py +38 -10
- waldiez/models/agents/user_proxy/user_proxy.py +11 -7
- waldiez/models/agents/user_proxy/user_proxy_data.py +2 -2
- waldiez/models/chat/__init__.py +2 -1
- waldiez/models/chat/chat.py +166 -87
- waldiez/models/chat/chat_data.py +99 -136
- waldiez/models/chat/chat_message.py +33 -23
- waldiez/models/chat/chat_nested.py +31 -30
- waldiez/models/chat/chat_summary.py +10 -8
- waldiez/models/common/__init__.py +52 -2
- waldiez/models/common/ag2_version.py +1 -1
- waldiez/models/common/base.py +38 -7
- waldiez/models/common/dict_utils.py +42 -17
- waldiez/models/common/handoff.py +459 -0
- waldiez/models/common/id_generator.py +19 -0
- waldiez/models/common/method_utils.py +130 -68
- waldiez/{exporting/base/utils → models/common}/naming.py +38 -61
- waldiez/models/common/waldiez_version.py +37 -0
- waldiez/models/flow/__init__.py +9 -2
- waldiez/models/flow/connection.py +18 -0
- waldiez/models/flow/flow.py +311 -215
- waldiez/models/flow/flow_data.py +207 -40
- waldiez/models/flow/info.py +85 -0
- waldiez/models/flow/naming.py +131 -0
- waldiez/models/model/__init__.py +7 -1
- waldiez/models/model/extra_requirements.py +3 -12
- waldiez/models/model/model.py +76 -21
- waldiez/models/model/model_data.py +108 -20
- waldiez/models/tool/__init__.py +16 -0
- waldiez/models/tool/extra_requirements.py +36 -0
- waldiez/models/{skill/skill.py → tool/tool.py} +88 -88
- waldiez/models/tool/tool_data.py +51 -0
- waldiez/models/tool/tool_type.py +8 -0
- waldiez/models/waldiez.py +97 -80
- waldiez/runner.py +114 -49
- waldiez/running/__init__.py +1 -1
- waldiez/running/environment.py +49 -68
- waldiez/running/gen_seq_diagram.py +16 -14
- waldiez/running/running.py +53 -34
- waldiez/utils/__init__.py +0 -4
- waldiez/utils/cli_extras/jupyter.py +5 -3
- waldiez/utils/cli_extras/runner.py +6 -4
- waldiez/utils/cli_extras/studio.py +6 -4
- waldiez/utils/conflict_checker.py +15 -9
- waldiez/utils/flaml_warnings.py +5 -5
- {waldiez-0.4.6.dist-info → waldiez-0.4.8.dist-info}/METADATA +235 -91
- waldiez-0.4.8.dist-info/RECORD +200 -0
- waldiez/exporting/agent/agent_exporter.py +0 -297
- waldiez/exporting/agent/utils/__init__.py +0 -23
- waldiez/exporting/agent/utils/captain_agent.py +0 -263
- waldiez/exporting/agent/utils/code_execution.py +0 -65
- waldiez/exporting/agent/utils/group_manager.py +0 -220
- waldiez/exporting/agent/utils/rag_user/__init__.py +0 -7
- waldiez/exporting/agent/utils/rag_user/rag_user.py +0 -209
- waldiez/exporting/agent/utils/reasoning.py +0 -36
- waldiez/exporting/agent/utils/swarm_agent.py +0 -469
- waldiez/exporting/agent/utils/teachability.py +0 -41
- waldiez/exporting/agent/utils/termination_message.py +0 -44
- waldiez/exporting/base/__init__.py +0 -25
- waldiez/exporting/base/agent_position.py +0 -75
- waldiez/exporting/base/base_exporter.py +0 -118
- waldiez/exporting/base/export_position.py +0 -48
- waldiez/exporting/base/import_position.py +0 -23
- waldiez/exporting/base/mixin.py +0 -137
- waldiez/exporting/base/utils/__init__.py +0 -18
- waldiez/exporting/base/utils/comments.py +0 -96
- waldiez/exporting/base/utils/path_check.py +0 -68
- waldiez/exporting/base/utils/to_string.py +0 -84
- waldiez/exporting/chats/chats_exporter.py +0 -240
- waldiez/exporting/chats/utils/swarm.py +0 -210
- waldiez/exporting/flow/flow_exporter.py +0 -528
- waldiez/exporting/flow/utils/agent_utils.py +0 -204
- waldiez/exporting/flow/utils/chat_utils.py +0 -71
- waldiez/exporting/flow/utils/def_main.py +0 -77
- waldiez/exporting/flow/utils/flow_content.py +0 -202
- waldiez/exporting/flow/utils/flow_names.py +0 -116
- waldiez/exporting/flow/utils/importing_utils.py +0 -227
- waldiez/exporting/models/models_exporter.py +0 -199
- waldiez/exporting/models/utils.py +0 -174
- waldiez/exporting/skills/__init__.py +0 -9
- waldiez/exporting/skills/skills_exporter.py +0 -176
- waldiez/exporting/skills/utils.py +0 -369
- waldiez/models/agents/agent/teachability.py +0 -70
- waldiez/models/agents/rag_user/rag_user.py +0 -60
- waldiez/models/agents/swarm_agent/__init__.py +0 -50
- waldiez/models/agents/swarm_agent/after_work.py +0 -179
- waldiez/models/agents/swarm_agent/on_condition.py +0 -105
- waldiez/models/agents/swarm_agent/on_condition_available.py +0 -142
- waldiez/models/agents/swarm_agent/on_condition_target.py +0 -40
- waldiez/models/agents/swarm_agent/swarm_agent.py +0 -107
- waldiez/models/agents/swarm_agent/swarm_agent_data.py +0 -124
- waldiez/models/flow/utils.py +0 -232
- waldiez/models/skill/__init__.py +0 -16
- waldiez/models/skill/extra_requirements.py +0 -36
- waldiez/models/skill/skill_data.py +0 -53
- waldiez/models/skill/skill_type.py +0 -8
- waldiez/utils/pysqlite3_checker.py +0 -308
- waldiez/utils/rdps_checker.py +0 -122
- waldiez-0.4.6.dist-info/RECORD +0 -149
- /waldiez/models/agents/{captain_agent → captain}/__init__.py +0 -0
- /waldiez/models/agents/{captain_agent → captain}/captain_agent_lib_entry.py +0 -0
- {waldiez-0.4.6.dist-info → waldiez-0.4.8.dist-info}/WHEEL +0 -0
- {waldiez-0.4.6.dist-info → waldiez-0.4.8.dist-info}/entry_points.txt +0 -0
- {waldiez-0.4.6.dist-info → waldiez-0.4.8.dist-info}/licenses/LICENSE +0 -0
- {waldiez-0.4.6.dist-info → waldiez-0.4.8.dist-info}/licenses/NOTICE.md +0 -0
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Copyright (c) 2024 - 2025 Waldiez and contributors.
|
|
3
3
|
"""Waldiez chat summary options."""
|
|
4
4
|
|
|
5
|
-
from typing import Any,
|
|
5
|
+
from typing import Any, Optional
|
|
6
6
|
|
|
7
7
|
from pydantic import (
|
|
8
8
|
Field,
|
|
@@ -32,35 +32,36 @@ class WaldiezChatSummary(WaldiezBase):
|
|
|
32
32
|
The method to use for the LLM summary. Defaults to "last_msg".
|
|
33
33
|
prompt : str
|
|
34
34
|
The prompt for the LLM summary method.
|
|
35
|
-
args : Optional[
|
|
35
|
+
args : Optional[dict[str, Any]]
|
|
36
36
|
The additional arguments for the LLM summary method, by default None.
|
|
37
37
|
"""
|
|
38
38
|
|
|
39
39
|
method: Annotated[
|
|
40
40
|
Optional[WaldiezChatSummaryMethod],
|
|
41
41
|
Field(
|
|
42
|
-
"last_msg",
|
|
42
|
+
default="last_msg",
|
|
43
43
|
title="Method",
|
|
44
44
|
description="The method to use for the LLM summary.",
|
|
45
45
|
),
|
|
46
|
-
]
|
|
46
|
+
] = "last_msg"
|
|
47
47
|
prompt: Annotated[
|
|
48
48
|
str,
|
|
49
49
|
Field(
|
|
50
|
-
"",
|
|
50
|
+
default="Summarize the conversation.",
|
|
51
51
|
title="Prompt",
|
|
52
52
|
description="The prompt for the LLM summary method.",
|
|
53
53
|
),
|
|
54
|
-
]
|
|
54
|
+
] = "Summarize the conversation."
|
|
55
55
|
args: Annotated[
|
|
56
|
-
|
|
56
|
+
dict[str, str],
|
|
57
57
|
Field(
|
|
58
58
|
title="Arguments",
|
|
59
59
|
description="The additional arguments for the LLM summary method.",
|
|
60
60
|
default_factory=dict,
|
|
61
61
|
),
|
|
62
|
-
]
|
|
62
|
+
] = {}
|
|
63
63
|
|
|
64
|
+
# noinspection PyNestedDecorators
|
|
64
65
|
@field_validator("method", mode="before")
|
|
65
66
|
@classmethod
|
|
66
67
|
def validate_summary_method(
|
|
@@ -86,6 +87,7 @@ class WaldiezChatSummary(WaldiezBase):
|
|
|
86
87
|
return "reflection_with_llm"
|
|
87
88
|
return value
|
|
88
89
|
|
|
90
|
+
# noinspection PyNestedDecorators
|
|
89
91
|
@field_serializer("method")
|
|
90
92
|
@classmethod
|
|
91
93
|
def serialize_summary_method(
|
|
@@ -6,6 +6,27 @@ from .ag2_version import get_autogen_version
|
|
|
6
6
|
from .base import WaldiezBase
|
|
7
7
|
from .date_utils import now
|
|
8
8
|
from .dict_utils import update_dict
|
|
9
|
+
from .handoff import (
|
|
10
|
+
WaldiezAgentTarget,
|
|
11
|
+
WaldiezContextBasedCondition,
|
|
12
|
+
WaldiezContextBasedTransition,
|
|
13
|
+
WaldiezContextStrLLMCondition,
|
|
14
|
+
WaldiezDefaultCondition,
|
|
15
|
+
WaldiezExpressionContextCondition,
|
|
16
|
+
WaldiezGroupOrNestedTarget,
|
|
17
|
+
WaldiezHandoff,
|
|
18
|
+
WaldiezHandoffCondition,
|
|
19
|
+
WaldiezHandoffTransition,
|
|
20
|
+
WaldiezLLMBasedCondition,
|
|
21
|
+
WaldiezLLMBasedTransition,
|
|
22
|
+
WaldiezRandomAgentTarget,
|
|
23
|
+
WaldiezSimpleTarget,
|
|
24
|
+
WaldiezStringContextCondition,
|
|
25
|
+
WaldiezStringLLMCondition,
|
|
26
|
+
WaldiezTransitionAvailability,
|
|
27
|
+
WaldiezTransitionTarget,
|
|
28
|
+
)
|
|
29
|
+
from .id_generator import get_id
|
|
9
30
|
from .method_utils import (
|
|
10
31
|
check_function,
|
|
11
32
|
gather_code_imports,
|
|
@@ -13,15 +34,44 @@ from .method_utils import (
|
|
|
13
34
|
get_function,
|
|
14
35
|
parse_code_string,
|
|
15
36
|
)
|
|
37
|
+
from .naming import (
|
|
38
|
+
MAX_VARIABLE_LENGTH,
|
|
39
|
+
get_valid_instance_name,
|
|
40
|
+
get_valid_python_variable_name,
|
|
41
|
+
)
|
|
42
|
+
from .waldiez_version import get_waldiez_version
|
|
16
43
|
|
|
17
44
|
__all__ = [
|
|
45
|
+
"MAX_VARIABLE_LENGTH",
|
|
18
46
|
"WaldiezBase",
|
|
19
|
-
"now",
|
|
20
47
|
"check_function",
|
|
48
|
+
"update_dict",
|
|
21
49
|
"gather_code_imports",
|
|
22
50
|
"get_autogen_version",
|
|
23
51
|
"get_function",
|
|
52
|
+
"get_id",
|
|
53
|
+
"get_valid_instance_name",
|
|
54
|
+
"get_valid_python_variable_name",
|
|
55
|
+
"get_waldiez_version",
|
|
24
56
|
"generate_function",
|
|
57
|
+
"now",
|
|
25
58
|
"parse_code_string",
|
|
26
|
-
"
|
|
59
|
+
"WaldiezDefaultCondition",
|
|
60
|
+
"WaldiezAgentTarget",
|
|
61
|
+
"WaldiezContextBasedCondition",
|
|
62
|
+
"WaldiezContextBasedTransition",
|
|
63
|
+
"WaldiezContextStrLLMCondition",
|
|
64
|
+
"WaldiezExpressionContextCondition",
|
|
65
|
+
"WaldiezGroupOrNestedTarget",
|
|
66
|
+
"WaldiezHandoff",
|
|
67
|
+
"WaldiezHandoffCondition",
|
|
68
|
+
"WaldiezHandoffTransition",
|
|
69
|
+
"WaldiezLLMBasedCondition",
|
|
70
|
+
"WaldiezLLMBasedTransition",
|
|
71
|
+
"WaldiezRandomAgentTarget",
|
|
72
|
+
"WaldiezSimpleTarget",
|
|
73
|
+
"WaldiezStringContextCondition",
|
|
74
|
+
"WaldiezStringLLMCondition",
|
|
75
|
+
"WaldiezTransitionAvailability",
|
|
76
|
+
"WaldiezTransitionTarget",
|
|
27
77
|
]
|
waldiez/models/common/base.py
CHANGED
|
@@ -2,7 +2,7 @@
|
|
|
2
2
|
# Copyright (c) 2024 - 2025 Waldiez and contributors.
|
|
3
3
|
"""Base class to inherit from."""
|
|
4
4
|
|
|
5
|
-
from typing import Any
|
|
5
|
+
from typing import Any
|
|
6
6
|
|
|
7
7
|
from pydantic import BaseModel, ConfigDict
|
|
8
8
|
from pydantic.alias_generators import to_camel
|
|
@@ -17,15 +17,15 @@ class WaldiezBase(BaseModel):
|
|
|
17
17
|
|
|
18
18
|
model_config = ConfigDict(
|
|
19
19
|
extra="ignore",
|
|
20
|
-
# treat `
|
|
20
|
+
# treat `toolId` as `tool_id`
|
|
21
21
|
alias_generator=to_camel,
|
|
22
|
-
# allow passing either `
|
|
22
|
+
# allow passing either `tool_id` or `toolId`
|
|
23
23
|
populate_by_name=True,
|
|
24
24
|
# allow setting any attribute after initialization
|
|
25
25
|
frozen=False,
|
|
26
26
|
)
|
|
27
27
|
|
|
28
|
-
def model_dump(self, **kwargs: Any) ->
|
|
28
|
+
def model_dump(self, **kwargs: Any) -> dict[str, Any]:
|
|
29
29
|
"""Dump the model to a dictionary.
|
|
30
30
|
|
|
31
31
|
Parameters
|
|
@@ -33,17 +33,34 @@ class WaldiezBase(BaseModel):
|
|
|
33
33
|
**kwargs : Any
|
|
34
34
|
Additional keyword arguments.
|
|
35
35
|
|
|
36
|
+
The following are from the Pydantic `model_dump` method:
|
|
37
|
+
- mode: str | Literal['json', 'python'] = 'json',
|
|
38
|
+
- include: IncEx | None
|
|
39
|
+
- exclude: IncEx | None
|
|
40
|
+
- context: Any | None
|
|
41
|
+
- by_alias: bool | None (None defaults to True)
|
|
42
|
+
- exclude_unset: bool = False
|
|
43
|
+
- exclude_defaults: bool = False
|
|
44
|
+
- exclude_none: bool = False
|
|
45
|
+
- round_trip: bool = False
|
|
46
|
+
- warnings: bool | Literal['none', 'warn', 'error'] = True
|
|
47
|
+
- fallback: ((Any) -> Any) | None = None
|
|
48
|
+
- serialize_as_any: bool = False
|
|
49
|
+
|
|
36
50
|
Returns
|
|
37
51
|
-------
|
|
38
|
-
|
|
52
|
+
dict[str, Any]
|
|
39
53
|
The dictionary representation of the model.
|
|
40
54
|
"""
|
|
41
55
|
by_alias = kwargs.pop("by_alias", None)
|
|
42
|
-
|
|
56
|
+
mode = kwargs.pop("mode", None)
|
|
57
|
+
if mode is None: # pragma: no branch
|
|
58
|
+
mode = "json"
|
|
59
|
+
if by_alias is None: # pragma: no branch
|
|
43
60
|
by_alias = True
|
|
44
61
|
if not isinstance(by_alias, bool):
|
|
45
62
|
by_alias = True
|
|
46
|
-
return super().model_dump(by_alias=by_alias, **kwargs)
|
|
63
|
+
return super().model_dump(by_alias=by_alias, mode=mode, **kwargs)
|
|
47
64
|
|
|
48
65
|
def model_dump_json(self, **kwargs: Any) -> str:
|
|
49
66
|
"""Dump the model to a JSON string.
|
|
@@ -53,6 +70,20 @@ class WaldiezBase(BaseModel):
|
|
|
53
70
|
**kwargs : Any
|
|
54
71
|
Additional keyword arguments.
|
|
55
72
|
|
|
73
|
+
The following are from the Pydantic `model_dump_json` method:
|
|
74
|
+
- indent: int | None = None,
|
|
75
|
+
- include: IncEx | None = None,
|
|
76
|
+
- exclude: IncEx | None = None,
|
|
77
|
+
- context: Any | None = None,
|
|
78
|
+
- by_alias: bool | None = None, (None defaults to True)
|
|
79
|
+
- exclude_unset: bool = False,
|
|
80
|
+
- exclude_defaults: bool = False,
|
|
81
|
+
- exclude_none: bool = False,
|
|
82
|
+
- round_trip: bool = False,
|
|
83
|
+
- warnings: bool | Literal['none', 'warn', 'error'] = True,
|
|
84
|
+
- fallback: ((Any) -> Any) | None = None,
|
|
85
|
+
- serialize_as_any: bool = False
|
|
86
|
+
|
|
56
87
|
Returns
|
|
57
88
|
-------
|
|
58
89
|
str
|
|
@@ -2,38 +2,63 @@
|
|
|
2
2
|
# Copyright (c) 2024 - 2025 Waldiez and contributors.
|
|
3
3
|
"""Dictionary related utilities."""
|
|
4
4
|
|
|
5
|
-
|
|
5
|
+
import re
|
|
6
|
+
from typing import Any
|
|
6
7
|
|
|
8
|
+
BOOL_VALUES = {"true", "false"}
|
|
9
|
+
NULL_VALUES = {"none", "null", "nil", "undefined"}
|
|
7
10
|
|
|
8
|
-
def update_dict(original: Dict[str, Any]) -> Dict[str, Any]:
|
|
9
|
-
"""
|
|
10
11
|
|
|
12
|
+
def update_dict(original: dict[str, Any]) -> dict[str, Any]:
|
|
13
|
+
"""
|
|
11
14
|
Try to determine the type of the dictionary values.
|
|
12
15
|
|
|
13
16
|
Parameters
|
|
14
17
|
----------
|
|
15
|
-
original :
|
|
18
|
+
original : dict[str, Any]
|
|
16
19
|
The original dictionary.
|
|
17
20
|
|
|
18
21
|
Returns
|
|
19
22
|
-------
|
|
20
|
-
|
|
23
|
+
dict[str, Any]
|
|
21
24
|
The updated dictionary with values converted to the detected types.
|
|
22
25
|
"""
|
|
23
|
-
new_dict:
|
|
26
|
+
new_dict: dict[str, Any] = {}
|
|
27
|
+
|
|
24
28
|
for key, value in original.items():
|
|
25
|
-
|
|
26
|
-
if
|
|
29
|
+
# Skip conversion if already the desired type
|
|
30
|
+
if not isinstance(value, str):
|
|
31
|
+
new_dict[key] = value
|
|
32
|
+
continue
|
|
33
|
+
|
|
34
|
+
value_stripped = value.strip()
|
|
35
|
+
if (
|
|
36
|
+
value_stripped.startswith('"') and value_stripped.endswith('"')
|
|
37
|
+
) or (value_stripped.startswith("'") and value_stripped.endswith("'")):
|
|
38
|
+
value_stripped = value_stripped[1:-1]
|
|
39
|
+
if not value_stripped: # Empty or whitespace-only
|
|
40
|
+
new_dict[key] = value
|
|
41
|
+
continue
|
|
42
|
+
|
|
43
|
+
value_lower = value_stripped.lower()
|
|
44
|
+
|
|
45
|
+
# Check for None/null
|
|
46
|
+
if value_lower in NULL_VALUES:
|
|
27
47
|
new_dict[key] = None
|
|
28
|
-
|
|
48
|
+
# Check for boolean
|
|
49
|
+
elif value_lower in BOOL_VALUES:
|
|
29
50
|
new_dict[key] = value_lower == "true"
|
|
30
|
-
|
|
31
|
-
|
|
32
|
-
|
|
33
|
-
|
|
34
|
-
new_dict[key] = float(value)
|
|
35
|
-
except ValueError: # pragma: no cover
|
|
36
|
-
new_dict[key] = value
|
|
51
|
+
# Check for integer
|
|
52
|
+
elif re.fullmatch(r"[-+]?\d+", value_stripped):
|
|
53
|
+
new_dict[key] = int(value_stripped)
|
|
54
|
+
# Check for float
|
|
37
55
|
else:
|
|
38
|
-
|
|
56
|
+
try:
|
|
57
|
+
# This handles floats, scientific notation, etc.
|
|
58
|
+
float_val = float(value_stripped)
|
|
59
|
+
new_dict[key] = float_val
|
|
60
|
+
except ValueError:
|
|
61
|
+
# Keep as string if conversion fails
|
|
62
|
+
new_dict[key] = value_stripped
|
|
63
|
+
|
|
39
64
|
return new_dict
|