fabricatio 0.2.6.dev2__cp312-cp312-win_amd64.whl → 0.2.7.dev3__cp312-cp312-win_amd64.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.
- fabricatio/__init__.py +7 -24
- fabricatio/_rust.cp312-win_amd64.pyd +0 -0
- fabricatio/_rust.pyi +22 -0
- fabricatio/actions/article.py +150 -19
- fabricatio/actions/article_rag.py +35 -0
- fabricatio/actions/output.py +21 -6
- fabricatio/actions/rag.py +51 -3
- fabricatio/capabilities/correct.py +34 -4
- fabricatio/capabilities/rag.py +67 -16
- fabricatio/capabilities/rating.py +15 -6
- fabricatio/capabilities/review.py +7 -4
- fabricatio/capabilities/task.py +5 -5
- fabricatio/config.py +29 -21
- fabricatio/decorators.py +32 -0
- fabricatio/models/action.py +117 -43
- fabricatio/models/extra/article_essence.py +226 -0
- fabricatio/models/extra/article_main.py +359 -0
- fabricatio/models/extra/article_outline.py +276 -0
- fabricatio/models/extra/article_proposal.py +37 -0
- fabricatio/models/generic.py +95 -9
- fabricatio/models/kwargs_types.py +40 -10
- fabricatio/models/role.py +30 -6
- fabricatio/models/tool.py +6 -2
- fabricatio/models/usages.py +94 -47
- fabricatio/models/utils.py +29 -2
- fabricatio/parser.py +2 -0
- fabricatio/workflows/articles.py +12 -1
- fabricatio-0.2.7.dev3.data/scripts/tdown.exe +0 -0
- {fabricatio-0.2.6.dev2.dist-info → fabricatio-0.2.7.dev3.dist-info}/METADATA +6 -2
- fabricatio-0.2.7.dev3.dist-info/RECORD +46 -0
- {fabricatio-0.2.6.dev2.dist-info → fabricatio-0.2.7.dev3.dist-info}/WHEEL +1 -1
- fabricatio/models/extra.py +0 -171
- fabricatio-0.2.6.dev2.data/scripts/tdown.exe +0 -0
- fabricatio-0.2.6.dev2.dist-info/RECORD +0 -42
- {fabricatio-0.2.6.dev2.dist-info → fabricatio-0.2.7.dev3.dist-info}/licenses/LICENSE +0 -0
fabricatio/models/action.py
CHANGED
@@ -1,4 +1,8 @@
|
|
1
|
-
"""Module that contains the classes for actions and workflows.
|
1
|
+
"""Module that contains the classes for actions and workflows.
|
2
|
+
|
3
|
+
This module defines the Action and WorkFlow classes, which are used for
|
4
|
+
creating and executing sequences of actions in a task-based context.
|
5
|
+
"""
|
2
6
|
|
3
7
|
import traceback
|
4
8
|
from abc import abstractmethod
|
@@ -15,20 +19,27 @@ from pydantic import Field, PrivateAttr
|
|
15
19
|
|
16
20
|
|
17
21
|
class Action(HandleTask, ProposeTask, Correct):
|
18
|
-
"""Class that represents an action to be executed in a workflow.
|
22
|
+
"""Class that represents an action to be executed in a workflow.
|
23
|
+
|
24
|
+
Actions are the atomic units of work in a workflow. Each action performs
|
25
|
+
a specific operation and can modify the shared context data.
|
26
|
+
"""
|
19
27
|
|
20
28
|
name: str = Field(default="")
|
21
29
|
"""The name of the action."""
|
30
|
+
|
22
31
|
description: str = Field(default="")
|
23
32
|
"""The description of the action."""
|
33
|
+
|
24
34
|
personality: str = Field(default="")
|
25
|
-
"""The personality
|
35
|
+
"""The personality traits or context for the action executor."""
|
36
|
+
|
26
37
|
output_key: str = Field(default="")
|
27
|
-
"""The key
|
38
|
+
"""The key used to store this action's output in the context dictionary."""
|
28
39
|
|
29
40
|
@final
|
30
41
|
def model_post_init(self, __context: Any) -> None:
|
31
|
-
"""Initialize the action by setting
|
42
|
+
"""Initialize the action by setting default name and description if not provided.
|
32
43
|
|
33
44
|
Args:
|
34
45
|
__context: The context to be used for initialization.
|
@@ -37,122 +48,185 @@ class Action(HandleTask, ProposeTask, Correct):
|
|
37
48
|
self.description = self.description or self.__class__.__doc__ or ""
|
38
49
|
|
39
50
|
@abstractmethod
|
40
|
-
async def _execute(self, **cxt) -> Any:
|
41
|
-
"""Execute the action with the provided arguments.
|
51
|
+
async def _execute(self, *_, **cxt) -> Any: # noqa: ANN002
|
52
|
+
"""Execute the action logic with the provided context arguments.
|
53
|
+
|
54
|
+
This method must be implemented by subclasses to define the actual behavior.
|
42
55
|
|
43
56
|
Args:
|
44
57
|
**cxt: The context dictionary containing input and output data.
|
45
58
|
|
46
59
|
Returns:
|
47
|
-
The result of the action execution.
|
60
|
+
Any: The result of the action execution.
|
48
61
|
"""
|
49
62
|
pass
|
50
63
|
|
51
64
|
@final
|
52
65
|
async def act(self, cxt: Dict[str, Any]) -> Dict[str, Any]:
|
53
|
-
"""Perform the action
|
66
|
+
"""Perform the action and update the context with results.
|
54
67
|
|
55
68
|
Args:
|
56
69
|
cxt: The context dictionary containing input and output data.
|
70
|
+
|
71
|
+
Returns:
|
72
|
+
Dict[str, Any]: The updated context dictionary.
|
57
73
|
"""
|
58
74
|
ret = await self._execute(**cxt)
|
75
|
+
|
59
76
|
if self.output_key:
|
60
77
|
logger.debug(f"Setting output: {self.output_key}")
|
61
78
|
cxt[self.output_key] = ret
|
79
|
+
|
62
80
|
return cxt
|
63
81
|
|
64
82
|
@property
|
65
83
|
def briefing(self) -> str:
|
66
|
-
"""Return a
|
84
|
+
"""Return a formatted description of the action including personality context if available.
|
85
|
+
|
86
|
+
Returns:
|
87
|
+
str: Formatted briefing text with personality and action description.
|
88
|
+
"""
|
67
89
|
if self.personality:
|
68
90
|
return f"## Your personality: \n{self.personality}\n# The action you are going to perform: \n{super().briefing}"
|
69
91
|
return f"# The action you are going to perform: \n{super().briefing}"
|
70
92
|
|
71
93
|
|
72
94
|
class WorkFlow(WithBriefing, ToolBoxUsage):
|
73
|
-
"""Class that represents a
|
95
|
+
"""Class that represents a sequence of actions to be executed for a task.
|
96
|
+
|
97
|
+
A workflow manages the execution of multiple actions in sequence, passing
|
98
|
+
a shared context between them and handling task lifecycle events.
|
99
|
+
"""
|
74
100
|
|
75
101
|
_context: Queue[Dict[str, Any]] = PrivateAttr(default_factory=lambda: Queue(maxsize=1))
|
76
|
-
"""
|
102
|
+
"""Queue for storing the workflow execution context."""
|
77
103
|
|
78
104
|
_instances: Tuple[Action, ...] = PrivateAttr(default_factory=tuple)
|
79
|
-
"""
|
105
|
+
"""Instantiated action objects to be executed in this workflow."""
|
80
106
|
|
81
107
|
steps: Tuple[Union[Type[Action], Action], ...] = Field(...)
|
82
|
-
"""
|
108
|
+
"""The sequence of actions to be executed, can be action classes or instances."""
|
109
|
+
|
83
110
|
task_input_key: str = Field(default="task_input")
|
84
|
-
"""
|
111
|
+
"""Key used to store the input task in the context dictionary."""
|
112
|
+
|
85
113
|
task_output_key: str = Field(default="task_output")
|
86
|
-
"""
|
114
|
+
"""Key used to extract the final result from the context dictionary."""
|
115
|
+
|
87
116
|
extra_init_context: Dict[str, Any] = Field(default_factory=dict, frozen=True)
|
88
|
-
"""
|
117
|
+
"""Additional initial context values to be included at workflow start."""
|
89
118
|
|
90
119
|
def model_post_init(self, __context: Any) -> None:
|
91
|
-
"""Initialize the workflow by
|
120
|
+
"""Initialize the workflow by instantiating any action classes.
|
92
121
|
|
93
122
|
Args:
|
94
123
|
__context: The context to be used for initialization.
|
95
124
|
"""
|
96
|
-
|
97
|
-
for step in self.steps
|
98
|
-
temp.append(step if isinstance(step, Action) else step())
|
99
|
-
self._instances = tuple(temp)
|
125
|
+
# Convert any action classes to instances
|
126
|
+
self._instances = tuple(step if isinstance(step, Action) else step() for step in self.steps)
|
100
127
|
|
101
128
|
def inject_personality(self, personality: str) -> Self:
|
102
|
-
"""
|
129
|
+
"""Set the personality for all actions that don't have one defined.
|
103
130
|
|
104
131
|
Args:
|
105
|
-
personality: The personality to
|
132
|
+
personality: The personality text to inject.
|
106
133
|
|
107
134
|
Returns:
|
108
|
-
Self: The
|
135
|
+
Self: The workflow instance for method chaining.
|
109
136
|
"""
|
110
|
-
for
|
111
|
-
|
137
|
+
for action in filter(lambda a: not a.personality, self._instances):
|
138
|
+
action.personality = personality
|
112
139
|
return self
|
113
140
|
|
114
141
|
async def serve(self, task: Task) -> None:
|
115
|
-
"""
|
142
|
+
"""Execute the workflow to fulfill the given task.
|
143
|
+
|
144
|
+
This method manages the complete lifecycle of processing a task through
|
145
|
+
the workflow's sequence of actions.
|
116
146
|
|
117
147
|
Args:
|
118
|
-
task: The task to be
|
148
|
+
task: The task to be processed.
|
119
149
|
"""
|
150
|
+
logger.info(f"Start execute workflow: {self.name}")
|
151
|
+
|
120
152
|
await task.start()
|
121
153
|
await self._init_context(task)
|
154
|
+
|
122
155
|
current_action = None
|
123
156
|
try:
|
157
|
+
# Process each action in sequence
|
124
158
|
for step in self._instances:
|
125
|
-
|
126
|
-
|
159
|
+
current_action = step.name
|
160
|
+
logger.info(f"Executing step: {current_action}")
|
161
|
+
|
162
|
+
# Get current context and execute action
|
163
|
+
context = await self._context.get()
|
164
|
+
act_task = create_task(step.act(context))
|
165
|
+
# Handle task cancellation
|
127
166
|
if task.is_cancelled():
|
128
167
|
act_task.cancel(f"Cancelled by task: {task.name}")
|
129
168
|
break
|
169
|
+
|
170
|
+
# Update context with modified values
|
130
171
|
modified_ctx = await act_task
|
172
|
+
logger.success(f"Step execution finished: {current_action}")
|
131
173
|
await self._context.put(modified_ctx)
|
132
|
-
logger.info(f"Finished executing workflow: {self.name}")
|
133
174
|
|
134
|
-
|
175
|
+
logger.success(f"Workflow execution finished: {self.name}")
|
176
|
+
|
177
|
+
# Get final context and extract result
|
178
|
+
final_ctx = await self._context.get()
|
179
|
+
result = final_ctx.get(self.task_output_key)
|
180
|
+
|
181
|
+
if self.task_output_key not in final_ctx:
|
135
182
|
logger.warning(
|
136
|
-
f"Task output key: {self.task_output_key} not found in the context, None will be returned.
|
183
|
+
f"Task output key: {self.task_output_key} not found in the context, None will be returned. "
|
184
|
+
f"You can check if `Action.output_key` is set the same as `WorkFlow.task_output_key`."
|
137
185
|
)
|
138
186
|
|
139
|
-
await task.finish(
|
140
|
-
|
141
|
-
|
142
|
-
logger.
|
143
|
-
|
187
|
+
await task.finish(result)
|
188
|
+
|
189
|
+
except Exception as e: # noqa: BLE001
|
190
|
+
logger.critical(f"Error during task: {current_action} execution: {e}")
|
191
|
+
logger.critical(traceback.format_exc())
|
192
|
+
await task.fail()
|
144
193
|
|
145
194
|
async def _init_context[T](self, task: Task[T]) -> None:
|
146
|
-
"""Initialize the context dictionary for workflow execution.
|
195
|
+
"""Initialize the context dictionary for workflow execution.
|
196
|
+
|
197
|
+
Args:
|
198
|
+
task: The task being served by this workflow.
|
199
|
+
"""
|
147
200
|
logger.debug(f"Initializing context for workflow: {self.name}")
|
148
|
-
|
201
|
+
initial_context = {self.task_input_key: task, **dict(self.extra_init_context)}
|
202
|
+
await self._context.put(initial_context)
|
149
203
|
|
150
204
|
def steps_fallback_to_self(self) -> Self:
|
151
|
-
"""
|
205
|
+
"""Configure all steps to use this workflow's configuration as fallback.
|
206
|
+
|
207
|
+
Returns:
|
208
|
+
Self: The workflow instance for method chaining.
|
209
|
+
"""
|
152
210
|
self.hold_to(self._instances)
|
153
211
|
return self
|
154
212
|
|
155
213
|
def steps_supply_tools_from_self(self) -> Self:
|
156
|
-
"""
|
214
|
+
"""Provide this workflow's tools to all steps in the workflow.
|
215
|
+
|
216
|
+
Returns:
|
217
|
+
Self: The workflow instance for method chaining.
|
218
|
+
"""
|
157
219
|
self.provide_tools_to(self._instances)
|
158
220
|
return self
|
221
|
+
|
222
|
+
def update_init_context(self, **kwargs) -> Self:
|
223
|
+
"""Update the initial context with additional key-value pairs.
|
224
|
+
|
225
|
+
Args:
|
226
|
+
**kwargs: Key-value pairs to add to the initial context.
|
227
|
+
|
228
|
+
Returns:
|
229
|
+
Self: The workflow instance for method chaining.
|
230
|
+
"""
|
231
|
+
self.extra_init_context.update(kwargs)
|
232
|
+
return self
|
@@ -0,0 +1,226 @@
|
|
1
|
+
"""ArticleEssence: Semantic fingerprint of academic paper for structured analysis."""
|
2
|
+
|
3
|
+
from typing import List
|
4
|
+
|
5
|
+
from fabricatio.models.generic import Display, PrepareVectorization, ProposedAble
|
6
|
+
from pydantic import BaseModel, Field
|
7
|
+
|
8
|
+
|
9
|
+
class Equation(BaseModel):
|
10
|
+
"""Mathematical formalism specification for research contributions.
|
11
|
+
|
12
|
+
Encodes equations with dual representation: semantic meaning and typeset-ready notation.
|
13
|
+
"""
|
14
|
+
|
15
|
+
description: str
|
16
|
+
"""Equation significance structured in three elements:
|
17
|
+
1. Physical/conceptual meaning of the equation.
|
18
|
+
2. Role in technical workflow (e.g., derivation, optimization, or analysis).
|
19
|
+
3. Relationship to the paper's core contribution (e.g., theoretical foundation, empirical validation).
|
20
|
+
Example: "Defines constrained search space dimensionality reduction. Used in architecture optimization phase (Section 3.2). Enables 40% parameter reduction."
|
21
|
+
"""
|
22
|
+
|
23
|
+
latex_code: str
|
24
|
+
"""LaTeX representation following academic typesetting standards:
|
25
|
+
- Must use equation environment (e.g., `equation`, `align`).
|
26
|
+
- Multiline equations must align at '=' using `&`.
|
27
|
+
- Include unit annotations where applicable.
|
28
|
+
Example: "\\begin{equation} \\mathcal{L}_{NAS} = \\alpha \\|\\theta\\|_2 + \\beta H(p) \\end{equation}"
|
29
|
+
"""
|
30
|
+
|
31
|
+
|
32
|
+
class Figure(BaseModel):
|
33
|
+
"""Visual component specification for technical communication.
|
34
|
+
|
35
|
+
Combines graphical assets with structured academic captioning.Extracted from the article provided
|
36
|
+
"""
|
37
|
+
|
38
|
+
description: str
|
39
|
+
"""Figure interpretation guide containing:
|
40
|
+
1. Key visual elements mapping (e.g., axes, legends, annotations).
|
41
|
+
2. Data representation methodology (e.g., visualization type, statistical measures).
|
42
|
+
3. Connection to research findings (e.g., supports hypothesis, demonstrates performance).
|
43
|
+
Example: "Architecture search space topology (left) vs. convergence curves (right). Demonstrates NAS efficiency gains through constrained search."
|
44
|
+
"""
|
45
|
+
|
46
|
+
figure_caption: str
|
47
|
+
"""Complete caption following Nature-style guidelines:
|
48
|
+
1. Brief overview statement (首句总结).
|
49
|
+
2. Technical detail layer (e.g., data sources, experimental conditions).
|
50
|
+
3. Result implication (e.g., key insights, implications for future work).
|
51
|
+
Example: "Figure 3: Differentiable NAS framework. (a) Search space topology with constrained dimensions. (b) Training convergence across language pairs. Dashed lines indicate baseline methods."
|
52
|
+
"""
|
53
|
+
|
54
|
+
figure_serial_number: int
|
55
|
+
"""The Image serial number extracted from the Markdown article provided, the path usually in the form of ``, in this case the serial number is `1`"""
|
56
|
+
|
57
|
+
|
58
|
+
class Algorithm(BaseModel):
|
59
|
+
"""Algorithm specification for research contributions."""
|
60
|
+
|
61
|
+
title: str
|
62
|
+
"""Algorithm title with technical focus descriptor (e.g., 'Gradient Descent Optimization').
|
63
|
+
|
64
|
+
Tip: Do not attempt to translate the original element titles when generating JSON.
|
65
|
+
"""
|
66
|
+
|
67
|
+
description: str
|
68
|
+
"""Algorithm description with technical focus descriptor:
|
69
|
+
- Includes input/output specifications.
|
70
|
+
- Describes key steps and their purpose.
|
71
|
+
- Explains its role in the research workflow.
|
72
|
+
Example: "Proposed algorithm for neural architecture search. Inputs include search space constraints and training data. Outputs optimized architecture."
|
73
|
+
"""
|
74
|
+
|
75
|
+
|
76
|
+
class Table(BaseModel):
|
77
|
+
"""Table specification for research contributions."""
|
78
|
+
|
79
|
+
title: str
|
80
|
+
"""Table title with technical focus descriptor (e.g., 'Comparison of Model Performance Metrics').
|
81
|
+
|
82
|
+
Tip: Do not attempt to translate the original element titles when generating JSON.
|
83
|
+
"""
|
84
|
+
|
85
|
+
description: str
|
86
|
+
"""Table description with technical focus descriptor:
|
87
|
+
- Includes data source and structure.
|
88
|
+
- Explains key columns/rows and their significance.
|
89
|
+
- Connects to research findings or hypotheses.
|
90
|
+
Example: "Performance metrics for different architectures. Columns represent accuracy, F1-score, and inference time. Highlights efficiency gains of proposed method."
|
91
|
+
"""
|
92
|
+
|
93
|
+
|
94
|
+
class Highlightings(BaseModel):
|
95
|
+
"""Technical showcase aggregator for research artifacts.
|
96
|
+
|
97
|
+
Curates core scientific components with machine-parseable annotations.
|
98
|
+
"""
|
99
|
+
|
100
|
+
highlighted_equations: List[Equation]
|
101
|
+
"""3-5 pivotal equations representing theoretical contributions:
|
102
|
+
- Each equation must be wrapped in $$ for display math.
|
103
|
+
- Contain at least one novel operator/symbol.
|
104
|
+
- Be referenced in Methods/Results sections.
|
105
|
+
Example: Equation describing proposed loss function.
|
106
|
+
"""
|
107
|
+
|
108
|
+
highlighted_algorithms: List[Algorithm]
|
109
|
+
"""1-2 key algorithms demonstrating methodological contributions:
|
110
|
+
- Include pseudocode or step-by-step descriptions.
|
111
|
+
- Highlight innovation in computational approach.
|
112
|
+
Example: Algorithm for constrained search space exploration.
|
113
|
+
|
114
|
+
Tip: Do not attempt to translate the original element titles when generating JSON.
|
115
|
+
"""
|
116
|
+
|
117
|
+
highlighted_figures: List[Figure]
|
118
|
+
"""4-6 key figures demonstrating:
|
119
|
+
1. Framework overview (1 required).
|
120
|
+
2. Quantitative results (2-3 required).
|
121
|
+
3. Ablation studies (1 optional).
|
122
|
+
Each must appear in Results/Discussion chapters.
|
123
|
+
Example: Figure showing architecture topology and convergence curves.
|
124
|
+
"""
|
125
|
+
|
126
|
+
highlighted_tables: List[Table]
|
127
|
+
"""2-3 key tables summarizing:
|
128
|
+
- Comparative analysis of methods.
|
129
|
+
- Empirical results supporting claims.
|
130
|
+
Example: Table comparing model performance across datasets.
|
131
|
+
|
132
|
+
Tip: Do not attempt to translate the original element titles when generating JSON.
|
133
|
+
"""
|
134
|
+
|
135
|
+
|
136
|
+
class ArticleEssence(ProposedAble, Display, PrepareVectorization):
|
137
|
+
"""Semantic fingerprint of academic paper for structured analysis.
|
138
|
+
|
139
|
+
Encodes research artifacts with dual human-machine interpretability.
|
140
|
+
"""
|
141
|
+
|
142
|
+
title: str = Field(...)
|
143
|
+
"""Exact title of the original article without any modification.
|
144
|
+
Must be preserved precisely from the source material without:
|
145
|
+
- Translation
|
146
|
+
- Paraphrasing
|
147
|
+
- Adding/removing words
|
148
|
+
- Altering style or formatting
|
149
|
+
"""
|
150
|
+
|
151
|
+
authors: List[str]
|
152
|
+
"""Original author names exactly as they appear in the source document. No translation or paraphrasing.
|
153
|
+
Extract complete list without any modifications or formatting changes."""
|
154
|
+
|
155
|
+
keywords: List[str]
|
156
|
+
"""Original keywords exactly as they appear in the source document. No translation or paraphrasing.
|
157
|
+
Extract the complete set without modifying format or terminology."""
|
158
|
+
|
159
|
+
publication_year: int
|
160
|
+
"""Publication timestamp in ISO 8601 (YYYY format)."""
|
161
|
+
|
162
|
+
highlightings: Highlightings
|
163
|
+
"""Technical highlight reel containing:
|
164
|
+
- Core equations (Theory)
|
165
|
+
- Key algorithms (Implementation)
|
166
|
+
- Critical figures (Results)
|
167
|
+
- Benchmark tables (Evaluation)"""
|
168
|
+
|
169
|
+
domain: List[str]
|
170
|
+
"""Domain tags for research focus."""
|
171
|
+
|
172
|
+
abstract: str = Field(...)
|
173
|
+
"""Three-paragraph structured abstract:
|
174
|
+
Paragraph 1: Problem & Motivation (2-3 sentences)
|
175
|
+
Paragraph 2: Methodology & Innovations (3-4 sentences)
|
176
|
+
Paragraph 3: Results & Impact (2-3 sentences)
|
177
|
+
Total length: 150-250 words"""
|
178
|
+
|
179
|
+
core_contributions: List[str]
|
180
|
+
"""3-5 technical contributions using CRediT taxonomy verbs.
|
181
|
+
Each item starts with action verb.
|
182
|
+
Example:
|
183
|
+
- 'Developed constrained NAS framework'
|
184
|
+
- 'Established cross-lingual transfer metrics'"""
|
185
|
+
|
186
|
+
technical_novelty: List[str]
|
187
|
+
"""Patent-style claims with technical specificity.
|
188
|
+
Format: 'A [system/method] comprising [novel components]...'
|
189
|
+
Example:
|
190
|
+
'A neural architecture search system comprising:
|
191
|
+
a differentiable constrained search space;
|
192
|
+
multi-lingual transferability predictors...'"""
|
193
|
+
|
194
|
+
research_problems: List[str]
|
195
|
+
"""Problem statements as how/why questions.
|
196
|
+
Example:
|
197
|
+
- 'How to reduce NAS computational overhead while maintaining search diversity?'
|
198
|
+
- 'Why do existing architectures fail in low-resource cross-lingual transfer?'"""
|
199
|
+
|
200
|
+
limitations: List[str]
|
201
|
+
"""Technical limitations analysis containing:
|
202
|
+
1. Constraint source (data/method/theory)
|
203
|
+
2. Impact quantification
|
204
|
+
3. Mitigation pathway
|
205
|
+
Example:
|
206
|
+
'Methodology constraint: Single-objective optimization (affects 5% edge cases),
|
207
|
+
mitigated through future multi-task extension'"""
|
208
|
+
|
209
|
+
future_work: List[str]
|
210
|
+
"""Research roadmap items with 3 horizons:
|
211
|
+
1. Immediate extensions (1 year)
|
212
|
+
2. Mid-term directions (2-3 years)
|
213
|
+
3. Long-term vision (5+ years)
|
214
|
+
Example:
|
215
|
+
'Short-term: Adapt framework for vision transformers (ongoing with CVPR submission)'"""
|
216
|
+
|
217
|
+
impact_analysis: List[str]
|
218
|
+
"""Bibliometric impact projections:
|
219
|
+
- Expected citation counts (next 3 years)
|
220
|
+
- Target application domains
|
221
|
+
- Standard adoption potential
|
222
|
+
Example:
|
223
|
+
'Predicted 150+ citations via integration into MMEngine (Alibaba OpenMMLab)'"""
|
224
|
+
|
225
|
+
def _prepare_vectorization_inner(self) -> str:
|
226
|
+
return self.model_dump_json()
|