This commit is contained in:
ValueOn AG 2025-07-24 07:12:47 +02:00
parent 4e15be8296
commit d03b82a49f
3 changed files with 44 additions and 48 deletions

View file

@ -136,36 +136,6 @@ class HandlingActions:
except Exception as e:
logger.error(f"Error creating action message: {str(e)}")
def parseActionResponse(self, response: str) -> list:
try:
json_start = response.find('{')
json_end = response.rfind('}') + 1
if json_start == -1 or json_end == 0:
raise ValueError("No JSON found in response")
json_str = response[json_start:json_end]
action_data = json.loads(json_str)
if 'actions' not in action_data:
raise ValueError("Action response missing 'actions' field")
return action_data['actions']
except Exception as e:
logger.error(f"Error parsing action response: {str(e)}")
return []
def parseReviewResponse(self, response: str) -> dict:
try:
json_start = response.find('{')
json_end = response.rfind('}') + 1
if json_start == -1 or json_end == 0:
raise ValueError("No JSON found in response")
json_str = response[json_start:json_end]
review = json.loads(json_str)
if 'status' not in review:
raise ValueError("Review response missing 'status' field")
return review
except Exception as e:
logger.error(f"Error parsing review response: {str(e)}")
return {'status': 'failed', 'reason': f'Parse error: {str(e)}'}
# Internal helper methods
def _createGenericValidationPrompt(self, action_result, action, context) -> str:

View file

@ -69,7 +69,20 @@ class HandlingTasks:
prompt = await self.service.callAiTextAdvanced(
createActionDefinitionPrompt(self, context)
)
actions = self.handlingActions.parseActionResponse(prompt)
# Inline parseActionResponse logic here
json_start = prompt.find('{')
json_end = prompt.rfind('}') + 1
if json_start == -1 or json_end == 0:
raise ValueError("No JSON found in response")
json_str = prompt[json_start:json_end]
try:
action_data = json.loads(json_str)
except Exception as e:
logger.error(f"Error parsing action response JSON: {str(e)}")
action_data = {}
if 'actions' not in action_data:
raise ValueError("Action response missing 'actions' field")
actions = action_data['actions']
if not self._validateActions(actions, context):
logger.error("Generated actions failed validation")
raise Exception("AI-generated actions failed validation - AI is required for action generation")
@ -166,19 +179,31 @@ class HandlingTasks:
# Use promptFactory for review prompt
prompt = await createResultReviewPrompt(self, review_context)
response = await self.service.callAiTextAdvanced(prompt)
review_dict = self.handlingActions.parseReviewResponse(response)
review_dict.setdefault('status', 'unknown')
review_dict.setdefault('reason', 'No reason provided')
review_dict.setdefault('quality_score', 5)
# Inline parseReviewResponse logic here
json_start = response.find('{')
json_end = response.rfind('}') + 1
if json_start == -1 or json_end == 0:
raise ValueError("No JSON found in review response")
json_str = response[json_start:json_end]
try:
review = json.loads(json_str)
except Exception as e:
logger.error(f"Error parsing review response JSON: {str(e)}")
review = {}
if 'status' not in review:
raise ValueError("Review response missing 'status' field")
review.setdefault('status', 'unknown')
review.setdefault('reason', 'No reason provided')
review.setdefault('quality_score', 5)
return ReviewResult(
status=review_dict.get('status', 'unknown'),
reason=review_dict.get('reason', 'No reason provided'),
improvements=review_dict.get('improvements', []),
quality_score=review_dict.get('quality_score', 5),
missing_outputs=review_dict.get('missing_outputs', []),
met_criteria=review_dict.get('met_criteria', []),
unmet_criteria=review_dict.get('unmet_criteria', []),
confidence=review_dict.get('confidence', 0.5)
status=review.get('status', 'unknown'),
reason=review.get('reason', 'No reason provided'),
improvements=review.get('improvements', []),
quality_score=review.get('quality_score', 5),
missing_outputs=review.get('missing_outputs', []),
met_criteria=review.get('met_criteria', []),
unmet_criteria=review.get('unmet_criteria', []),
confidence=review.get('confidence', 0.5)
)
except Exception as e:
logger.error(f"Error in reviewTaskCompletion: {str(e)}")

View file

@ -41,14 +41,15 @@ class ChatManager:
logger.info(f"Processing task {idx+1}/{len(task_plan.tasks)}: {task_step.description}")
# Define actions
previous_results = self.handlingTasks.getPreviousResults(task_step) if hasattr(self.handlingTasks, 'getPreviousResults') else []
actions = await self.handlingTasks.defineTaskActions(task_step, workflow, previous_results=previous_results)
actions = await self.handlingTasks.generateTaskActions(task_step, workflow, previous_results=previous_results)
if not actions:
logger.warning(f"No actions defined for task {task_step.id}, skipping.")
continue
# Execute actions
action_results = await self.handlingTasks.executeTaskActions(actions, workflow)
# Review completion
review_result = await self.handlingTasks.reviewTaskCompletion(task_step, actions, action_results, workflow)
# Execute actions and get results (including review_result)
task_result = await self.handlingTasks.executeTaskActions(actions, workflow)
# task_result should include action_results and review_result
action_results = getattr(task_result, 'action_results', None)
review_result = getattr(task_result, 'review_result', None)
# Handover
handover_data = await self.handlingTasks.prepareTaskHandover(task_step, actions, review_result, workflow)
# Collect results