Ilyas KHIAT commited on
Commit
060b78c
·
1 Parent(s): 92de14f
Files changed (3) hide show
  1. main.py +12 -0
  2. prompt.py +27 -1
  3. rag.py +17 -2
main.py CHANGED
@@ -57,6 +57,10 @@ class Artwork(BaseModel):
57
  date: str
58
  description: str
59
 
 
 
 
 
60
 
61
  # Global variable to store the data
62
  artworks_data = []
@@ -126,5 +130,13 @@ async def generate(user_input: UserInput):
126
  return StreamingResponse(generate_stream(user_input.query,user_input.messages,stream=True),media_type="application/json")
127
  else:
128
  return generate_stream(user_input.query,user_input.messages,stream=False)
 
 
 
 
 
 
 
 
129
  except Exception as e:
130
  return {"message": str(e)}
 
57
  date: str
58
  description: str
59
 
60
+ class WhatifInput(BaseModel):
61
+ question: str
62
+ response: str
63
+
64
 
65
  # Global variable to store the data
66
  artworks_data = []
 
130
  return StreamingResponse(generate_stream(user_input.query,user_input.messages,stream=True),media_type="application/json")
131
  else:
132
  return generate_stream(user_input.query,user_input.messages,stream=False)
133
+ except Exception as e:
134
+ return {"message": str(e)}
135
+
136
+ @app.post("/whatif")
137
+ async def generate_whatif(whatif_input: WhatifInput):
138
+ try:
139
+ print(whatif_input)
140
+ return generate_whatif_stream(whatif_input["question"],whatif_input["response"])
141
  except Exception as e:
142
  return {"message": str(e)}
prompt.py CHANGED
@@ -45,6 +45,32 @@ Vous allez répondre à la question de l'utilisateur, qui portera sur ce livre.
45
  **Sortie attendue :** Votre réponse doit être bien formatée, plaisante à lire et inclure des émojis.
46
  '''
47
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
48
  summary_text = '''
49
  Ce récit d'anticipation, se déroulant principalement en 2038, explore les tensions entre l'art, la technologie et les limites planétaires à travers une exposition visionnaire des œuvres de René Magritte. Anne-Hélène, nouvelle directrice des Musées Royaux des Beaux-Arts de Belgique, organise cette exposition avec plusieurs personnages clés comme Tristan, un guide discret mais observateur, Karla Madrigale, PDG de la start-up IA SIGNATURE, et Jad Wahid, un artiste engagé. L'exposition vise à confronter les œuvres de Magritte aux limites planétaires pour inspirer de nouvelles façons de penser la place du vivant et de l'art dans un futur dominé par l'IA. Cependant, un incident dramatique se produit lorsque Karla, en interaction avec une installation immersive, tombe dans le coma à la suite d'une réaction toxique des plantes. Les événements soulèvent des questions sur l'éthique, la responsabilité et les limites de l'IA et des technologies immersives. Le récit invite à réfléchir sur le potentiel et les risques de l'IA dans l'art et la société.
50
- '''
 
 
45
  **Sortie attendue :** Votre réponse doit être bien formatée, plaisante à lire et inclure des émojis.
46
  '''
47
 
