from flask import session, jsonify from app.api.integrations import GenerativeEngineIntegration from app.utils.logger import logger from app.api.services.base_service import BaseService from marshmallow import ValidationError from app.extensions import db from app.models import SubscriptionGenerative, GenerativeResults, MembersProductsSettings, MembersProfile from app.api.enums import GenerativesList class GenerativesService(BaseService): @staticmethod def process_generatives_list(current_subscription): # catch - current_subscription process only for performance logger.info("SELECT GENERATIVE") planed_generate_list = SubscriptionGenerative.get_subscription_generative_list_by_status(0) if planed_generate_list: for t in planed_generate_list: logger.info(f"SELECT GENERATIVE {t}") practice_type = t.practice specialization = t.specialization subscription_uid = t.subscription_uid product_id = t.product_id member_id = t.member_id status = t.status SubscriptionGenerative.update_subscription_generative_status(subscription_uid, status + 1) # move the status up GenerativesService.process_generatives_action(member_id, practice_type, specialization, subscription_uid, product_id) GenerativesService.process_generatives_results_for_subscription(subscription_uid, product_id, member_id) GenerativesService.process_prepare_logo_text(member_id, product_id, subscription_uid) @staticmethod def process_prepare_logo_text(member_id, product_id, subscription_uid): try: mem_profile = MembersProfile.get_member_profile_by_member_id(member_id) if mem_profile and mem_profile.url_name: MembersProductsSettings.save_generative_product_settings(member_id, subscription_uid, product_id, "site_logo_text", 'TXT', mem_profile.url_name) except Exception as e: logger.error(f"An error process_prepare_logo_text: {str(e)}", exc_info=True) @staticmethod def process_generatives_results_for_subscription(subscription_uid, product_id, member_id): logger.info("PROCESS GENERATIVE") try: subscription_result = GenerativeResults.get_subscription_generative_by_subscription_uid(subscription_uid) if subscription_result: # with db.session.begin(): for sub in subscription_result: var_name = sub.var_name text_result = sub.text_result if var_name == 'about_description': paragraphs = text_result.split("\n\n") MembersProductsSettings.save_generative_product_settings(member_id, subscription_uid, product_id, "about_description", 'TXT', str(paragraphs[0])) MembersProductsSettings.save_generative_product_settings(member_id, subscription_uid, product_id, "about_extra_1", 'TXT', str(paragraphs[1])) MembersProductsSettings.save_generative_product_settings(member_id, subscription_uid, product_id, "about_extra_2", 'TXT', str(paragraphs[2])) else: MembersProductsSettings.save_generative_product_settings(member_id, subscription_uid, product_id, var_name, 'TXT', text_result) else: logger.info(f"None on -> PROCESS GENERATIVE for {subscription_uid}") except Exception as e: logger.error(f"An error process_generatives_results_for_subscription: {str(e)}", exc_info=True) @staticmethod def process_generatives_action(member_id, practice_type, specialization, subscription_uid, product_id): try: logger.info("ENTER GENERATIVE") generate_list = GenerativesList.get_generative_list(product_id) for t in generate_list: prompt_string = str(t["prompt"]).replace("REPLACE_THIS", practice_type).replace("REPLACE_ANOTHER", specialization) var_name = t["name"] logger.info(f"GenerativesService ****** *****: {t['name']} {prompt_string}") # json_response = None json_response = GenerativeEngineIntegration.ask_generative(prompt_string) if json_response is not None: logger.info(json_response) logger.info("1============================") logger.info(json_response["output"]) logger.info("2============================") logger.info(json_response["output"][0]) logger.info("3============================") # logger.info(json_response["output"][0]["content"][0]["text"]) text_result = json_response["output"][0]["content"][0]["text"] logger.info("4============================") logger.info( f"INSERT *****:{member_id} {product_id} {var_name} {subscription_uid} {text_result}") GenerativeResults.create_generative_result(member_id, product_id, var_name, subscription_uid, text_result) except ValidationError as err: logger.error(f"Validation Error: {getattr(err, 'messages', str(err))}") db.session.rollback() # return ResponseHelper.unprocessable_entity(result_description="Validation exception") except ValueError as err: logger.error(f"{getattr(err, 'messages', str(err))}") db.session.rollback() # return ResponseHelper.error(result_description=str(err)) except Exception as e: logger.error(f"An error occurred: {str(e)}", exc_info=True) db.session.rollback() # return ResponseHelper.internal_server_error() # GenerativeResults.create_generative_result(71, 'A000001', 'about_title', # '35e2d3ba-b5a6-4c1b-b962-05661d55b6f4', # 'Expert Neurologist: Brain & Nerve Care') # with db.session.begin(): # INFO - INSERT *****:71 A000001 about_title 35e2d3ba-b5a6-4c1b-b962-05661d55b6f4 Expert Neurologist: Brain & Nerve Care # GenerativeResults.create_generative_result(71, 'A000001', 'about_title', # '35e2d3ba-b5a6-4c1b-b962-05661d55b6f4', # 'Expert Neurologist: Brain & Nerve Care')