Skip to content

Commit b1bc264

Browse files
committed
add: decomp prompt v3
1 parent f9e0c26 commit b1bc264

2 files changed

Lines changed: 104 additions & 2 deletions

File tree

cli/decompose/decompose.py

Lines changed: 4 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -32,15 +32,17 @@ class DecompVersion(StrEnum):
3232
Newer versions must be declared last to ensure ``latest`` always resolves to
3333
the most recent template.
3434
35-
Args:
35+
Attributes:
3636
latest (str): Sentinel value that resolves to the last declared version.
3737
v1 (str): Version 1 of the decomposition pipeline template.
38+
v2 (str): Version 2 of the decomposition pipeline template.
39+
v3 (str): Version 3 of the decomposition pipeline template.
3840
"""
3941

4042
latest = "latest"
4143
v1 = "v1"
4244
v2 = "v2"
43-
# v3 = "v3"
45+
v3 = "v3"
4446

4547

4648
this_file_dir = Path(__file__).resolve().parent
Lines changed: 100 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,100 @@
1+
{% if user_inputs -%}
2+
import os
3+
{% endif -%}
4+
import textwrap
5+
6+
import mellea
7+
8+
{%- set ns = namespace(need_req=false) -%}
9+
{%- for item in subtasks -%}
10+
{%- for c in item.constraints or [] -%}
11+
{%- if c.val_fn -%}
12+
{%- set ns.need_req = true -%}
13+
{%- endif -%}
14+
{%- endfor -%}
15+
{%- endfor %}
16+
17+
{%- if ns.need_req %}
18+
from mellea.stdlib.requirements import req
19+
{%- for c in identified_constraints %}
20+
{%- if c.val_fn and c.val_fn_name %}
21+
from validations.{{ c.val_fn_name }} import validate_input as {{ c.val_fn_name }}
22+
{%- endif %}
23+
{%- endfor %}
24+
{%- endif %}
25+
26+
m = mellea.start_session()
27+
{%- if user_inputs %}
28+
29+
30+
# User Input Variables
31+
try:
32+
{%- for var in user_inputs %}
33+
{{ var | lower }} = os.environ["{{ var | upper }}"]
34+
{%- endfor %}
35+
except KeyError as e:
36+
raise SystemExit(f"ERROR: One or more required environment variables are not set: {e}")
37+
{%- endif %}
38+
{%- for item in subtasks %}
39+
40+
41+
{{ item.tag | lower }}_gnrl = textwrap.dedent(
42+
R"""
43+
{{ item.general_instructions | trim | indent(width=4, first=False) }}
44+
""".strip()
45+
)
46+
{{ item.tag | lower }} = m.instruct(
47+
{%- if not (item.input_vars_required or []) %}
48+
{{ item.subtask[3:] | trim | tojson }},
49+
{%- else %}
50+
textwrap.dedent(
51+
R"""
52+
{{ item.subtask[3:] | trim }}
53+
54+
Here are the input variables and their content:
55+
{%- for var in item.input_vars_required or [] %}
56+
57+
- {{ var | upper }} = {{ "{{" }}{{ var | upper }}{{ "}}" }}
58+
{%- endfor %}
59+
""".strip()
60+
),
61+
{%- endif %}
62+
{%- if item.constraints %}
63+
requirements=[
64+
{%- for c in item.constraints %}
65+
{%- if c.val_fn and c.val_fn_name %}
66+
req(
67+
{{ c.constraint | tojson}},
68+
validation_fn={{ c.val_fn_name }},
69+
),
70+
{%- else %}
71+
{{ c.constraint | tojson}},
72+
{%- endif %}
73+
{%- endfor %}
74+
],
75+
{%- else %}
76+
requirements=None,
77+
{%- endif %}
78+
{%- if item.input_vars_required %}
79+
user_variables={
80+
{%- for var in item.input_vars_required or [] %}
81+
{{ var | upper | tojson }}: {{ var | lower }},
82+
{%- endfor %}
83+
},
84+
{%- endif %}
85+
grounding_context={
86+
"GENERAL_INSTRUCTIONS": {{ item.tag | lower }}_gnrl,
87+
{%- for var in item.depends_on or [] %}
88+
{{ var | upper | tojson }}: {{ var | lower }}.value,
89+
{%- endfor %}
90+
},
91+
)
92+
assert {{ item.tag | lower }}.value is not None, 'ERROR: task "{{ item.tag | lower }}" execution failed'
93+
{%- if loop.last %}
94+
95+
96+
final_answer = {{ item.tag | lower }}.value
97+
98+
print(final_answer)
99+
{%- endif -%}
100+
{%- endfor -%}

0 commit comments

Comments
 (0)