48
+ template_whatif = '''
49
+ Prends le temps de bien lire la question posée par IA SIGNATURE au lecteur et la réponse faite par le lecteur :
50
+ * Question posée par IA SIGNATURE -> {question}
51
+ * Bonne réponse du lecteur -> {response}
52
+
53
+ Contexte :
54
+ {context}
55
+
56
+ **Instructions** :
57
+ Relis le passage correspondant dans le récit et propose cinq autres choix qu'auraient pu faire l'auteur et ayant un impact sur la suite du récit. Numérote les résultats de 1 à 5 en prenant en compte :
58
+ Choix 1 : Choix ayant un impact déterminant avec une suite totalement différente pour le récit
59
+ Choix 2 : Choix entraînant une suite du récit beaucoup plus sombre
60
+ Choix 3 : Choix entraînant une suite du récit beaucoup plus ouverte, gai et inspirante
61
+ Choix 4 : A toi de jouer
62
+ Choix 5 : Conserve la réponse actuelle
63
+
64
+ **CONTRAINTE** :
65
+ Présente la réponse de la façon suivante :
66
+
67
+ -> "Voici 5 suites différentes possibles à ce moment du récit :"
68
+ -> Affiche les 5 réponses sous forme de 5 bullets points en sautant une ligne entre chaque choix pour aérer le texte
69
+ -> Demande en fin de réponse :"QUELLE SUITE VEUX TU DONNER AU RÉCIT ? (1 ou 2 ou 3 ou 4 ou 5) ?"
70
+
71
+ '''
72
+
73
  summary_text = '''
74
  Ce récit d'anticipation, se déroulant principalement en 2038, explore les tensions entre l'art, la technologie et les limites planétaires à travers une exposition visionnaire des œuvres de René Magritte. Anne-Hélène, nouvelle directrice des Musées Royaux des Beaux-Arts de Belgique, organise cette exposition avec plusieurs personnages clés comme Tristan, un guide discret mais observateur, Karla Madrigale, PDG de la start-up IA SIGNATURE, et Jad Wahid, un artiste engagé. L'exposition vise à confronter les œuvres de Magritte aux limites planétaires pour inspirer de nouvelles façons de penser la place du vivant et de l'art dans un futur dominé par l'IA. Cependant, un incident dramatique se produit lorsque Karla, en interaction avec une installation immersive, tombe dans le coma à la suite d'une réaction toxique des plantes. Les événements soulèvent des questions sur l'éthique, la responsabilité et les limites de l'IA et des technologies immersives. Le récit invite à réfléchir sur le potentiel et les risques de l'IA dans l'art et la société.
75
+ '''
76
+
rag.py CHANGED
@@ -75,7 +75,7 @@ class verification_score(BaseModel):
75
  score: float = Field(description="The score of the user's response from 0 to 10 to the question")
76
 
77
 
78
- llm = ChatOpenAI(model="gpt-4o", max_tokens=300, temperature=0.5)
79
 
80
  def split_texts(text : str) -> list[str]:
81
  splitter = RecursiveCharacterTextSplitter(
@@ -135,7 +135,6 @@ def generate_sphinx_response() -> sphinx_output:
135
 
136
  return llm_chain.invoke({"writer":writer,"book_name":book_name,"summary":summary,"excerpt":excerpt})
137
 
138
-
139
  #############################################################
140
  ### PAR ICI , CHOISIR LE DEGRE DE SEVERITE DE LA VERIFICATION
141
  def verify_response(response:str,answers:list[str],question:str) -> bool:
@@ -173,6 +172,22 @@ def generate_stream(query:str,messages = [], model = "gpt-4o-mini", max_tokens =
173
  else:
174
  return llm_chain.invoke({"name_book":name_book,"writer":writer,"name_icon":name_icon,"kg":graph,"context":context,"query":query})
175
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
 
176
  except Exception as e:
177
  print(e)
178
  return False
 
75
  score: float = Field(description="The score of the user's response from 0 to 10 to the question")
76
 
77
 
78
+ llm = ChatOpenAI(model="gpt-4o", max_tokens=700, temperature=0.5)
79
 
80
  def split_texts(text : str) -> list[str]:
81
  splitter = RecursiveCharacterTextSplitter(
 
135
 
136
  return llm_chain.invoke({"writer":writer,"book_name":book_name,"summary":summary,"excerpt":excerpt})
137
 
 
138
  #############################################################
139
  ### PAR ICI , CHOISIR LE DEGRE DE SEVERITE DE LA VERIFICATION
140
  def verify_response(response:str,answers:list[str],question:str) -> bool:
 
172
  else:
173
  return llm_chain.invoke({"name_book":name_book,"writer":writer,"name_icon":name_icon,"kg":graph,"context":context,"query":query})
174
 
175
+ except Exception as e:
176
+ print(e)
177
+ return False
178
+
179
+ def generate_whatif_stream(question:str,response:str, stream:bool = True) -> str:
180
+ try:
181
+ prompt = PromptTemplate.from_template(template_whatif)
182
+ llm_chain = prompt | llm | StrOutputParser()
183
+ print("Enter whatif")
184
+ context = retrieve_context_from_vectorestore(f"{question} {response}")
185
+ print(f"Context: {context}")
186
+
187
+ if generate_stream:
188
+ return llm_chain.stream({"question":question,"response":response,"context":context})
189
+ else:
190
+ return llm_chain.invoke({"question":question,"response":response,"context":context})
191
  except Exception as e:
192
  print(e)
193
  return False