Spaces:
Sleeping
Sleeping
File size: 3,449 Bytes
db1212e f4dc45b a837dfb a2c9a5a a837dfb db1212e f4dc45b a2c9a5a db1212e a2c9a5a db1212e f4dc45b db1212e f4dc45b db1212e f4dc45b db1212e f4dc45b db1212e f4dc45b db1212e c2b1c26 a2c9a5a | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78 79 80 81 82 83 84 85 86 87 88 89 90 91 92 93 94 95 96 97 98 99 100 101 102 103 104 105 106 107 108 109 110 111 112 113 114 115 116 117 118 | 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'
|