Aurele000's picture
ajout de conditions
a2c9a5a
Raw
History Blame
3.45 kB
from io import BytesIO
import requests
import re
import pandas as pd
from openai import OpenAI
import os
from langchain_core.messages import convert_to_messages
api_open_ai_agent_key=os.environ["OPENAI_API_KEY"]
client = OpenAI(api_key=api_open_ai_agent_key)
def pretty_print_message(message, indent=False):
pretty_message = message.pretty_repr(html=True)
if not indent:
print(pretty_message)
return
indented = "\n".join("\t" + c for c in pretty_message.split("\n"))
print(indented)
def pretty_print_messages(update, last_message=False):
is_subgraph = False
if isinstance(update, tuple):
ns, update = update
# skip parent graph updates in the printouts
if len(ns) == 0:
return
graph_id = ns[-1].split(":")[0]
print(f"Update from subgraph {graph_id}:")
print("\n")
is_subgraph = True
for node_name, node_update in update.items():
update_label = f"Update from node {node_name}:"
if is_subgraph:
update_label = "\t" + update_label
print(update_label)
print("\n")
messages = convert_to_messages(node_update["messages"])
if last_message:
messages = messages[-1:]
for m in messages:
pretty_print_message(m, indent=is_subgraph)
print("\n")
def clean_response(response):
match = re.search(r'FINAL ANSWER:\s*(.+)', response['supervisor']['messages'][-1].content)
answer = match.group(1).strip() if match else None
if answer is None :
answer = "pas de réponse"
return answer
def response_from_agent(supervisor, question):
for chunk in supervisor.stream(
{"messages": [{"role": "user", "content": question}]}
):
response = chunk
pretty_print_messages(chunk)
response = clean_response(response)
return response
def load_data(question):
task_id = question.get('task_id')
file_name = question.get('file_name')
if file_name == "":
return 'There is no attached file'
files_response = requests.get(f"https://agents-course-unit4-scoring.hf.space/files/{task_id}")
if files_response.status_code == 404:
return 'Le lien ne fonctionne pas'
if file_name.endswith('.xlsx'):
excel_data = BytesIO(files_response.content)
df = pd.read_excel(excel_data)
data_dict = df.to_dict(orient="list")
return data_dict
elif file_name.endswith('.png'):
response = client.responses.create(
model="gpt-4.1-mini",
input=[{
"role": "user",
"content": [
{"type": "input_text", "text": "what's in this image? Please give as much details as possible"},
{
"type": "input_image",
"image_url": f"https://agents-course-unit4-scoring.hf.space/files/{task_id}",
},
],
}],
)
return response.output_text
elif file_name.endswith('.mp3'):
audio_bytes = BytesIO(files_response.content)
audio_bytes.name = "audio.mp3"
transcription = client.audio.transcriptions.create(
model="whisper-1", # ou "whisper-1", mais "gpt-4o" est aussi correct
file=audio_bytes
)
return transcription.text
else :
return 'there is no attached file'