Spaces:
Running
Running
| """ | |
| Transformations service layer using API. | |
| """ | |
| from datetime import datetime | |
| from typing import Any, Dict, List, Union | |
| from loguru import logger | |
| from api.client import api_client | |
| from open_notebook.domain.transformation import Transformation | |
| class TransformationsService: | |
| """Service layer for transformations operations using API.""" | |
| def __init__(self): | |
| logger.info("Using API for transformations operations") | |
| def get_all_transformations(self) -> List[Transformation]: | |
| """Get all transformations.""" | |
| transformations_data = api_client.get_transformations() | |
| # Convert API response to Transformation objects | |
| transformations = [] | |
| for trans_data in transformations_data: | |
| transformation = Transformation( | |
| name=trans_data["name"], | |
| title=trans_data["title"], | |
| description=trans_data["description"], | |
| prompt=trans_data["prompt"], | |
| apply_default=trans_data["apply_default"], | |
| ) | |
| transformation.id = trans_data["id"] | |
| transformation.created = datetime.fromisoformat(trans_data["created"].replace('Z', '+00:00')) | |
| transformation.updated = datetime.fromisoformat(trans_data["updated"].replace('Z', '+00:00')) | |
| transformations.append(transformation) | |
| return transformations | |
| def get_transformation(self, transformation_id: str) -> Transformation: | |
| """Get a specific transformation.""" | |
| response = api_client.get_transformation(transformation_id) | |
| trans_data = response if isinstance(response, dict) else response[0] | |
| transformation = Transformation( | |
| name=trans_data["name"], | |
| title=trans_data["title"], | |
| description=trans_data["description"], | |
| prompt=trans_data["prompt"], | |
| apply_default=trans_data["apply_default"], | |
| ) | |
| transformation.id = trans_data["id"] | |
| transformation.created = datetime.fromisoformat(trans_data["created"].replace('Z', '+00:00')) | |
| transformation.updated = datetime.fromisoformat(trans_data["updated"].replace('Z', '+00:00')) | |
| return transformation | |
| def create_transformation( | |
| self, | |
| name: str, | |
| title: str, | |
| description: str, | |
| prompt: str, | |
| apply_default: bool = False | |
| ) -> Transformation: | |
| """Create a new transformation.""" | |
| response = api_client.create_transformation( | |
| name=name, | |
| title=title, | |
| description=description, | |
| prompt=prompt, | |
| apply_default=apply_default | |
| ) | |
| trans_data = response if isinstance(response, dict) else response[0] | |
| transformation = Transformation( | |
| name=trans_data["name"], | |
| title=trans_data["title"], | |
| description=trans_data["description"], | |
| prompt=trans_data["prompt"], | |
| apply_default=trans_data["apply_default"], | |
| ) | |
| transformation.id = trans_data["id"] | |
| transformation.created = datetime.fromisoformat(trans_data["created"].replace('Z', '+00:00')) | |
| transformation.updated = datetime.fromisoformat(trans_data["updated"].replace('Z', '+00:00')) | |
| return transformation | |
| def update_transformation(self, transformation: Transformation) -> Transformation: | |
| """Update a transformation.""" | |
| if not transformation.id: | |
| raise ValueError("Transformation ID is required for update") | |
| updates = { | |
| "name": transformation.name, | |
| "title": transformation.title, | |
| "description": transformation.description, | |
| "prompt": transformation.prompt, | |
| "apply_default": transformation.apply_default, | |
| } | |
| response = api_client.update_transformation(transformation.id, **updates) | |
| trans_data = response if isinstance(response, dict) else response[0] | |
| # Update the transformation object with the response | |
| transformation.name = trans_data["name"] | |
| transformation.title = trans_data["title"] | |
| transformation.description = trans_data["description"] | |
| transformation.prompt = trans_data["prompt"] | |
| transformation.apply_default = trans_data["apply_default"] | |
| transformation.updated = datetime.fromisoformat(trans_data["updated"].replace('Z', '+00:00')) | |
| return transformation | |
| def delete_transformation(self, transformation_id: str) -> bool: | |
| """Delete a transformation.""" | |
| api_client.delete_transformation(transformation_id) | |
| return True | |
| def execute_transformation( | |
| self, | |
| transformation_id: str, | |
| input_text: str, | |
| model_id: str | |
| ) -> Union[Dict[Any, Any], List[Dict[Any, Any]]]: | |
| """Execute a transformation on input text.""" | |
| result = api_client.execute_transformation( | |
| transformation_id=transformation_id, | |
| input_text=input_text, | |
| model_id=model_id | |
| ) | |
| return result | |
| # Global service instance | |
| transformations_service = TransformationsService() |