Spaces:
Sleeping
Sleeping
| 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' | |