@@ -415,6 +415,83 @@ async def delete_step(self, step_id: str):
415415 await self .execute_sql (query = elements_query , parameters = parameters )
416416 await self .execute_sql (query = steps_query , parameters = parameters )
417417
418+ async def get_step (self , step_id : str ) -> Optional ["StepDict" ]:
419+ if self .show_logger :
420+ logger .info (f"SQLAlchemy: get_step, step_id={ step_id } " )
421+ steps_feedbacks_query = """
422+ SELECT
423+ s."id" AS step_id,
424+ s."name" AS step_name,
425+ s."type" AS step_type,
426+ s."threadId" AS step_threadid,
427+ s."parentId" AS step_parentid,
428+ s."streaming" AS step_streaming,
429+ s."waitForAnswer" AS step_waitforanswer,
430+ s."isError" AS step_iserror,
431+ s."metadata" AS step_metadata,
432+ s."tags" AS step_tags,
433+ s."input" AS step_input,
434+ s."output" AS step_output,
435+ s."createdAt" AS step_createdat,
436+ s."start" AS step_start,
437+ s."end" AS step_end,
438+ s."generation" AS step_generation,
439+ s."showInput" AS step_showinput,
440+ s."language" AS step_language,
441+ f."value" AS feedback_value,
442+ f."comment" AS feedback_comment,
443+ f."id" AS feedback_id
444+ FROM steps s LEFT JOIN feedbacks f ON s."id" = f."forId"
445+ WHERE s."id" = :step_id
446+ """
447+ steps_feedbacks = await self .execute_sql (
448+ query = steps_feedbacks_query , parameters = {"step_id" : step_id }
449+ )
450+
451+ if not isinstance (steps_feedbacks , list ) or not steps_feedbacks :
452+ return None
453+
454+ step_feedback = steps_feedbacks [0 ]
455+
456+ feedback = None
457+ if step_feedback ["feedback_value" ] is not None :
458+ feedback = FeedbackDict (
459+ forId = step_feedback ["step_id" ],
460+ id = step_feedback .get ("feedback_id" ),
461+ value = step_feedback ["feedback_value" ],
462+ comment = step_feedback .get ("feedback_comment" ),
463+ )
464+ return StepDict (
465+ id = step_feedback ["step_id" ],
466+ name = step_feedback ["step_name" ],
467+ type = step_feedback ["step_type" ],
468+ threadId = step_feedback .get ("step_threadid" ),
469+ parentId = step_feedback .get ("step_parentid" ),
470+ streaming = step_feedback .get ("step_streaming" , False ),
471+ waitForAnswer = step_feedback .get ("step_waitforanswer" ),
472+ isError = step_feedback .get ("step_iserror" ),
473+ metadata = (
474+ step_feedback ["step_metadata" ]
475+ if step_feedback .get ("step_metadata" ) is not None
476+ else {}
477+ ),
478+ tags = step_feedback .get ("step_tags" ),
479+ input = (
480+ step_feedback .get ("step_input" , "" )
481+ if step_feedback .get ("step_showinput" )
482+ not in [None , "false" ]
483+ else ""
484+ ),
485+ output = step_feedback .get ("step_output" , "" ),
486+ createdAt = step_feedback .get ("step_createdat" ),
487+ start = step_feedback .get ("step_start" ),
488+ end = step_feedback .get ("step_end" ),
489+ generation = step_feedback .get ("step_generation" ),
490+ showInput = step_feedback .get ("step_showinput" ),
491+ language = step_feedback .get ("step_language" ),
492+ feedback = feedback ,
493+ )
494+
418495 ###### Feedback ######
419496 async def upsert_feedback (self , feedback : Feedback ) -> str :
420497 if self .show_logger :
0 commit comments