dav74 commited on
Commit
ecacd0c
·
verified ·
1 Parent(s): 3152cc4

Upload main.py

Browse files
Files changed (1) hide show
  1. main.py +14 -4
main.py CHANGED
@@ -19,6 +19,7 @@ create_table()
19
  class Request(BaseModel):
20
  enonce : str
21
  code : str
 
22
 
23
  app = FastAPI()
24
 
@@ -45,14 +46,15 @@ Tu dois t'adresser directement à l'élève.
45
  L'élève ne peut pas te poser des questions, il peut juste te proposer son code.
46
  Tu ne dois pas proposer à l'élève de te poser des questions
47
  Il est inutile de proposer à l'élève de tester son code avec les exemples proposés.
48
- Tu ne dois pas proposer aux élèves des modifications du programme qui sorte du cadre de l'exercice. Par exemple, pour l'exercice qui demande d'écrire une fonction moyenne, si dans l'énoncé il est précisé que l'on a un tableau non vide d'entier en paramètre, il est inutile de dire à l'élève que son programme doit gérer les tableaux vides.
 
49
  Tu dois t'exprimer en français
50
  """
51
 
52
  prompt = ChatPromptTemplate.from_messages(
53
  [
54
  ("system", system),
55
- ("human", "Voici l'exercice proposé à l'élève: \n {enonce} \n\n Voici le programme proposé par l'élève : {code}"),
56
  ]
57
  )
58
 
@@ -61,10 +63,18 @@ chain = prompt | llm | StrOutputParser()
61
  class GraphState(TypedDict):
62
  enonce : str
63
  messages: Annotated[list[AnyMessage], add_messages]
 
64
 
65
 
66
  def chatbot(state : GraphState):
67
- response = chain.invoke({'enonce': state['enonce'].content, 'code' : state['messages'][-1].content})
 
 
 
 
 
 
 
68
  return {"messages": [AIMessage(content=response)]}
69
 
70
  workflow = StateGraph(GraphState)
@@ -77,7 +87,7 @@ app_chatbot = workflow.compile()
77
 
78
  @app.post('/request')
79
  def request(req: Request):
80
- rep = app_chatbot.invoke({"enonce" : HumanMessage(content=req.enonce),"messages": [HumanMessage(content=req.code)]}, stream_mode="values")
81
  return {"response":rep['messages'][-1].content}
82
 
83
 
 
19
  class Request(BaseModel):
20
  enonce : str
21
  code : str
22
+ res_test : str
23
 
24
  app = FastAPI()
25
 
 
46
  L'élève ne peut pas te poser des questions, il peut juste te proposer son code.
47
  Tu ne dois pas proposer à l'élève de te poser des questions
48
  Il est inutile de proposer à l'élève de tester son code avec les exemples proposés.
49
+ Tu ne dois pas proposer aux élèves des modifications du programme qui sorte du cadre de l'exercice. Par exemple, pour l'exercice qui demande d'écrire une fonction moyenne, si dans l'énoncé il est précisé que l'on a un tableau non vide d'entier en paramètre, il est inutile de dire à l'élève que son programme doit gérer les tableaux vides.
50
+ Des tests unitaires ont été prévus afin d'évaluer le code proposé par l'élève. Si les tests sont tous positifs, cela signifie que le code proposé par l'élève est correct (tu dois alors lui dire que son code est correct et éventuellement lui donner des conseils pour encore améliorer la qualité de son code). Si les tests unitaires sont négatifs, tu dois aider l'élève à trouver ces erreurs.
51
  Tu dois t'exprimer en français
52
  """
53
 
54
  prompt = ChatPromptTemplate.from_messages(
55
  [
56
  ("system", system),
57
+ ("human", "Voici l'exercice proposé à l'élève: \n {enonce} \n Voici le programme proposé par l'élève : {code} \n Voici le résultat des tests unitaires : {test_unit}"),
58
  ]
59
  )
60
 
 
63
  class GraphState(TypedDict):
64
  enonce : str
65
  messages: Annotated[list[AnyMessage], add_messages]
66
+ res_test : str
67
 
68
 
69
  def chatbot(state : GraphState):
70
+ msg_test = ""
71
+ if state['res_test'] == '0' :
72
+ msg_test = "Le code de l'élève n'a pas encore été testé avec les tests unitaires"
73
+ elif state['res_test'] == '1':
74
+ msg_test = "Le code de l'élève a bien été testé avec les tests unitaires, il a échoué à au moins un test unitaire"
75
+ elif state['res_test'] == '2':
76
+ msg_test = "Le code de l'élève a bien été testé avec les tests unitaires, il a réussi tous les tests unitaires"
77
+ response = chain.invoke({'enonce': state['enonce'].content, 'code' : state['messages'][-1].content, 'test_unit' : msg_test} )
78
  return {"messages": [AIMessage(content=response)]}
79
 
80
  workflow = StateGraph(GraphState)
 
87
 
88
  @app.post('/request')
89
  def request(req: Request):
90
+ rep = app_chatbot.invoke({"enonce" : HumanMessage(content=req.enonce),"messages": [HumanMessage(content=req.code)], "res_test" : [HumanMessage(content=req.res_test)]}, stream_mode="values")
91
  return {"response":rep['messages'][-1].content}
92
 
93