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'