genai-cooperativo / tasks /base_task.py
sandro-timia's picture
Your commit message
696e8b9
raw
history blame
No virus
2.47 kB
from abc import ABC, abstractmethod
import json
import os
class BaseTask(ABC):
def __init__(self, config_path, input_structure_path, output_structure_path):
self.config = self.load_config(config_path)
self.input_structure = self.load_json(input_structure_path)
self.output_structure = self.load_json(output_structure_path)
def load_json(self, file_path):
"""Load a JSON file."""
if not os.path.exists(file_path):
raise FileNotFoundError(f"{file_path} not found.")
with open(file_path, 'r') as file:
return json.load(file)
def load_config(self, config_path):
"""Load task configuration from the config file."""
if not os.path.exists(config_path):
raise FileNotFoundError(f"{config_path} not found.")
# Implement logic to load and parse the config file
with open(config_path, 'r') as file:
return json.load(file)
def validate_input(self, input_data):
"""Validate the input data against the input structure."""
# Implement validation logic comparing input_data with self.input_structure
for key, value_type in self.input_structure.items():
if key not in input_data or not isinstance(input_data[key], value_type):
raise ValueError(f"Invalid input for {key}: Expected {value_type}, got {type(input_data.get(key))}")
def validate_output(self, output_data):
"""Validate the output data against the output structure."""
for key, value_type in self.output_structure.items():
if key not in output_data or not isinstance(output_data[key], value_type):
raise ValueError(f"Invalid output for {key}: Expected {value_type}, got {type(output_data.get(key))}")
@abstractmethod
def load_input(self, input_data):
"""Load and validate input data."""
self.validate_input(input_data)
pass
@abstractmethod
def process(self):
"""Process the input and perform the task's specific action."""
pass
@abstractmethod
def save_output(self, result):
"""Format, validate, and return the output data."""
self.validate_output(result)
pass
def execute(self, input_data):
"""The main method to run the task end-to-end."""
self.load_input(input_data)
result = self.process()
return self.save_output(result)