143 lines
7.9 KiB
Python
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')
|