27/11/2024 : 12h30

master
cherif 2024-11-27 12:23:52 +01:00
parent 9f374361a0
commit 4fcd6219ff
6 changed files with 5244 additions and 2 deletions

View File

@ -2,9 +2,11 @@
<project version="4">
<component name="ChangeListManager">
<list default="true" id="c6d0259a-16e1-410d-91a1-830590ee2a08" name="Changes" comment="22/11/2024 - 18h">
<change afterPath="$PROJECT_DIR$/MySy_IA/mysy_ia.py" afterDir="false" />
<change afterPath="$PROJECT_DIR$/tools_cherif/mysy_openai_file.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/.idea/workspace.xml" beforeDir="false" afterPath="$PROJECT_DIR$/.idea/workspace.xml" afterDir="false" />
<change beforePath="$PROJECT_DIR$/GlobalVariable.py" beforeDir="false" afterPath="$PROJECT_DIR$/GlobalVariable.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/Log/log_file.log" beforeDir="false" afterPath="$PROJECT_DIR$/Log/log_file.log" afterDir="false" />
<change beforePath="$PROJECT_DIR$/articles_avis.py" beforeDir="false" afterPath="$PROJECT_DIR$/articles_avis.py" afterDir="false" />
<change beforePath="$PROJECT_DIR$/main.py" beforeDir="false" afterPath="$PROJECT_DIR$/main.py" afterDir="false" />
</list>
<option name="SHOW_DIALOG" value="false" />

View File

