Skip to content

Commit 0f39c86

Browse files
authored
Merge pull request #27 from pamelafox/devuifix
Fix structured outputs for devui
2 parents 76a672c + a670f19 commit 0f39c86

12 files changed

+14
-12
lines changed

examples/spanish/workflow_aggregator_voting.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ async def tally(
8787
"""Cuenta votos de clasificadores y devuelve la categoría ganadora."""
8888
votes: list[tuple[str, str]] = []
8989
for result in results:
90-
classification: Classification = result.agent_response.value
90+
classification = Classification.model_validate_json(result.agent_response.text)
9191
votes.append((result.executor_id, classification.category.value))
9292

9393
labels = [label for _, label in votes]

examples/spanish/workflow_conditional_state.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6262
if not isinstance(message, AgentExecutorResponse):
6363
return None
6464

65-
return message.agent_response.value
65+
return ReviewDecision.model_validate_json(message.agent_response.text)
6666

6767

6868
# Funciones de condición — reciben el mensaje del ejecutor anterior.

examples/spanish/workflow_conditional_state_isolated.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -67,7 +67,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6767
if not isinstance(message, AgentExecutorResponse):
6868
return None
6969

70-
return message.agent_response.value
70+
return ReviewDecision.model_validate_json(message.agent_response.text)
7171

7272

7373
# Funciones de condición — reciben el mensaje del ejecutor anterior.

examples/spanish/workflow_conditional_structured.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6666
if not isinstance(message, AgentExecutorResponse):
6767
return None
6868

69-
return message.agent_response.value
69+
return ReviewDecision.model_validate_json(message.agent_response.text)
7070

7171

7272
def is_approved(message: Any) -> bool:

examples/spanish/workflow_converge.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -60,7 +60,7 @@ def parse_review_result(message: Any) -> ReviewResult | None:
6060
if not isinstance(message, AgentExecutorResponse):
6161
return None
6262

63-
return message.agent_response.value
63+
return ReviewResult.model_validate_json(message.agent_response.text)
6464

6565

6666
def is_approved(message: Any) -> bool:

examples/spanish/workflow_switch_case.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -87,7 +87,7 @@ class ClassifyResult(BaseModel):
8787
@executor(id="extract_category")
8888
async def extract_category(response: AgentExecutorResponse, ctx: WorkflowContext[ClassifyResult]) -> None:
8989
"""Analiza la salida JSON estructurada del clasificador y la envía aguas abajo."""
90-
result: ClassifyResult = response.agent_response.value
90+
result = ClassifyResult.model_validate_json(response.agent_response.text)
9191
print(f"→ Clasificado como: {result.category}{result.reasoning}")
9292
await ctx.send_message(result)
9393

examples/workflow_aggregator_voting.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -85,7 +85,7 @@ async def tally(
8585
"""Count classifier votes and yield the winning category."""
8686
votes: list[tuple[str, str]] = []
8787
for result in results:
88-
classification: Classification = result.agent_response.value
88+
classification = Classification.model_validate_json(result.agent_response.text)
8989
votes.append((result.executor_id, classification.category.value))
9090

9191
labels = [label for _, label in votes]

examples/workflow_conditional_state.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -62,7 +62,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6262
if not isinstance(message, AgentExecutorResponse):
6363
return None
6464

65-
return message.agent_response.value
65+
return ReviewDecision.model_validate_json(message.agent_response.text)
6666

6767

6868
# Condition functions — receive the message from the previous executor.
@@ -149,6 +149,7 @@ async def publisher(response: AgentExecutorResponse, ctx: WorkflowContext[Never,
149149
.build()
150150
)
151151

152+
152153
async def main():
153154
prompt = "Write a LinkedIn post predicting the 5 jobs AI agents will replace by December 2026."
154155
print(f"Prompt: {prompt}\n")

examples/workflow_conditional_state_isolated.py

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6666
if not isinstance(message, AgentExecutorResponse):
6767
return None
6868

69-
return message.agent_response.value
69+
return ReviewDecision.model_validate_json(message.agent_response.text)
7070

7171

7272
# Condition functions — receive the message from the previous executor.

examples/workflow_conditional_structured.py

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -66,7 +66,7 @@ def parse_review_decision(message: Any) -> ReviewDecision | None:
6666
if not isinstance(message, AgentExecutorResponse):
6767
return None
6868

69-
return message.agent_response.value
69+
return ReviewDecision.model_validate_json(message.agent_response.text)
7070

7171

7272
def is_approved(message: Any) -> bool:
@@ -142,6 +142,7 @@ async def main():
142142
print(f"Prompt: {prompt}\n")
143143
events = await workflow.run(prompt)
144144
for output in events.get_outputs():
145+
print('Output:')
145146
print(output)
146147

147148
if async_credential:

0 commit comments

Comments
 (0)