Files
2026-05-09 00:04:44 -04:00

143 lines
7.9 KiB
Python

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')