@ -26,6 +26,7 @@ if (MYSY_ENV == "PROD"):
CLIENT_URL_BASE = 'https://www.mysy-training.com/'
MYSY_DEBUG_LEVEL = 0
# Domaine pour le catalogue public
MYSY_PUBLIC_CATALOG_DOMAIN = 'mysy-hosting.online'
@ -771,4 +772,10 @@ EMAIL_DEST_RELATED_COLLECTION = ['inscription', 'apprenant', 'contact', 'nointer
EMAIL_MAX_DESTINAIRE = 30
EMAIL_MAX_CC = 10
EMAIL_MAX_BCC = 10
EMAIL_MAX_PJ = 5
EMAIL_MAX_PJ = 5
"""
La clé API de OpenAI
"""
OPENAI_KEY = "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"

File diff suppressed because it is too large Load Diff

186
MySy_IA/mysy_ia.py Normal file
View File

@ -0,0 +1,186 @@
import ast
import pymongo
import zeep
from pymongo import MongoClient
import json
from bson import ObjectId
import re
from datetime import datetime
import prj_common as mycommon
import secrets
import inspect
import sys, os
import csv
import pandas as pd
from pymongo import ReturnDocument
from math import isnan
import GlobalVariable as MYSY_GV
import ela_index_bdd_classes as eibdd
import email_mgt as email
from validate_email import validate_email
import jinja2
from openai import OpenAI
#openai.api_key = MYSY_GV.OPENAI_KEY
client = OpenAI(
# Defaults to os.environ.get("OPENAI_API_KEY")
api_key=MYSY_GV.OPENAI_KEY,
)
GPT_MODEL = "gpt-4-1106-preview" #"gpt-3.5-turbo-1106"
def mysy_openai_improve_text(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'action', 'text_input' ]
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas autorisé")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'action', 'text_input', ]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Les informations fournies sont incorrectes"
token = ""
if ("token" in diction.keys()):
if diction['token']:
token = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
normalised_text = str(diction['text_input']).replace('"', "'")
requestion_response = {}
requestion_response['question'] = "Améliorer le texte : '" +str(normalised_text)+"' "
#while (1):
# a=1
#prompt = f"Améliorer : 'Notre objectif est également de développer des solutions de proximité qui permettront à chacun de nos clients dêtre unique, de se distinguer. Cette approche personnalisée leur permettra de disposer dune solution adaptée à leur besoin.'"
messages = [{"role": "user", "content": requestion_response['question']}]
response = client.chat.completions.create(
model=GPT_MODEL,
messages=messages,
temperature=0
)
response_message = response.choices[0].message.content
requestion_response['reponse'] = str(response.choices[0].message.content)
requestion_response['refusal_status'] = str(response.choices[0].message.refusal)
"""
requestion_response['reponse'] = "reponseeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeeee"
requestion_response['refusal_status'] = "None"
"""
RetObject = []
RetObject.append(mycommon.JSONEncoder().encode(requestion_response))
#print(requestion_response)
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible d'exécuter la fonction : 'mysy_openai_improve_text' "
def mysy_openai_summarize_text(diction):
try:
diction = mycommon.strip_dictionary(diction)
"""
Verification des input acceptés
"""
field_list = ['token', 'action', 'text_input' ]
incom_keys = diction.keys()
for val in incom_keys:
if val not in field_list and val.startswith('my_') is False:
mycommon.myprint(str(
inspect.stack()[0][3]) + " Le champ '" + val + "' n'est pas autorisé")
return False, " Les informations fournies sont incorrectes"
"""
Verification des champs obligatoires
"""
field_list_obligatoire = ['token', 'action', 'text_input', ]
for val in field_list_obligatoire:
if val not in diction:
mycommon.myprint(
str(inspect.stack()[0][3]) + " - La valeur '" + val + "' n'est pas presente dans liste ")
return False, " Les informations fournies sont incorrectes"
token = ""
if ("token" in diction.keys()):
if diction['token']:
token = diction['token']
local_status, my_partner = mycommon.Check_Connexion_And_Return_Partner_Data(diction)
if (local_status is not True):
return local_status, my_partner
normalised_text = str(diction['text_input']).replace('"', "'")
requestion_response = {}
requestion_response['question'] = "Résumer le texte : '" +str(normalised_text)+"' "
#prompt = f"Améliorer : 'Notre objectif est également de développer des solutions de proximité qui permettront à chacun de nos clients dêtre unique, de se distinguer. Cette approche personnalisée leur permettra de disposer dune solution adaptée à leur besoin.'"
messages = [{"role": "user", "content": requestion_response['question']}]
response = client.chat.completions.create(
model=GPT_MODEL,
messages=messages,
temperature=0
)
response_message = response.choices[0].message.content
requestion_response['reponse'] = str(response.choices[0].message.content)
requestion_response['refusal_status'] = str(response.choices[0].message.refusal)
RetObject = []
RetObject.append(mycommon.JSONEncoder().encode(requestion_response))
print(requestion_response)
return True, RetObject
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible d'exécuter la fonction : 'mysy_openai_improve_text' "

54
main.py
View File

@ -98,6 +98,9 @@ import Dashbord_queries.BPF as BPF
import type_cours as type_cours
import tools_cherif.freemobile_send_sms as freemobile_send_sms
import tools_cherif.mysy_openai_file as mysy_openai_file
import MySy_IA.mysy_ia as mysy_ia
app = Flask(__name__)
cors = CORS(app, resources={r"/foo": {"origins": "*"}})
@ -11316,6 +11319,57 @@ def send_freemobile_sms():
"""
API test mysy Open AI
"""
@app.route('/myclass/api/mysy_openai/', methods=['POST','GET'])
@crossdomain(origin='*')
def mysy_openai():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### mysy_openai payload zzzz = ")
status, retval = mysy_openai_file.mysy_openai(payload)
return jsonify(status=status, message=retval)
@app.route('/myclass/api/mysy_openai_assistant/', methods=['POST','GET'])
@crossdomain(origin='*')
def mysy_openai_assistant():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### mysy_openai_assistant payload zzzz = ")
status, retval = mysy_openai_file.mysy_openai_assistant(payload)
return jsonify(status=status, message=retval)
"""
API IA : permet d'améliorer un texte avec l'aide de l'IA
"""
@app.route('/myclass/api/mysy_openai_improve_text/', methods=['POST','GET'])
@crossdomain(origin='*')
def mysy_openai_improve_text():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### mysy_openai_improve_text payload =(text long cherif) ", )
status, retval = mysy_ia.mysy_openai_improve_text(payload)
return jsonify(status=status, message=retval)
"""
API IA : permet de resumer un texte avec l'aide de l'IA
"""
@app.route('/myclass/api/mysy_openai_summarize_text/', methods=['POST','GET'])
@crossdomain(origin='*')
def mysy_openai_summarize_text():
# On recupere le corps (payload) de la requete
payload = mycommon.strip_dictionary (request.form.to_dict())
print(" ### mysy_openai_summarize_text payload = (text long cherif) ")
status, retval = mysy_ia.mysy_openai_summarize_text(payload)
return jsonify(status=status, message=retval)
if __name__ == '__main__':
print(" debut api")
context = SSL.Context(SSL.SSLv23_METHOD)

View File

@ -0,0 +1,106 @@
import ast
import pymongo
import zeep
from pymongo import MongoClient
import json
from bson import ObjectId
import re
from datetime import datetime
import prj_common as mycommon
import secrets
import inspect
import sys, os
import csv
import pandas as pd
from pymongo import ReturnDocument
from math import isnan
import GlobalVariable as MYSY_GV
import ela_index_bdd_classes as eibdd
import email_mgt as email
from validate_email import validate_email
import jinja2
from openai import OpenAI
#openai.api_key = MYSY_GV.OPENAI_KEY
client = OpenAI(
# Defaults to os.environ.get("OPENAI_API_KEY")
api_key=MYSY_GV.OPENAI_KEY,
)
GPT_MODEL = "gpt-4-1106-preview" #"gpt-3.5-turbo-1106"
def mysy_openai(diction):
try:
requestion_response = {}
requestion_response['question'] = "Ecris moi une conclusion d'un article qui parle de l'utilisation de l'API ChatGPT"
prompt = f"Améliorer : 'Notre objectif est également de développer des solutions de proximité qui permettront à chacun de nos clients dêtre unique, de se distinguer. Cette approche personnalisée leur permettra de disposer dune solution adaptée à leur besoin.'"
messages = [{"role": "user", "content": prompt}]
response = client.chat.completions.create(
model=GPT_MODEL,
messages=messages,
temperature=0
)
response_message = response.choices[0].message.content
#json_formatted_str = json.dumps(response, indent=2)
refusal_status = response.choices[0].message.refusal
print(" #refusal_status = ", refusal_status)
print(" ### AFFICHAGE GPT RESPONSE ")
print(response.choices[0])
print(response_message)
requestion_response['reponse'] = str(response.choices[0].message.content)
"""
prompt = f"Ecris moi une conclusion d'un article qui parle de l'utilisation de l'API ChatGPT"
completion = client.chat.completions.create(
model="gpt-3.5-turbo",
messages=[{"role": "user", "content": prompt}]
)
print(completion['choices'][0]['message']['content'])
"""
return True,requestion_response
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de traiter : mysy_openai"
def mysy_openai_assistant(diction):
try:
requestion_response = {}
my_assistant = client.beta.assistants.create(
instructions="You are a personal math tutor. When asked a question, write and run Python code to answer the question.",
name="Math Tutor",
tools=[{"type": "code_interpreter"}],
model="gpt-4o",
)
print(my_assistant)
return True, my_assistant
except Exception as e:
exc_type, exc_obj, exc_tb = sys.exc_info()
mycommon.myprint(str(inspect.stack()[0][3]) + " -" + str(e) + " - ERRORRRR AT Line : " + str(exc_tb.tb_lineno))
return False, " Impossible de traiter : mysy_openai_assistant"