Spaces:
Sleeping
Sleeping
submission clean commit
Browse files- app_.py +0 -205
- f918266a-b3e0-4914-865d-4faa564f1aef.py +0 -37
- test.ipynb +0 -331
- test_app.ipynb +0 -169
- test_app2.ipynb +0 -361
- tools_test.ipynb +0 -389
app_.py
DELETED
|
@@ -1,205 +0,0 @@
|
|
| 1 |
-
import os
|
| 2 |
-
import gradio as gr
|
| 3 |
-
import requests
|
| 4 |
-
import inspect
|
| 5 |
-
import pandas as pd
|
| 6 |
-
|
| 7 |
-
import prompts_lib
|
| 8 |
-
import main_agent
|
| 9 |
-
|
| 10 |
-
# (Keep Constants as is)
|
| 11 |
-
# --- Constants ---
|
| 12 |
-
DEFAULT_API_URL = "https://agents-course-unit4-scoring.hf.space"
|
| 13 |
-
|
| 14 |
-
# --- Basic Agent Definition ---
|
| 15 |
-
# ----- THIS IS WERE YOU CAN BUILD WHAT YOU WANT ------
|
| 16 |
-
class BasicAgent:
|
| 17 |
-
def __init__(self):
|
| 18 |
-
pass
|
| 19 |
-
def __call__(self, question: str) -> str:
|
| 20 |
-
print(f"Agent received question (first 50 chars): {question[:50]}...")
|
| 21 |
-
|
| 22 |
-
response = main_agent.agent.invoke({'messages': question})
|
| 23 |
-
|
| 24 |
-
answer = response.get('messages')[-1].content
|
| 25 |
-
|
| 26 |
-
# fixed_answer = "This is a default answer."
|
| 27 |
-
print(f"Agent returning answer: {answer}")
|
| 28 |
-
return answer
|
| 29 |
-
|
| 30 |
-
def run_and_submit_all( profile: gr.OAuthProfile | None):
|
| 31 |
-
"""
|
| 32 |
-
Fetches all questions, runs the BasicAgent on them, submits all answers,
|
| 33 |
-
and displays the results.
|
| 34 |
-
"""
|
| 35 |
-
# --- Determine HF Space Runtime URL and Repo URL ---
|
| 36 |
-
space_id = os.getenv("SPACE_ID") # Get the SPACE_ID for sending link to the code
|
| 37 |
-
|
| 38 |
-
if profile:
|
| 39 |
-
username= f"{profile.username}"
|
| 40 |
-
print(f"User logged in: {username}")
|
| 41 |
-
else:
|
| 42 |
-
print("User not logged in.")
|
| 43 |
-
return "Please Login to Hugging Face with the button.", None
|
| 44 |
-
|
| 45 |
-
api_url = DEFAULT_API_URL
|
| 46 |
-
questions_url = f"{api_url}/questions"
|
| 47 |
-
file_url = f"{api_url}/file_name"
|
| 48 |
-
submit_url = f"{api_url}/submit"
|
| 49 |
-
|
| 50 |
-
# 1. Instantiate Agent ( modify this part to create your agent)
|
| 51 |
-
try:
|
| 52 |
-
agent = BasicAgent()
|
| 53 |
-
except Exception as e:
|
| 54 |
-
print(f"Error instantiating agent: {e}")
|
| 55 |
-
return f"Error initializing agent: {e}", None
|
| 56 |
-
# In the case of an app running as a hugging Face space, this link points toward your codebase ( usefull for others so please keep it public)
|
| 57 |
-
agent_code = f"https://huggingface.co/spaces/{space_id}/tree/main"
|
| 58 |
-
print(agent_code)
|
| 59 |
-
|
| 60 |
-
# 2. Fetch Questions
|
| 61 |
-
print(f"Fetching questions from: {questions_url}")
|
| 62 |
-
try:
|
| 63 |
-
response = requests.get(questions_url, timeout=15)
|
| 64 |
-
response.raise_for_status()
|
| 65 |
-
questions_data = response.json()
|
| 66 |
-
if not questions_data:
|
| 67 |
-
print("Fetched questions list is empty.")
|
| 68 |
-
return "Fetched questions list is empty or invalid format.", None
|
| 69 |
-
print(f"Fetched {len(questions_data)} questions.")
|
| 70 |
-
except requests.exceptions.RequestException as e:
|
| 71 |
-
print(f"Error fetching questions: {e}")
|
| 72 |
-
return f"Error fetching questions: {e}", None
|
| 73 |
-
except requests.exceptions.JSONDecodeError as e:
|
| 74 |
-
print(f"Error decoding JSON response from questions endpoint: {e}")
|
| 75 |
-
print(f"Response text: {response.text[:500]}")
|
| 76 |
-
return f"Error decoding server response for questions: {e}", None
|
| 77 |
-
except Exception as e:
|
| 78 |
-
print(f"An unexpected error occurred fetching questions: {e}")
|
| 79 |
-
return f"An unexpected error occurred fetching questions: {e}", None
|
| 80 |
-
|
| 81 |
-
# 3. Run your Agent
|
| 82 |
-
results_log = []
|
| 83 |
-
answers_payload = []
|
| 84 |
-
print(f"Running agent on {len(questions_data)} questions...")
|
| 85 |
-
for item in questions_data:
|
| 86 |
-
task_id = item.get("task_id")
|
| 87 |
-
question_text = item.get("question")
|
| 88 |
-
if not task_id or question_text is None:
|
| 89 |
-
print(f"Skipping item with missing task_id or question: {item}")
|
| 90 |
-
continue
|
| 91 |
-
try:
|
| 92 |
-
submitted_answer = agent(question_text)
|
| 93 |
-
answers_payload.append({"task_id": task_id, "submitted_answer": submitted_answer})
|
| 94 |
-
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": submitted_answer})
|
| 95 |
-
except Exception as e:
|
| 96 |
-
print(f"Error running agent on task {task_id}: {e}")
|
| 97 |
-
results_log.append({"Task ID": task_id, "Question": question_text, "Submitted Answer": f"AGENT ERROR: {e}"})
|
| 98 |
-
|
| 99 |
-
if not answers_payload:
|
| 100 |
-
print("Agent did not produce any answers to submit.")
|
| 101 |
-
return "Agent did not produce any answers to submit.", pd.DataFrame(results_log)
|
| 102 |
-
|
| 103 |
-
# 4. Prepare Submission
|
| 104 |
-
submission_data = {"username": username.strip(), "agent_code": agent_code, "answers": answers_payload}
|
| 105 |
-
status_update = f"Agent finished. Submitting {len(answers_payload)} answers for user '{username}'..."
|
| 106 |
-
print(status_update)
|
| 107 |
-
|
| 108 |
-
# 5. Submit
|
| 109 |
-
print(f"Submitting {len(answers_payload)} answers to: {submit_url}")
|
| 110 |
-
try:
|
| 111 |
-
response = requests.post(submit_url, json=submission_data, timeout=60)
|
| 112 |
-
response.raise_for_status()
|
| 113 |
-
result_data = response.json()
|
| 114 |
-
final_status = (
|
| 115 |
-
f"Submission Successful!\n"
|
| 116 |
-
f"User: {result_data.get('username')}\n"
|
| 117 |
-
f"Overall Score: {result_data.get('score', 'N/A')}% "
|
| 118 |
-
f"({result_data.get('correct_count', '?')}/{result_data.get('total_attempted', '?')} correct)\n"
|
| 119 |
-
f"Message: {result_data.get('message', 'No message received.')}"
|
| 120 |
-
)
|
| 121 |
-
print("Submission successful.")
|
| 122 |
-
results_df = pd.DataFrame(results_log)
|
| 123 |
-
return final_status, results_df
|
| 124 |
-
except requests.exceptions.HTTPError as e:
|
| 125 |
-
error_detail = f"Server responded with status {e.response.status_code}."
|
| 126 |
-
try:
|
| 127 |
-
error_json = e.response.json()
|
| 128 |
-
error_detail += f" Detail: {error_json.get('detail', e.response.text)}"
|
| 129 |
-
except requests.exceptions.JSONDecodeError:
|
| 130 |
-
error_detail += f" Response: {e.response.text[:500]}"
|
| 131 |
-
status_message = f"Submission Failed: {error_detail}"
|
| 132 |
-
print(status_message)
|
| 133 |
-
results_df = pd.DataFrame(results_log)
|
| 134 |
-
return status_message, results_df
|
| 135 |
-
except requests.exceptions.Timeout:
|
| 136 |
-
status_message = "Submission Failed: The request timed out."
|
| 137 |
-
print(status_message)
|
| 138 |
-
results_df = pd.DataFrame(results_log)
|
| 139 |
-
return status_message, results_df
|
| 140 |
-
except requests.exceptions.RequestException as e:
|
| 141 |
-
status_message = f"Submission Failed: Network error - {e}"
|
| 142 |
-
print(status_message)
|
| 143 |
-
results_df = pd.DataFrame(results_log)
|
| 144 |
-
return status_message, results_df
|
| 145 |
-
except Exception as e:
|
| 146 |
-
status_message = f"An unexpected error occurred during submission: {e}"
|
| 147 |
-
print(status_message)
|
| 148 |
-
results_df = pd.DataFrame(results_log)
|
| 149 |
-
return status_message, results_df
|
| 150 |
-
|
| 151 |
-
|
| 152 |
-
# --- Build Gradio Interface using Blocks ---
|
| 153 |
-
with gr.Blocks() as demo:
|
| 154 |
-
gr.Markdown("# Basic Agent Evaluation Runner")
|
| 155 |
-
gr.Markdown(
|
| 156 |
-
"""
|
| 157 |
-
**Instructions:**
|
| 158 |
-
|
| 159 |
-
1. Please clone this space, then modify the code to define your agent's logic, the tools, the necessary packages, etc ...
|
| 160 |
-
2. Log in to your Hugging Face account using the button below. This uses your HF username for submission.
|
| 161 |
-
3. Click 'Run Evaluation & Submit All Answers' to fetch questions, run your agent, submit answers, and see the score.
|
| 162 |
-
|
| 163 |
-
---
|
| 164 |
-
**Disclaimers:**
|
| 165 |
-
Once clicking on the "submit button, it can take quite some time ( this is the time for the agent to go through all the questions).
|
| 166 |
-
This space provides a basic setup and is intentionally sub-optimal to encourage you to develop your own, more robust solution. For instance for the delay process of the submit button, a solution could be to cache the answers and submit in a seperate action or even to answer the questions in async.
|
| 167 |
-
"""
|
| 168 |
-
)
|
| 169 |
-
|
| 170 |
-
gr.LoginButton()
|
| 171 |
-
|
| 172 |
-
run_button = gr.Button("Run Evaluation & Submit All Answers")
|
| 173 |
-
|
| 174 |
-
status_output = gr.Textbox(label="Run Status / Submission Result", lines=5, interactive=False)
|
| 175 |
-
# Removed max_rows=10 from DataFrame constructor
|
| 176 |
-
results_table = gr.DataFrame(label="Questions and Agent Answers", wrap=True)
|
| 177 |
-
|
| 178 |
-
run_button.click(
|
| 179 |
-
fn=run_and_submit_all,
|
| 180 |
-
outputs=[status_output, results_table]
|
| 181 |
-
)
|
| 182 |
-
|
| 183 |
-
if __name__ == "__main__":
|
| 184 |
-
print("\n" + "-"*30 + " App Starting " + "-"*30)
|
| 185 |
-
# Check for SPACE_HOST and SPACE_ID at startup for information
|
| 186 |
-
space_host_startup = os.getenv("SPACE_HOST")
|
| 187 |
-
space_id_startup = os.getenv("SPACE_ID") # Get SPACE_ID at startup
|
| 188 |
-
|
| 189 |
-
if space_host_startup:
|
| 190 |
-
print(f"✅ SPACE_HOST found: {space_host_startup}")
|
| 191 |
-
print(f" Runtime URL should be: https://{space_host_startup}.hf.space")
|
| 192 |
-
else:
|
| 193 |
-
print("ℹ️ SPACE_HOST environment variable not found (running locally?).")
|
| 194 |
-
|
| 195 |
-
if space_id_startup: # Print repo URLs if SPACE_ID is found
|
| 196 |
-
print(f"✅ SPACE_ID found: {space_id_startup}")
|
| 197 |
-
print(f" Repo URL: https://huggingface.co/spaces/{space_id_startup}")
|
| 198 |
-
print(f" Repo Tree URL: https://huggingface.co/spaces/{space_id_startup}/tree/main")
|
| 199 |
-
else:
|
| 200 |
-
print("ℹ️ SPACE_ID environment variable not found (running locally?). Repo URL cannot be determined.")
|
| 201 |
-
|
| 202 |
-
print("-"*(60 + len(" App Starting ")) + "\n")
|
| 203 |
-
|
| 204 |
-
print("Launching Gradio Interface for Basic Agent Evaluation...")
|
| 205 |
-
demo.launch(debug=True, share=False)
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
f918266a-b3e0-4914-865d-4faa564f1aef.py
DELETED
|
@@ -1,37 +0,0 @@
|
|
| 1 |
-
from random import randint
|
| 2 |
-
import time
|
| 3 |
-
|
| 4 |
-
class UhOh(Exception):
|
| 5 |
-
pass
|
| 6 |
-
|
| 7 |
-
class Hmm:
|
| 8 |
-
def __init__(self):
|
| 9 |
-
self.value = randint(-100, 100)
|
| 10 |
-
|
| 11 |
-
def Yeah(self):
|
| 12 |
-
if self.value == 0:
|
| 13 |
-
return True
|
| 14 |
-
else:
|
| 15 |
-
raise UhOh()
|
| 16 |
-
|
| 17 |
-
def Okay():
|
| 18 |
-
while True:
|
| 19 |
-
yield Hmm()
|
| 20 |
-
|
| 21 |
-
def keep_trying(go, first_try=True):
|
| 22 |
-
maybe = next(go)
|
| 23 |
-
try:
|
| 24 |
-
if maybe.Yeah():
|
| 25 |
-
return maybe.value
|
| 26 |
-
except UhOh:
|
| 27 |
-
if first_try:
|
| 28 |
-
print("Working...")
|
| 29 |
-
print("Please wait patiently...")
|
| 30 |
-
time.sleep(0.1)
|
| 31 |
-
return keep_trying(go, first_try=False)
|
| 32 |
-
|
| 33 |
-
print('done!')
|
| 34 |
-
|
| 35 |
-
if __name__ == "__main__":
|
| 36 |
-
go = Okay()
|
| 37 |
-
print(f"{keep_trying(go)}")
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test.ipynb
DELETED
|
@@ -1,331 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"cell_type": "code",
|
| 5 |
-
"execution_count": 1,
|
| 6 |
-
"id": "3f7d8cca",
|
| 7 |
-
"metadata": {},
|
| 8 |
-
"outputs": [],
|
| 9 |
-
"source": [
|
| 10 |
-
"%load_ext autoreload\n",
|
| 11 |
-
"\n",
|
| 12 |
-
"%autoreload 2"
|
| 13 |
-
]
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"cell_type": "code",
|
| 17 |
-
"execution_count": 30,
|
| 18 |
-
"id": "fc82f9e4",
|
| 19 |
-
"metadata": {},
|
| 20 |
-
"outputs": [],
|
| 21 |
-
"source": [
|
| 22 |
-
"import textwrap\n",
|
| 23 |
-
"\n",
|
| 24 |
-
"def print_(message: str):\n",
|
| 25 |
-
"\n",
|
| 26 |
-
" print(textwrap.fill(message, 75))"
|
| 27 |
-
]
|
| 28 |
-
},
|
| 29 |
-
{
|
| 30 |
-
"cell_type": "code",
|
| 31 |
-
"execution_count": 24,
|
| 32 |
-
"id": "bbd5b78b",
|
| 33 |
-
"metadata": {},
|
| 34 |
-
"outputs": [],
|
| 35 |
-
"source": [
|
| 36 |
-
"import main_agent as ma\n",
|
| 37 |
-
"import prompts_lib as pl\n"
|
| 38 |
-
]
|
| 39 |
-
},
|
| 40 |
-
{
|
| 41 |
-
"cell_type": "code",
|
| 42 |
-
"execution_count": 25,
|
| 43 |
-
"id": "9d00e0ae",
|
| 44 |
-
"metadata": {},
|
| 45 |
-
"outputs": [],
|
| 46 |
-
"source": [
|
| 47 |
-
"from langfuse import Langfuse\n",
|
| 48 |
-
"from langfuse.langchain import CallbackHandler\n",
|
| 49 |
-
"\n",
|
| 50 |
-
"langfuse = Langfuse(\n",
|
| 51 |
-
" public_key=\"pk-lf-61f55889-2dd2-47a1-ab49-99c60b7ddb40\",\n",
|
| 52 |
-
" secret_key=\"sk-lf-632ab357-d225-421f-9f75-7f6685960c50\",\n",
|
| 53 |
-
" host=\"https://cloud.langfuse.com\"\n",
|
| 54 |
-
")\n",
|
| 55 |
-
"\n",
|
| 56 |
-
"langfuse_handler = CallbackHandler()"
|
| 57 |
-
]
|
| 58 |
-
},
|
| 59 |
-
{
|
| 60 |
-
"cell_type": "code",
|
| 61 |
-
"execution_count": 26,
|
| 62 |
-
"id": "e097a098",
|
| 63 |
-
"metadata": {},
|
| 64 |
-
"outputs": [],
|
| 65 |
-
"source": [
|
| 66 |
-
"logfuse = False\n",
|
| 67 |
-
"\n",
|
| 68 |
-
"class BasicAgent:\n",
|
| 69 |
-
" def __init__(self):\n",
|
| 70 |
-
" self.agent = ma.agent\n",
|
| 71 |
-
" self.responses = []\n",
|
| 72 |
-
" def __call__(self, question: str) -> str:\n",
|
| 73 |
-
" print(f\"Agent received question (first 50 chars): {question[:50]}...\")\n",
|
| 74 |
-
"\n",
|
| 75 |
-
" # message = pl.system_prompt2 + question\n",
|
| 76 |
-
" if logfuse:\n",
|
| 77 |
-
" response = self.agent.invoke(\n",
|
| 78 |
-
" input={'messages': question},\n",
|
| 79 |
-
" config={\"callbacks\": [langfuse_handler]}\n",
|
| 80 |
-
" )\n",
|
| 81 |
-
" else:\n",
|
| 82 |
-
" response = self.agent.invoke(input={'messages': question})\n",
|
| 83 |
-
" \n",
|
| 84 |
-
" self.responses.append(response)\n",
|
| 85 |
-
"\n",
|
| 86 |
-
"\n",
|
| 87 |
-
" answer = response.get('messages')[-1].content\n",
|
| 88 |
-
"\n",
|
| 89 |
-
" # fixed_answer = \"This is a default answer.\"\n",
|
| 90 |
-
" print(f\"Agent returning answer: {answer}\")\n",
|
| 91 |
-
" return answer"
|
| 92 |
-
]
|
| 93 |
-
},
|
| 94 |
-
{
|
| 95 |
-
"cell_type": "code",
|
| 96 |
-
"execution_count": 27,
|
| 97 |
-
"id": "af68a6a5",
|
| 98 |
-
"metadata": {},
|
| 99 |
-
"outputs": [],
|
| 100 |
-
"source": [
|
| 101 |
-
"agent = BasicAgent()"
|
| 102 |
-
]
|
| 103 |
-
},
|
| 104 |
-
{
|
| 105 |
-
"cell_type": "code",
|
| 106 |
-
"execution_count": 34,
|
| 107 |
-
"id": "02c87f0c",
|
| 108 |
-
"metadata": {},
|
| 109 |
-
"outputs": [
|
| 110 |
-
{
|
| 111 |
-
"name": "stdout",
|
| 112 |
-
"output_type": "stream",
|
| 113 |
-
"text": [
|
| 114 |
-
"Agent received question (first 50 chars): \n",
|
| 115 |
-
"How many studio albums were published by Mercedes...\n",
|
| 116 |
-
"Agent returning answer: Cantora 1, Cantora 2.\n"
|
| 117 |
-
]
|
| 118 |
-
}
|
| 119 |
-
],
|
| 120 |
-
"source": [
|
| 121 |
-
"question = \"\"\"\n",
|
| 122 |
-
"How many studio albums were published by Mercedes Sousa between 2000 and 2009 included?\n",
|
| 123 |
-
" use duckduckgo tool you have available to search wikipedia to respond\n",
|
| 124 |
-
"\"\"\"\n",
|
| 125 |
-
"\n",
|
| 126 |
-
"question = \"\"\"\n",
|
| 127 |
-
"How many studio albums were published by Mercedes Sousa between 2000 and 2009 included?\n",
|
| 128 |
-
"you can use the latest 2022 version of the english wikipedia\n",
|
| 129 |
-
"\"\"\"\n",
|
| 130 |
-
"\n",
|
| 131 |
-
"answer = agent(question)"
|
| 132 |
-
]
|
| 133 |
-
},
|
| 134 |
-
{
|
| 135 |
-
"cell_type": "code",
|
| 136 |
-
"execution_count": null,
|
| 137 |
-
"id": "0bc839a3",
|
| 138 |
-
"metadata": {},
|
| 139 |
-
"outputs": [
|
| 140 |
-
{
|
| 141 |
-
"data": {
|
| 142 |
-
"text/plain": [
|
| 143 |
-
"ToolMessage(content='In the early 1970s, Sosa released two concept albums in collaboration with composer Ariel Ramírez and lyricist Félix Luna: Cantata Sudamericana and Mujeres Argentinas (Argentine Women). She also recorded a tribute to Chilean musician Violeta Parra in 1971, including what was to become one of Sosa\\'s signature songs, Gracias a la vida. She further popularized of songs written by Milton Nascimento of Brazil and Pablo Milanés and Silvio Rodríguez both from Cuba. Throughout the decade, she released albums such as Hasta la Victoria in 1972 and Traigo un Pueblo en mi Voz in 1973. They featured songs like \"Cuando tenga la tierra\", written by Ariel Petrocelli and Daniel Toro, which tackles political and social issues like wealth and land inequality. During the 1970s she was a part of two films by the director Leopoldo Torre Nilsson: El Santo de la Espada in 1970 and Güemes, la tierra en armas in 1971, in which she portrayed Juana Azurduy de Padilla, the guerrilla military leader who fought for\\nThe double album was a commercial success, being certified platinum by the CAPIF selling more than 200,000 copies in Argentina, Cantora 1 was also certified platinum selling 40,000 copies while Cantora 2 was certified gold selling 20,000 copies. The album also peaked at numbers 22 and 8 at the Top Latin Albums and Latin Pop Albums charts in United States, respectively, being Sosa\\'s only appearances on both charts.\\nAt documentary film titled Mercedes Sosa, Cantora un viaje íntimo was released on 2009, it was directed by Rodrigo Vila and features the recording process of the album as well as testimonies from the different guest artists that appeared on the project.\\nHaydée Mercedes Sosa (9 July 1935 – 4 October 2009) was an Argentine singer who was popular throughout Latin America and many countries outside the region. With her roots in Argentine folk music, Sosa became one of the preeminent exponents of El nuevo cancionero. She gave voice to songs written by many Latin American songwriters. Her music made people hail her as the \"voice of the voiceless ones\". She was often called \"the conscience of Latin America\".\\nCantora, un Viaje Íntimo (English: Cantora, An Intimate Journey) is a double album by Argentine singer Mercedes Sosa, released on 2009 through Sony Music Argentina. The album features Cantora 1 and Cantora 2, the project is Sosa\\'s final album before her death on October 4, 2009.\\nAt the 10th Annual Latin Grammy Awards, Cantora 1 was nominated for Album of the Year and won Best Folk Album and Best Recording Package, the latter award went to Alejandro Ros, the art director of the album. Additionally, Sosa won two out of five nominations for the albums at the Gardel Awards 2010, the double album was nominated for Album of the Year and Production of the Year and won Best DVD while both Cantora 1 and Cantora 2 were nominated for Best Female Folk Album, with the former winning the category.\\npublic. Sosa and her first husband, Manuel Oscar Matus, with whom she had one son, were key players in the mid-60s nueva canción movement (which was called nuevo cancionero in Argentina). Her second record was Canciones con Fundamento, a collection of Argentine folk songs.\\n== Background ==\\nThe albums were produced by Popi Spatocco, frequent collaborator of Sosa, engineered by Jorge \"Portugués\" Da Silva and recorded from May 2008 to June 2009 at Estudios Panda and Estudios Ion, both in Buenos Aires, Argentina, the first session took place at Estudios Panda while the rest of the album was recorded at Estudios Ion, the first songs to be recorded were \"Agua, Fuego, Tierra y Viento\" with Argentine singer Soledad Pastorutti and \"Misionera\" with Brazilian accordionist Luiz Carlos Borges, the recording of the album was marked by interruptions due to the delicate health condition of Sosa, she would eventually die on October 16, 2009 at age 74, a couple of months following the release of the albums, about Cantora, Spatocco said that \"it was like receiving a diploma of honor, she was dedicated to whatever happened because she knew that I had her back\".\\nSosa \"spent the late 1960s building her audience in Europe and among the cosmopolitan middle class in Buenos Aires, becoming in the process a much bigger star\" than her contemporaries. In 1967, Sosa toured the United States and Europe with great success. In later years, she performed and recorded extensively, broadening her repertoire to include material from throughout Latin America.\\nSosa was born on 9 July 1935, in San Miguel de Tucumán, in the northwestern Argentine province of Tucumán, of mestizo ancestry. She was of French, Spanish and Diaguita descent. Her nickname \"la negra\", which is a common nickname in Argentina for people with darker complexion, is a reference to her indigenous heritage. Her parents, a day laborer and a washerwoman, were Peronists, although they never registered in the party, and she started her career as a singer for the Peronist Party in Tucuman under the name Gladys Osorio. In 1950, at age fifteen, she won a singing competition organized by a local radio station and was given a contract to perform for two months. She recorded her first album, La Voz de la Zafra, in 1959. A performance at the 1965 Cosquín National Folklore Festival—where she was introduced and brought to the stage while sitting in the audience by fellow folk singer Jorge Cafrune— brought her to the attention of the Argentine public. Sosa and her first husband, Manuel', name='wikipedia_search_RAG', id='1b470c1c-7195-418f-85a2-543f6b84e3f4', tool_call_id='call_IDMJMtIXcwRBnCzoPPukPTpK')"
|
| 144 |
-
]
|
| 145 |
-
},
|
| 146 |
-
"execution_count": 33,
|
| 147 |
-
"metadata": {},
|
| 148 |
-
"output_type": "execute_result"
|
| 149 |
-
}
|
| 150 |
-
],
|
| 151 |
-
"source": []
|
| 152 |
-
},
|
| 153 |
-
{
|
| 154 |
-
"cell_type": "code",
|
| 155 |
-
"execution_count": 35,
|
| 156 |
-
"id": "069db350",
|
| 157 |
-
"metadata": {},
|
| 158 |
-
"outputs": [
|
| 159 |
-
{
|
| 160 |
-
"name": "stdout",
|
| 161 |
-
"output_type": "stream",
|
| 162 |
-
"text": [
|
| 163 |
-
"<class 'langchain_core.messages.human.HumanMessage'>: How many studio\n",
|
| 164 |
-
"albums were published by Mercedes Sousa between 2000 and 2009 included? you\n",
|
| 165 |
-
"can use the latest 2022 version of the english wikipedia\n",
|
| 166 |
-
"<class 'langchain_core.messages.ai.AIMessage'>:\n",
|
| 167 |
-
"<class 'langchain_core.messages.tool.ToolMessage'>: In the early 1970s,\n",
|
| 168 |
-
"Sosa released two concept albums in collaboration with composer Ariel\n",
|
| 169 |
-
"Ramírez and lyricist Félix Luna: Cantata Sudamericana and Mujeres\n",
|
| 170 |
-
"Argentinas (Argentine Women). She also recorded a tribute to Chilean\n",
|
| 171 |
-
"musician Violeta Parra in 1971, including what was to become one of Sosa's\n",
|
| 172 |
-
"signature songs, Gracias a la vida. She further popularized of songs\n",
|
| 173 |
-
"written by Milton Nascimento of Brazil and Pablo Milanés and Silvio\n",
|
| 174 |
-
"Rodríguez both from Cuba. Throughout the decade, she released albums such\n",
|
| 175 |
-
"as Hasta la Victoria in 1972 and Traigo un Pueblo en mi Voz in 1973. They\n",
|
| 176 |
-
"featured songs like \"Cuando tenga la tierra\", written by Ariel Petrocelli\n",
|
| 177 |
-
"and Daniel Toro, which tackles political and social issues like wealth and\n",
|
| 178 |
-
"land inequality. During the 1970s she was a part of two films by the\n",
|
| 179 |
-
"director Leopoldo Torre Nilsson: El Santo de la Espada in 1970 and Güemes,\n",
|
| 180 |
-
"la tierra en armas in 1971, in which she portrayed Juana Azurduy de\n",
|
| 181 |
-
"Padilla, the guerrilla military leader who fought for In the early 1970s,\n",
|
| 182 |
-
"Sosa released two concept albums in collaboration with composer Ariel\n",
|
| 183 |
-
"Ramírez and lyricist Félix Luna: Cantata Sudamericana and Mujeres\n",
|
| 184 |
-
"Argentinas (Argentine Women). She also recorded a tribute to Chilean\n",
|
| 185 |
-
"musician Violeta Parra in 1971, including what was to become one of Sosa's\n",
|
| 186 |
-
"signature songs, Gracias a la vida. She further popularized of songs\n",
|
| 187 |
-
"written by Milton Nascimento of Brazil and Pablo Milanés and Silvio\n",
|
| 188 |
-
"Rodríguez both from Cuba. Throughout the decade, she released albums such\n",
|
| 189 |
-
"as Hasta la Victoria in 1972 and Traigo un Pueblo en mi Voz in 1973. They\n",
|
| 190 |
-
"featured songs like \"Cuando tenga la tierra\", written by Ariel Petrocelli\n",
|
| 191 |
-
"and Daniel Toro, which tackles political and social issues like wealth and\n",
|
| 192 |
-
"land inequality. During the 1970s she was a part of two films by the\n",
|
| 193 |
-
"director Leopoldo Torre Nilsson: El Santo de la Espada in 1970 and Güemes,\n",
|
| 194 |
-
"la tierra en armas in 1971, in which she portrayed Juana Azurduy de\n",
|
| 195 |
-
"Padilla, the guerrilla military leader who fought for The double album was\n",
|
| 196 |
-
"a commercial success, being certified platinum by the CAPIF selling more\n",
|
| 197 |
-
"than 200,000 copies in Argentina, Cantora 1 was also certified platinum\n",
|
| 198 |
-
"selling 40,000 copies while Cantora 2 was certified gold selling 20,000\n",
|
| 199 |
-
"copies. The album also peaked at numbers 22 and 8 at the Top Latin Albums\n",
|
| 200 |
-
"and Latin Pop Albums charts in United States, respectively, being Sosa's\n",
|
| 201 |
-
"only appearances on both charts. At documentary film titled Mercedes Sosa,\n",
|
| 202 |
-
"Cantora un viaje íntimo was released on 2009, it was directed by Rodrigo\n",
|
| 203 |
-
"Vila and features the recording process of the album as well as testimonies\n",
|
| 204 |
-
"from the different guest artists that appeared on the project. The double\n",
|
| 205 |
-
"album was a commercial success, being certified platinum by the CAPIF\n",
|
| 206 |
-
"selling more than 200,000 copies in Argentina, Cantora 1 was also certified\n",
|
| 207 |
-
"platinum selling 40,000 copies while Cantora 2 was certified gold selling\n",
|
| 208 |
-
"20,000 copies. The album also peaked at numbers 22 and 8 at the Top Latin\n",
|
| 209 |
-
"Albums and Latin Pop Albums charts in United States, respectively, being\n",
|
| 210 |
-
"Sosa's only appearances on both charts. At documentary film titled Mercedes\n",
|
| 211 |
-
"Sosa, Cantora un viaje íntimo was released on 2009, it was directed by\n",
|
| 212 |
-
"Rodrigo Vila and features the recording process of the album as well as\n",
|
| 213 |
-
"testimonies from the different guest artists that appeared on the project.\n",
|
| 214 |
-
"Haydée Mercedes Sosa (9 July 1935 – 4 October 2009) was an Argentine singer\n",
|
| 215 |
-
"who was popular throughout Latin America and many countries outside the\n",
|
| 216 |
-
"region. With her roots in Argentine folk music, Sosa became one of the\n",
|
| 217 |
-
"preeminent exponents of El nuevo cancionero. She gave voice to songs\n",
|
| 218 |
-
"written by many Latin American songwriters. Her music made people hail her\n",
|
| 219 |
-
"as the \"voice of the voiceless ones\". She was often called \"the conscience\n",
|
| 220 |
-
"of Latin America\". Haydée Mercedes Sosa (9 July 1935 – 4 October 2009) was\n",
|
| 221 |
-
"an Argentine singer who was popular throughout Latin America and many\n",
|
| 222 |
-
"countries outside the region. With her roots in Argentine folk music, Sosa\n",
|
| 223 |
-
"became one of the preeminent exponents of El nuevo cancionero. She gave\n",
|
| 224 |
-
"voice to songs written by many Latin American songwriters. Her music made\n",
|
| 225 |
-
"people hail her as the \"voice of the voiceless ones\". She was often called\n",
|
| 226 |
-
"\"the conscience of Latin America\". Cantora, un Viaje Íntimo (English:\n",
|
| 227 |
-
"Cantora, An Intimate Journey) is a double album by Argentine singer\n",
|
| 228 |
-
"Mercedes Sosa, released on 2009 through Sony Music Argentina. The album\n",
|
| 229 |
-
"features Cantora 1 and Cantora 2, the project is Sosa's final album before\n",
|
| 230 |
-
"her death on October 4, 2009. At the 10th Annual Latin Grammy Awards,\n",
|
| 231 |
-
"Cantora 1 was nominated for Album of the Year and won Best Folk Album and\n",
|
| 232 |
-
"Best Recording Package, the latter award went to Alejandro Ros, the art\n",
|
| 233 |
-
"director of the album. Additionally, Sosa won two out of five nominations\n",
|
| 234 |
-
"for the albums at the Gardel Awards 2010, the double album was nominated\n",
|
| 235 |
-
"for Album of the Year and Production of the Year and won Best DVD while\n",
|
| 236 |
-
"both Cantora 1 and Cantora 2 were nominated for Best Female Folk Album,\n",
|
| 237 |
-
"with the former winning the category. Cantora, un Viaje Íntimo (English:\n",
|
| 238 |
-
"Cantora, An Intimate Journey) is a double album by Argentine singer\n",
|
| 239 |
-
"Mercedes Sosa, released on 2009 through Sony Music Argentina. The album\n",
|
| 240 |
-
"features Cantora 1 and Cantora 2, the project is Sosa's final album before\n",
|
| 241 |
-
"her death on October 4, 2009. At the 10th Annual Latin Grammy Awards,\n",
|
| 242 |
-
"Cantora 1 was nominated for Album of the Year and won Best Folk Album and\n",
|
| 243 |
-
"Best Recording Package, the latter award went to Alejandro Ros, the art\n",
|
| 244 |
-
"director of the album. Additionally, Sosa won two out of five nominations\n",
|
| 245 |
-
"for the albums at the Gardel Awards 2010, the double album was nominated\n",
|
| 246 |
-
"for Album of the Year and Production of the Year and won Best DVD while\n",
|
| 247 |
-
"both Cantora 1 and Cantora 2 were nominated for Best Female Folk Album,\n",
|
| 248 |
-
"with the former winning the category.\n",
|
| 249 |
-
"<class 'langchain_core.messages.ai.AIMessage'>: Cantora 1, Cantora 2.\n"
|
| 250 |
-
]
|
| 251 |
-
}
|
| 252 |
-
],
|
| 253 |
-
"source": [
|
| 254 |
-
"for m in agent.responses[-1].get('messages'):\n",
|
| 255 |
-
" print_(f'{type(m)}: {m.content}')"
|
| 256 |
-
]
|
| 257 |
-
},
|
| 258 |
-
{
|
| 259 |
-
"cell_type": "code",
|
| 260 |
-
"execution_count": null,
|
| 261 |
-
"id": "7f82cd74",
|
| 262 |
-
"metadata": {},
|
| 263 |
-
"outputs": [
|
| 264 |
-
{
|
| 265 |
-
"name": "stdout",
|
| 266 |
-
"output_type": "stream",
|
| 267 |
-
"text": [
|
| 268 |
-
"========================================\n",
|
| 269 |
-
"Current Node: {'assistant': {'messages': [AIMessage(content='I currently don\\'t have access to live tools like DuckDuckGo or the internet to perform searches. However, I can provide information based on my existing knowledge. Could you clarify if you meant \"Mercedes Sosa,\" the famous Argentine singer? If so, I can help you with her discography details based on my knowledge. Let me know!', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 69, 'prompt_tokens': 42, 'total_tokens': 111, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-11-20', 'system_fingerprint': 'fp_ee1d74bde0', 'id': 'chatcmpl-CFtQQV0iFj7IB32vT0dZP4GQXBCTa', 'service_tier': None, 'prompt_filter_results': [{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'jailbreak': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}], 'finish_reason': 'stop', 'logprobs': None, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'protected_material_code': {'filtered': False, 'detected': False}, 'protected_material_text': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}, id='run--e8e035c3-0fe0-45d3-b628-be9d0446b44b-0', usage_metadata={'input_tokens': 42, 'output_tokens': 69, 'total_tokens': 111, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})]}}\n"
|
| 270 |
-
]
|
| 271 |
-
}
|
| 272 |
-
],
|
| 273 |
-
"source": [
|
| 274 |
-
"message = pl.system_prompt2 + 'How many studio albums were published by Mercedes Sousa between 2000 and 2009 included? use the duckduckgo toll you have available to answer the question'\n",
|
| 275 |
-
"# message = 'How many studio albums were published by Mercedes Sousa between 2000 and 2009 included? use the duckduckgo toll you have available to answer the question'\n",
|
| 276 |
-
"\n",
|
| 277 |
-
"message = \"\"\"\n",
|
| 278 |
-
"use the duckduckgo tool you have available to search wikipedia to respond:\n",
|
| 279 |
-
" How many studio albums were published by Mercedes Sousa between 2000 and 2009 included?\"\n",
|
| 280 |
-
"\n",
|
| 281 |
-
"\"\"\"\n",
|
| 282 |
-
"\n",
|
| 283 |
-
"\n",
|
| 284 |
-
"for step in ma.agent.stream(\n",
|
| 285 |
-
" {\"messages\": [{\"role\": \"user\", \"content\": message}]}, \n",
|
| 286 |
-
" config={\"callbacks\": [langfuse_handler]}\n",
|
| 287 |
-
" ):\n",
|
| 288 |
-
" print(\"=\"*40)\n",
|
| 289 |
-
" print(\"Current Node:\", step)"
|
| 290 |
-
]
|
| 291 |
-
},
|
| 292 |
-
{
|
| 293 |
-
"cell_type": "code",
|
| 294 |
-
"execution_count": null,
|
| 295 |
-
"id": "d57e9368",
|
| 296 |
-
"metadata": {},
|
| 297 |
-
"outputs": [],
|
| 298 |
-
"source": [
|
| 299 |
-
"user_input=\"Hi there!, My name is subitha, I am a software engineer. Can you tell me about the latest research on quantum computing?\"\n",
|
| 300 |
-
"\n",
|
| 301 |
-
"events=graph.stream(\n",
|
| 302 |
-
" {\"messages\": [(\"user\", user_input)]},stream_mode=\"values\"\n",
|
| 303 |
-
")\n",
|
| 304 |
-
"\n",
|
| 305 |
-
"for event in events:\n",
|
| 306 |
-
" event[\"messages\"][-1].pretty_print()"
|
| 307 |
-
]
|
| 308 |
-
}
|
| 309 |
-
],
|
| 310 |
-
"metadata": {
|
| 311 |
-
"kernelspec": {
|
| 312 |
-
"display_name": ".venv (3.13.6)",
|
| 313 |
-
"language": "python",
|
| 314 |
-
"name": "python3"
|
| 315 |
-
},
|
| 316 |
-
"language_info": {
|
| 317 |
-
"codemirror_mode": {
|
| 318 |
-
"name": "ipython",
|
| 319 |
-
"version": 3
|
| 320 |
-
},
|
| 321 |
-
"file_extension": ".py",
|
| 322 |
-
"mimetype": "text/x-python",
|
| 323 |
-
"name": "python",
|
| 324 |
-
"nbconvert_exporter": "python",
|
| 325 |
-
"pygments_lexer": "ipython3",
|
| 326 |
-
"version": "3.13.6"
|
| 327 |
-
}
|
| 328 |
-
},
|
| 329 |
-
"nbformat": 4,
|
| 330 |
-
"nbformat_minor": 5
|
| 331 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_app.ipynb
DELETED
|
@@ -1,169 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"cell_type": "code",
|
| 5 |
-
"execution_count": null,
|
| 6 |
-
"id": "059183b9",
|
| 7 |
-
"metadata": {},
|
| 8 |
-
"outputs": [],
|
| 9 |
-
"source": [
|
| 10 |
-
"%load_ext autoreload\n",
|
| 11 |
-
"\n",
|
| 12 |
-
"%autoreload 2"
|
| 13 |
-
]
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"cell_type": "code",
|
| 17 |
-
"execution_count": 1,
|
| 18 |
-
"id": "d3e1ddaa",
|
| 19 |
-
"metadata": {},
|
| 20 |
-
"outputs": [],
|
| 21 |
-
"source": [
|
| 22 |
-
"import requests"
|
| 23 |
-
]
|
| 24 |
-
},
|
| 25 |
-
{
|
| 26 |
-
"cell_type": "code",
|
| 27 |
-
"execution_count": 2,
|
| 28 |
-
"id": "4f03dfb6",
|
| 29 |
-
"metadata": {},
|
| 30 |
-
"outputs": [],
|
| 31 |
-
"source": [
|
| 32 |
-
"DEFAULT_API_URL = \"https://agents-course-unit4-scoring.hf.space\"\n",
|
| 33 |
-
"\n",
|
| 34 |
-
"api_url = DEFAULT_API_URL\n",
|
| 35 |
-
"\n",
|
| 36 |
-
"questions_url = f\"{api_url}/questions\"\n",
|
| 37 |
-
"\n",
|
| 38 |
-
"\n",
|
| 39 |
-
"response = requests.get(questions_url, timeout=15)\n",
|
| 40 |
-
"response.raise_for_status()\n",
|
| 41 |
-
"questions_data = response.json()"
|
| 42 |
-
]
|
| 43 |
-
},
|
| 44 |
-
{
|
| 45 |
-
"cell_type": "code",
|
| 46 |
-
"execution_count": 30,
|
| 47 |
-
"id": "c086d928",
|
| 48 |
-
"metadata": {},
|
| 49 |
-
"outputs": [],
|
| 50 |
-
"source": [
|
| 51 |
-
"for i, item in enumerate(questions_data):\n",
|
| 52 |
-
" task_id = item.get(\"task_id\")\n",
|
| 53 |
-
" question_text = item.get(\"question\")\n",
|
| 54 |
-
"\n",
|
| 55 |
-
" if i==13:\n",
|
| 56 |
-
" break\n",
|
| 57 |
-
"\n"
|
| 58 |
-
]
|
| 59 |
-
},
|
| 60 |
-
{
|
| 61 |
-
"cell_type": "code",
|
| 62 |
-
"execution_count": 32,
|
| 63 |
-
"id": "f2be8564",
|
| 64 |
-
"metadata": {},
|
| 65 |
-
"outputs": [
|
| 66 |
-
{
|
| 67 |
-
"data": {
|
| 68 |
-
"text/plain": [
|
| 69 |
-
"{'task_id': '1f975693-876d-457b-a649-393859e79bf3',\n",
|
| 70 |
-
" 'question': \"Hi, I was out sick from my classes on Friday, so I'm trying to figure out what I need to study for my Calculus mid-term next week. My friend from class sent me an audio recording of Professor Willowbrook giving out the recommended reading for the test, but my headphones are broken :(\\n\\nCould you please listen to the recording for me and tell me the page numbers I'm supposed to go over? I've attached a file called Homework.mp3 that has the recording. Please provide just the page numbers as a comma-delimited list. And please provide the list in ascending order.\",\n",
|
| 71 |
-
" 'Level': '1',\n",
|
| 72 |
-
" 'file_name': '1f975693-876d-457b-a649-393859e79bf3.mp3'}"
|
| 73 |
-
]
|
| 74 |
-
},
|
| 75 |
-
"execution_count": 32,
|
| 76 |
-
"metadata": {},
|
| 77 |
-
"output_type": "execute_result"
|
| 78 |
-
}
|
| 79 |
-
],
|
| 80 |
-
"source": [
|
| 81 |
-
"item"
|
| 82 |
-
]
|
| 83 |
-
},
|
| 84 |
-
{
|
| 85 |
-
"cell_type": "code",
|
| 86 |
-
"execution_count": 31,
|
| 87 |
-
"id": "3951626a",
|
| 88 |
-
"metadata": {},
|
| 89 |
-
"outputs": [
|
| 90 |
-
{
|
| 91 |
-
"data": {
|
| 92 |
-
"text/plain": [
|
| 93 |
-
"\"Hi, I was out sick from my classes on Friday, so I'm trying to figure out what I need to study for my Calculus mid-term next week. My friend from class sent me an audio recording of Professor Willowbrook giving out the recommended reading for the test, but my headphones are broken :(\\n\\nCould you please listen to the recording for me and tell me the page numbers I'm supposed to go over? I've attached a file called Homework.mp3 that has the recording. Please provide just the page numbers as a comma-delimited list. And please provide the list in ascending order.\""
|
| 94 |
-
]
|
| 95 |
-
},
|
| 96 |
-
"execution_count": 31,
|
| 97 |
-
"metadata": {},
|
| 98 |
-
"output_type": "execute_result"
|
| 99 |
-
}
|
| 100 |
-
],
|
| 101 |
-
"source": [
|
| 102 |
-
"question_text"
|
| 103 |
-
]
|
| 104 |
-
},
|
| 105 |
-
{
|
| 106 |
-
"cell_type": "code",
|
| 107 |
-
"execution_count": 33,
|
| 108 |
-
"id": "442a3761",
|
| 109 |
-
"metadata": {},
|
| 110 |
-
"outputs": [],
|
| 111 |
-
"source": [
|
| 112 |
-
"import base64\n",
|
| 113 |
-
"image_path = 'cca530fc-4052-43b2-b130-b30968d8aa44.png'\n",
|
| 114 |
-
"with open(image_path, \"rb\") as image_file:\n",
|
| 115 |
-
" image_data = base64.b64encode(image_file.read()).decode(\"utf-8\")"
|
| 116 |
-
]
|
| 117 |
-
},
|
| 118 |
-
{
|
| 119 |
-
"cell_type": "code",
|
| 120 |
-
"execution_count": 34,
|
| 121 |
-
"id": "c8620c63",
|
| 122 |
-
"metadata": {},
|
| 123 |
-
"outputs": [
|
| 124 |
-
{
|
| 125 |
-
"data": {
|
| 126 |
-
"text/plain": [
|
| 127 |
-
"'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'"
|
| 128 |
-
]
|
| 129 |
-
},
|
| 130 |
-
"execution_count": 34,
|
| 131 |
-
"metadata": {},
|
| 132 |
-
"output_type": "execute_result"
|
| 133 |
-
}
|
| 134 |
-
],
|
| 135 |
-
"source": [
|
| 136 |
-
"image_data"
|
| 137 |
-
]
|
| 138 |
-
},
|
| 139 |
-
{
|
| 140 |
-
"cell_type": "code",
|
| 141 |
-
"execution_count": null,
|
| 142 |
-
"id": "4f51cb6d",
|
| 143 |
-
"metadata": {},
|
| 144 |
-
"outputs": [],
|
| 145 |
-
"source": []
|
| 146 |
-
}
|
| 147 |
-
],
|
| 148 |
-
"metadata": {
|
| 149 |
-
"kernelspec": {
|
| 150 |
-
"display_name": ".venv (3.13.6)",
|
| 151 |
-
"language": "python",
|
| 152 |
-
"name": "python3"
|
| 153 |
-
},
|
| 154 |
-
"language_info": {
|
| 155 |
-
"codemirror_mode": {
|
| 156 |
-
"name": "ipython",
|
| 157 |
-
"version": 3
|
| 158 |
-
},
|
| 159 |
-
"file_extension": ".py",
|
| 160 |
-
"mimetype": "text/x-python",
|
| 161 |
-
"name": "python",
|
| 162 |
-
"nbconvert_exporter": "python",
|
| 163 |
-
"pygments_lexer": "ipython3",
|
| 164 |
-
"version": "3.13.6"
|
| 165 |
-
}
|
| 166 |
-
},
|
| 167 |
-
"nbformat": 4,
|
| 168 |
-
"nbformat_minor": 5
|
| 169 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
test_app2.ipynb
DELETED
|
@@ -1,361 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"cell_type": "code",
|
| 5 |
-
"execution_count": 1,
|
| 6 |
-
"id": "8c3eda07",
|
| 7 |
-
"metadata": {},
|
| 8 |
-
"outputs": [],
|
| 9 |
-
"source": [
|
| 10 |
-
"%load_ext autoreload\n",
|
| 11 |
-
"\n",
|
| 12 |
-
"%autoreload 2"
|
| 13 |
-
]
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"cell_type": "code",
|
| 17 |
-
"execution_count": 2,
|
| 18 |
-
"id": "31ef3bc0",
|
| 19 |
-
"metadata": {},
|
| 20 |
-
"outputs": [],
|
| 21 |
-
"source": [
|
| 22 |
-
"from main_agent import Agent\n",
|
| 23 |
-
"import os\n",
|
| 24 |
-
"import requests\n",
|
| 25 |
-
"import pandas as pd\n",
|
| 26 |
-
"import tempfile"
|
| 27 |
-
]
|
| 28 |
-
},
|
| 29 |
-
{
|
| 30 |
-
"cell_type": "code",
|
| 31 |
-
"execution_count": 38,
|
| 32 |
-
"id": "64e382be",
|
| 33 |
-
"metadata": {},
|
| 34 |
-
"outputs": [],
|
| 35 |
-
"source": [
|
| 36 |
-
"DEFAULT_API_URL = \"https://agents-course-unit4-scoring.hf.space\"\n",
|
| 37 |
-
"api_url = DEFAULT_API_URL\n",
|
| 38 |
-
"questions_url = f\"{api_url}/questions\"\n",
|
| 39 |
-
"submit_url = f\"{api_url}/submit\"\n",
|
| 40 |
-
"files_url = f\"{api_url}/files\"\n",
|
| 41 |
-
"\n",
|
| 42 |
-
"response = requests.get(questions_url, timeout=15)\n",
|
| 43 |
-
"response.raise_for_status()\n",
|
| 44 |
-
"questions_data = response.json()\n",
|
| 45 |
-
"\n",
|
| 46 |
-
"for i, item in enumerate(questions_data):\n",
|
| 47 |
-
"\n",
|
| 48 |
-
" process = [11]\n",
|
| 49 |
-
" if i not in process:\n",
|
| 50 |
-
" continue\n",
|
| 51 |
-
"\n",
|
| 52 |
-
" task_id = item.get(\"task_id\")\n",
|
| 53 |
-
" question_text = item.get(\"question\")"
|
| 54 |
-
]
|
| 55 |
-
},
|
| 56 |
-
{
|
| 57 |
-
"cell_type": "code",
|
| 58 |
-
"execution_count": 42,
|
| 59 |
-
"id": "97b18495",
|
| 60 |
-
"metadata": {},
|
| 61 |
-
"outputs": [
|
| 62 |
-
{
|
| 63 |
-
"data": {
|
| 64 |
-
"text/plain": [
|
| 65 |
-
"'f918266a-b3e0-4914-865d-4faa564f1aef'"
|
| 66 |
-
]
|
| 67 |
-
},
|
| 68 |
-
"execution_count": 42,
|
| 69 |
-
"metadata": {},
|
| 70 |
-
"output_type": "execute_result"
|
| 71 |
-
}
|
| 72 |
-
],
|
| 73 |
-
"source": [
|
| 74 |
-
"task_id"
|
| 75 |
-
]
|
| 76 |
-
},
|
| 77 |
-
{
|
| 78 |
-
"cell_type": "code",
|
| 79 |
-
"execution_count": 39,
|
| 80 |
-
"id": "5076d2ac",
|
| 81 |
-
"metadata": {},
|
| 82 |
-
"outputs": [
|
| 83 |
-
{
|
| 84 |
-
"data": {
|
| 85 |
-
"text/plain": [
|
| 86 |
-
"'What is the final numeric output from the attached Python code?'"
|
| 87 |
-
]
|
| 88 |
-
},
|
| 89 |
-
"execution_count": 39,
|
| 90 |
-
"metadata": {},
|
| 91 |
-
"output_type": "execute_result"
|
| 92 |
-
}
|
| 93 |
-
],
|
| 94 |
-
"source": [
|
| 95 |
-
"question_text"
|
| 96 |
-
]
|
| 97 |
-
},
|
| 98 |
-
{
|
| 99 |
-
"cell_type": "code",
|
| 100 |
-
"execution_count": null,
|
| 101 |
-
"id": "87b70abf",
|
| 102 |
-
"metadata": {},
|
| 103 |
-
"outputs": [],
|
| 104 |
-
"source": []
|
| 105 |
-
},
|
| 106 |
-
{
|
| 107 |
-
"cell_type": "code",
|
| 108 |
-
"execution_count": 3,
|
| 109 |
-
"id": "c3d1d2be",
|
| 110 |
-
"metadata": {},
|
| 111 |
-
"outputs": [],
|
| 112 |
-
"source": [
|
| 113 |
-
"# get question\n",
|
| 114 |
-
"\n",
|
| 115 |
-
"def test_run():\n",
|
| 116 |
-
"\n",
|
| 117 |
-
" space_id = \"andrea-giorni/agents-course-unit4-basic-agent\"\n",
|
| 118 |
-
"\n",
|
| 119 |
-
" DEFAULT_API_URL = \"https://agents-course-unit4-scoring.hf.space\"\n",
|
| 120 |
-
" api_url = DEFAULT_API_URL\n",
|
| 121 |
-
" questions_url = f\"{api_url}/questions\"\n",
|
| 122 |
-
" submit_url = f\"{api_url}/submit\"\n",
|
| 123 |
-
" files_url = f\"{api_url}/files\"\n",
|
| 124 |
-
"\n",
|
| 125 |
-
" # 1. Instantiate Agent ( modify this part to create your agent)\n",
|
| 126 |
-
" try:\n",
|
| 127 |
-
" agent = Agent()\n",
|
| 128 |
-
" except Exception as e:\n",
|
| 129 |
-
" print(f\"Error instantiating agent: {e}\")\n",
|
| 130 |
-
" return f\"Error initializing agent: {e}\", None\n",
|
| 131 |
-
" # In the case of an app running as a hugging Face space, this link points toward your codebase (usefull for others so please keep it public)\n",
|
| 132 |
-
" agent_code = f\"https://huggingface.co/spaces/{space_id}/tree/main\"\n",
|
| 133 |
-
" print(agent_code)\n",
|
| 134 |
-
"\n",
|
| 135 |
-
" # 2. Fetch Questions\n",
|
| 136 |
-
" print(f\"Fetching questions from: {questions_url}\")\n",
|
| 137 |
-
" try:\n",
|
| 138 |
-
" response = requests.get(questions_url, timeout=15)\n",
|
| 139 |
-
" response.raise_for_status()\n",
|
| 140 |
-
" questions_data = response.json()\n",
|
| 141 |
-
" if not questions_data:\n",
|
| 142 |
-
" print(\"Fetched questions list is empty.\")\n",
|
| 143 |
-
" return \"Fetched questions list is empty or invalid format.\", None\n",
|
| 144 |
-
" print(f\"Fetched {len(questions_data)} questions.\")\n",
|
| 145 |
-
" except requests.exceptions.RequestException as e:\n",
|
| 146 |
-
" print(f\"Error fetching questions: {e}\")\n",
|
| 147 |
-
" return f\"Error fetching questions: {e}\", None\n",
|
| 148 |
-
" except requests.exceptions.JSONDecodeError as e:\n",
|
| 149 |
-
" print(f\"Error decoding JSON response from questions endpoint: {e}\")\n",
|
| 150 |
-
" print(f\"Response text: {response.text[:500]}\")\n",
|
| 151 |
-
" return f\"Error decoding server response for questions: {e}\", None\n",
|
| 152 |
-
" except Exception as e:\n",
|
| 153 |
-
" print(f\"An unexpected error occurred fetching questions: {e}\")\n",
|
| 154 |
-
" return f\"An unexpected error occurred fetching questions: {e}\", None\n",
|
| 155 |
-
"\n",
|
| 156 |
-
" # 3. Run your Agent\n",
|
| 157 |
-
" results_log = []\n",
|
| 158 |
-
" answers_payload = []\n",
|
| 159 |
-
" print(f\"Running agent on {len(questions_data)} questions...\")\n",
|
| 160 |
-
" for i, item in enumerate(questions_data):\n",
|
| 161 |
-
"\n",
|
| 162 |
-
" process = [11]\n",
|
| 163 |
-
" if i not in process:\n",
|
| 164 |
-
" continue\n",
|
| 165 |
-
"\n",
|
| 166 |
-
" task_id = item.get(\"task_id\")\n",
|
| 167 |
-
" question_text = item.get(\"question\")\n",
|
| 168 |
-
" if not task_id or question_text is None:\n",
|
| 169 |
-
" print(f\"Skipping item with missing task_id or question: {item}\")\n",
|
| 170 |
-
" continue\n",
|
| 171 |
-
" try:\n",
|
| 172 |
-
" file_path: Optional[str] = None\n",
|
| 173 |
-
" try:\n",
|
| 174 |
-
" file_response = requests.get(f\"{files_url}/{task_id}\", timeout=15)\n",
|
| 175 |
-
" if file_response.status_code == 200 and file_response.content:\n",
|
| 176 |
-
" # Get filename from Content-Disposition header or URL\n",
|
| 177 |
-
" filename = None\n",
|
| 178 |
-
" content_disposition = file_response.headers.get(\n",
|
| 179 |
-
" \"Content-Disposition\"\n",
|
| 180 |
-
" )\n",
|
| 181 |
-
" if content_disposition and \"filename=\" in content_disposition:\n",
|
| 182 |
-
" filename = content_disposition.split(\"filename=\")[-1].strip('\"')\n",
|
| 183 |
-
" else:\n",
|
| 184 |
-
" # Try to get filename from URL\n",
|
| 185 |
-
" url = file_response.url\n",
|
| 186 |
-
" filename = url.split(\"/\")[-1]\n",
|
| 187 |
-
" if not filename or filename == str(task_id):\n",
|
| 188 |
-
" filename = f\"file_{task_id}\"\n",
|
| 189 |
-
"\n",
|
| 190 |
-
" # Create temp directory and save file with original name\n",
|
| 191 |
-
" temp_dir = tempfile.mkdtemp()\n",
|
| 192 |
-
" file_path = os.path.join(temp_dir, filename)\n",
|
| 193 |
-
" with open(file_path, \"wb\") as f:\n",
|
| 194 |
-
" f.write(file_response.content)\n",
|
| 195 |
-
" print(f\"Downloaded file for task {task_id} to {file_path}\")\n",
|
| 196 |
-
" else:\n",
|
| 197 |
-
" print(f\"No file for task {task_id} or file is empty.\")\n",
|
| 198 |
-
" except Exception as e:\n",
|
| 199 |
-
" print(f\"Error downloading file for task {task_id}: {e}\")\n",
|
| 200 |
-
" file_path = None\n",
|
| 201 |
-
"\n",
|
| 202 |
-
" submitted_answer = agent.builder.invoke(\n",
|
| 203 |
-
" input={'messages': question_text,\n",
|
| 204 |
-
" 'file_path': file_path}\n",
|
| 205 |
-
" )\n",
|
| 206 |
-
" answers_payload.append(\n",
|
| 207 |
-
" {\"task_id\": task_id, \"submitted_answer\": submitted_answer}\n",
|
| 208 |
-
" )\n",
|
| 209 |
-
" results_log.append(\n",
|
| 210 |
-
" {\n",
|
| 211 |
-
" \"Task ID\": task_id,\n",
|
| 212 |
-
" \"Question\": question_text,\n",
|
| 213 |
-
" \"Submitted Answer\": submitted_answer,\n",
|
| 214 |
-
" }\n",
|
| 215 |
-
" )\n",
|
| 216 |
-
" except Exception as e:\n",
|
| 217 |
-
" print(f\"Error running agent on task {task_id}: {e}\")\n",
|
| 218 |
-
" results_log.append(\n",
|
| 219 |
-
" {\n",
|
| 220 |
-
" \"Task ID\": task_id,\n",
|
| 221 |
-
" \"Question\": question_text,\n",
|
| 222 |
-
" \"Submitted Answer\": f\"AGENT ERROR: {e}\",\n",
|
| 223 |
-
" }\n",
|
| 224 |
-
" )\n",
|
| 225 |
-
"\n",
|
| 226 |
-
" if not answers_payload:\n",
|
| 227 |
-
" print(\"Agent did not produce any answers to submit.\")\n",
|
| 228 |
-
" return \"Agent did not produce any answers to submit.\", pd.DataFrame(results_log)\n",
|
| 229 |
-
" return results_log\n",
|
| 230 |
-
" "
|
| 231 |
-
]
|
| 232 |
-
},
|
| 233 |
-
{
|
| 234 |
-
"cell_type": "code",
|
| 235 |
-
"execution_count": 4,
|
| 236 |
-
"id": "2d2800d9",
|
| 237 |
-
"metadata": {},
|
| 238 |
-
"outputs": [
|
| 239 |
-
{
|
| 240 |
-
"name": "stdout",
|
| 241 |
-
"output_type": "stream",
|
| 242 |
-
"text": [
|
| 243 |
-
"https://huggingface.co/spaces/andrea-giorni/agents-course-unit4-basic-agent/tree/main\n",
|
| 244 |
-
"Fetching questions from: https://agents-course-unit4-scoring.hf.space/questions\n",
|
| 245 |
-
"Fetched 20 questions.\n",
|
| 246 |
-
"Running agent on 20 questions...\n",
|
| 247 |
-
"Downloaded file for task f918266a-b3e0-4914-865d-4faa564f1aef to C:\\Users\\ANDREA~1.GIO\\AppData\\Local\\Temp\\tmp1qjn3jhf\\f918266a-b3e0-4914-865d-4faa564f1aef.py\n"
|
| 248 |
-
]
|
| 249 |
-
},
|
| 250 |
-
{
|
| 251 |
-
"data": {
|
| 252 |
-
"text/plain": [
|
| 253 |
-
"[{'Task ID': 'f918266a-b3e0-4914-865d-4faa564f1aef',\n",
|
| 254 |
-
" 'Question': 'What is the final numeric output from the attached Python code?',\n",
|
| 255 |
-
" 'Submitted Answer': {'messages': [HumanMessage(content='What is the final numeric output from the attached Python code?', additional_kwargs={}, response_metadata={}, id='a6678c53-d33c-4b9b-8755-dda03d677ffe'),\n",
|
| 256 |
-
" SystemMessage(content='File path provided: C:\\\\Users\\\\ANDREA~1.GIO\\\\AppData\\\\Local\\\\Temp\\\\tmp1qjn3jhf\\\\f918266a-b3e0-4914-865d-4faa564f1aef.py', additional_kwargs={}, response_metadata={}, id='96e9d09b-83fc-4b4b-af72-358ac7e82595'),\n",
|
| 257 |
-
" AIMessage(content='', additional_kwargs={'tool_calls': [{'id': 'call_jdSq4awjVLISHfg2M2fVgKZK', 'function': {'arguments': '{\"script_path\":\"C:\\\\\\\\Users\\\\\\\\ANDREA~1.GIO\\\\\\\\AppData\\\\\\\\Local\\\\\\\\Temp\\\\\\\\tmp1qjn3jhf\\\\\\\\f918266a-b3e0-4914-865d-4faa564f1aef.py\"}', 'name': 'python-script-opener'}, 'type': 'function'}], 'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 66, 'prompt_tokens': 433, 'total_tokens': 499, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-11-20', 'system_fingerprint': 'fp_ee1d74bde0', 'id': 'chatcmpl-CGJMmujqOyiKEnsTG6vRoJgX7ze2l', 'service_tier': None, 'prompt_filter_results': [{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'jailbreak': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}], 'finish_reason': 'tool_calls', 'logprobs': None, 'content_filter_results': {}}, id='run--dd84559c-e402-4e89-a930-7d5d724cec33-0', tool_calls=[{'name': 'python-script-opener', 'args': {'script_path': 'C:\\\\Users\\\\ANDREA~1.GIO\\\\AppData\\\\Local\\\\Temp\\\\tmp1qjn3jhf\\\\f918266a-b3e0-4914-865d-4faa564f1aef.py'}, 'id': 'call_jdSq4awjVLISHfg2M2fVgKZK', 'type': 'tool_call'}], usage_metadata={'input_tokens': 433, 'output_tokens': 66, 'total_tokens': 499, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}}),\n",
|
| 258 |
-
" ToolMessage(content='from random import randint\\nimport time\\n\\nclass UhOh(Exception):\\n pass\\n\\nclass Hmm:\\n def __init__(self):\\n self.value = randint(-100, 100)\\n\\n def Yeah(self):\\n if self.value == 0:\\n return True\\n else:\\n raise UhOh()\\n\\ndef Okay():\\n while True:\\n yield Hmm()\\n\\ndef keep_trying(go, first_try=True):\\n maybe = next(go)\\n try:\\n if maybe.Yeah():\\n return maybe.value\\n except UhOh:\\n if first_try:\\n print(\"Working...\")\\n print(\"Please wait patiently...\")\\n time.sleep(0.1)\\n return keep_trying(go, first_try=False)\\n\\nif __name__ == \"__main__\":\\n go = Okay()\\n print(f\"{keep_trying(go)}\")\\n', name='python-script-opener', id='8675c9c9-e62c-44ac-b5de-6c71abaeb77b', tool_call_id='call_jdSq4awjVLISHfg2M2fVgKZK'),\n",
|
| 259 |
-
" SystemMessage(content='File path provided: C:\\\\Users\\\\ANDREA~1.GIO\\\\AppData\\\\Local\\\\Temp\\\\tmp1qjn3jhf\\\\f918266a-b3e0-4914-865d-4faa564f1aef.py', additional_kwargs={}, response_metadata={}, id='ab11cfe8-faf5-4efa-b27e-005e75e7984a'),\n",
|
| 260 |
-
" AIMessage(content='The final numeric output depends on the random value generated by `randint(-100, 100)` in the script. It will be a number between negative one hundred and one hundred, inclusive.', additional_kwargs={'refusal': None}, response_metadata={'token_usage': {'completion_tokens': 41, 'prompt_tokens': 731, 'total_tokens': 772, 'completion_tokens_details': {'accepted_prediction_tokens': 0, 'audio_tokens': 0, 'reasoning_tokens': 0, 'rejected_prediction_tokens': 0}, 'prompt_tokens_details': {'audio_tokens': 0, 'cached_tokens': 0}}, 'model_name': 'gpt-4o-2024-11-20', 'system_fingerprint': 'fp_ee1d74bde0', 'id': 'chatcmpl-CGJMnycl3rGX9qetfOnrpvh2MYnxJ', 'service_tier': None, 'prompt_filter_results': [{'prompt_index': 0, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'jailbreak': {'filtered': False, 'detected': False}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}], 'finish_reason': 'stop', 'logprobs': None, 'content_filter_results': {'hate': {'filtered': False, 'severity': 'safe'}, 'self_harm': {'filtered': False, 'severity': 'safe'}, 'sexual': {'filtered': False, 'severity': 'safe'}, 'violence': {'filtered': False, 'severity': 'safe'}}}, id='run--f4461940-3ac0-4bab-b413-244d2cf0d503-0', usage_metadata={'input_tokens': 731, 'output_tokens': 41, 'total_tokens': 772, 'input_token_details': {'audio': 0, 'cache_read': 0}, 'output_token_details': {'audio': 0, 'reasoning': 0}})],\n",
|
| 261 |
-
" 'file_path': 'C:\\\\Users\\\\ANDREA~1.GIO\\\\AppData\\\\Local\\\\Temp\\\\tmp1qjn3jhf\\\\f918266a-b3e0-4914-865d-4faa564f1aef.py'}}]"
|
| 262 |
-
]
|
| 263 |
-
},
|
| 264 |
-
"execution_count": 4,
|
| 265 |
-
"metadata": {},
|
| 266 |
-
"output_type": "execute_result"
|
| 267 |
-
}
|
| 268 |
-
],
|
| 269 |
-
"source": [
|
| 270 |
-
"test_run()"
|
| 271 |
-
]
|
| 272 |
-
},
|
| 273 |
-
{
|
| 274 |
-
"cell_type": "code",
|
| 275 |
-
"execution_count": 22,
|
| 276 |
-
"id": "3fe6e623",
|
| 277 |
-
"metadata": {},
|
| 278 |
-
"outputs": [
|
| 279 |
-
{
|
| 280 |
-
"ename": "NameError",
|
| 281 |
-
"evalue": "name 'results_log' is not defined",
|
| 282 |
-
"output_type": "error",
|
| 283 |
-
"traceback": [
|
| 284 |
-
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
| 285 |
-
"\u001b[31mNameError\u001b[39m Traceback (most recent call last)",
|
| 286 |
-
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[22]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m \u001b[43mresults_log\u001b[49m\n",
|
| 287 |
-
"\u001b[31mNameError\u001b[39m: name 'results_log' is not defined"
|
| 288 |
-
]
|
| 289 |
-
}
|
| 290 |
-
],
|
| 291 |
-
"source": [
|
| 292 |
-
"results_log"
|
| 293 |
-
]
|
| 294 |
-
},
|
| 295 |
-
{
|
| 296 |
-
"cell_type": "code",
|
| 297 |
-
"execution_count": 13,
|
| 298 |
-
"id": "ee202a8a",
|
| 299 |
-
"metadata": {},
|
| 300 |
-
"outputs": [
|
| 301 |
-
{
|
| 302 |
-
"name": "stderr",
|
| 303 |
-
"output_type": "stream",
|
| 304 |
-
"text": [
|
| 305 |
-
"c:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\oauth.py:162: UserWarning: Gradio does not support OAuth features outside of a Space environment. To help you debug your app locally, the login and logout buttons are mocked with your profile. To make it work, your machine must be logged in to Huggingface.\n",
|
| 306 |
-
" warnings.warn(\n"
|
| 307 |
-
]
|
| 308 |
-
},
|
| 309 |
-
{
|
| 310 |
-
"ename": "ValueError",
|
| 311 |
-
"evalue": "Your machine must be logged in to HF to debug a Gradio app locally. Please run `huggingface-cli login` or set `HF_TOKEN` as environment variable with one of your access token. You can generate a new token in your settings page (https://huggingface.co/settings/tokens).",
|
| 312 |
-
"output_type": "error",
|
| 313 |
-
"traceback": [
|
| 314 |
-
"\u001b[1;31m---------------------------------------------------------------------------\u001b[0m",
|
| 315 |
-
"\u001b[1;31mValueError\u001b[0m Traceback (most recent call last)",
|
| 316 |
-
"Cell \u001b[1;32mIn[13], line 1\u001b[0m\n\u001b[1;32m----> 1\u001b[0m \u001b[38;5;28;01mimport\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21;01mapp\u001b[39;00m\n",
|
| 317 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\app.py:203\u001b[0m\n\u001b[0;32m 199\u001b[0m \u001b[38;5;28;01mreturn\u001b[39;00m status_message, results_df\n\u001b[0;32m 202\u001b[0m \u001b[38;5;66;03m# --- Build Gradio Interface using Blocks ---\u001b[39;00m\n\u001b[1;32m--> 203\u001b[0m \u001b[38;5;28;01mwith\u001b[39;00m gr\u001b[38;5;241m.\u001b[39mBlocks() \u001b[38;5;28;01mas\u001b[39;00m demo:\n\u001b[0;32m 204\u001b[0m gr\u001b[38;5;241m.\u001b[39mMarkdown(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m# Basic Agent Evaluation Runner\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 205\u001b[0m gr\u001b[38;5;241m.\u001b[39mMarkdown(\n\u001b[0;32m 206\u001b[0m \u001b[38;5;250m \u001b[39m\u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 207\u001b[0m \u001b[38;5;124;03m **Instructions:**\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 215\u001b[0m \u001b[38;5;124;03m \"\"\"\u001b[39;00m\n\u001b[0;32m 216\u001b[0m )\n",
|
| 318 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\blocks.py:2318\u001b[0m, in \u001b[0;36mBlocks.__exit__\u001b[1;34m(self, exc_type, *args)\u001b[0m\n\u001b[0;32m 2316\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mparent\u001b[38;5;241m.\u001b[39mchildren\u001b[38;5;241m.\u001b[39mextend(\u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mchildren)\n\u001b[0;32m 2317\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mconfig \u001b[38;5;241m=\u001b[39m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mget_config_file()\n\u001b[1;32m-> 2318\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mapp \u001b[38;5;241m=\u001b[39m \u001b[43mApp\u001b[49m\u001b[38;5;241;43m.\u001b[39;49m\u001b[43mcreate_app\u001b[49m\u001b[43m(\u001b[49m\u001b[38;5;28;43mself\u001b[39;49m\u001b[43m,\u001b[49m\u001b[43m \u001b[49m\u001b[43mmcp_server\u001b[49m\u001b[38;5;241;43m=\u001b[39;49m\u001b[38;5;28;43;01mFalse\u001b[39;49;00m\u001b[43m)\u001b[49m\n\u001b[0;32m 2319\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mprogress_tracking \u001b[38;5;241m=\u001b[39m \u001b[38;5;28many\u001b[39m(\n\u001b[0;32m 2320\u001b[0m block_fn\u001b[38;5;241m.\u001b[39mtracks_progress \u001b[38;5;28;01mfor\u001b[39;00m block_fn \u001b[38;5;129;01min\u001b[39;00m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mfns\u001b[38;5;241m.\u001b[39mvalues()\n\u001b[0;32m 2321\u001b[0m )\n\u001b[0;32m 2322\u001b[0m \u001b[38;5;28mself\u001b[39m\u001b[38;5;241m.\u001b[39mpage \u001b[38;5;241m=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
|
| 319 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\routes.py:568\u001b[0m, in \u001b[0;36mApp.create_app\u001b[1;34m(blocks, app_kwargs, auth_dependency, strict_cors, ssr_mode, mcp_server)\u001b[0m\n\u001b[0;32m 560\u001b[0m \u001b[38;5;66;03m###############\u001b[39;00m\n\u001b[0;32m 561\u001b[0m \u001b[38;5;66;03m# OAuth Routes\u001b[39;00m\n\u001b[0;32m 562\u001b[0m \u001b[38;5;66;03m###############\u001b[39;00m\n\u001b[1;32m (...)\u001b[0m\n\u001b[0;32m 565\u001b[0m \u001b[38;5;66;03m# It allows users to \"Sign in with HuggingFace\". Otherwise, add the default\u001b[39;00m\n\u001b[0;32m 566\u001b[0m \u001b[38;5;66;03m# logout route.\u001b[39;00m\n\u001b[0;32m 567\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m app\u001b[38;5;241m.\u001b[39mblocks \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;129;01mnot\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m \u001b[38;5;129;01mand\u001b[39;00m app\u001b[38;5;241m.\u001b[39mblocks\u001b[38;5;241m.\u001b[39mexpects_oauth:\n\u001b[1;32m--> 568\u001b[0m \u001b[43mattach_oauth\u001b[49m\u001b[43m(\u001b[49m\u001b[43mapp\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 569\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[0;32m 571\u001b[0m \u001b[38;5;129m@app\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/logout\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 572\u001b[0m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21mlogout\u001b[39m(request: fastapi\u001b[38;5;241m.\u001b[39mRequest, user: \u001b[38;5;28mstr\u001b[39m \u001b[38;5;241m=\u001b[39m Depends(get_current_user)):\n",
|
| 320 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\oauth.py:41\u001b[0m, in \u001b[0;36mattach_oauth\u001b[1;34m(app)\u001b[0m\n\u001b[0;32m 39\u001b[0m _add_oauth_routes(app)\n\u001b[0;32m 40\u001b[0m \u001b[38;5;28;01melse\u001b[39;00m:\n\u001b[1;32m---> 41\u001b[0m \u001b[43m_add_mocked_oauth_routes\u001b[49m\u001b[43m(\u001b[49m\u001b[43mapp\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 43\u001b[0m \u001b[38;5;66;03m# Session Middleware requires a secret key to sign the cookies. Let's use a hash\u001b[39;00m\n\u001b[0;32m 44\u001b[0m \u001b[38;5;66;03m# of the OAuth secret key to make it unique to the Space + updated in case OAuth\u001b[39;00m\n\u001b[0;32m 45\u001b[0m \u001b[38;5;66;03m# config gets updated.\u001b[39;00m\n\u001b[0;32m 46\u001b[0m session_secret \u001b[38;5;241m=\u001b[39m (OAUTH_CLIENT_SECRET \u001b[38;5;129;01mor\u001b[39;00m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m\"\u001b[39m) \u001b[38;5;241m+\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m-v4\u001b[39m\u001b[38;5;124m\"\u001b[39m\n",
|
| 321 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\oauth.py:167\u001b[0m, in \u001b[0;36m_add_mocked_oauth_routes\u001b[1;34m(app)\u001b[0m\n\u001b[0;32m 157\u001b[0m \u001b[38;5;250m\u001b[39m\u001b[38;5;124;03m\"\"\"Add fake oauth routes if Gradio is run locally and OAuth is enabled.\u001b[39;00m\n\u001b[0;32m 158\u001b[0m \n\u001b[0;32m 159\u001b[0m \u001b[38;5;124;03mClicking on a gr.LoginButton will have the same behavior as in a Space (i.e. gets redirected in a new tab) but\u001b[39;00m\n\u001b[0;32m 160\u001b[0m \u001b[38;5;124;03minstead of authenticating with HF, a mocked user profile is added to the session.\u001b[39;00m\n\u001b[0;32m 161\u001b[0m \u001b[38;5;124;03m\"\"\"\u001b[39;00m\n\u001b[0;32m 162\u001b[0m warnings\u001b[38;5;241m.\u001b[39mwarn(\n\u001b[0;32m 163\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mGradio does not support OAuth features outside of a Space environment. To help\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 164\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m you debug your app locally, the login and logout buttons are mocked with your\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 165\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m profile. To make it work, your machine must be logged in to Huggingface.\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 166\u001b[0m )\n\u001b[1;32m--> 167\u001b[0m mocked_oauth_info \u001b[38;5;241m=\u001b[39m \u001b[43m_get_mocked_oauth_info\u001b[49m\u001b[43m(\u001b[49m\u001b[43m)\u001b[49m\n\u001b[0;32m 169\u001b[0m \u001b[38;5;66;03m# Define OAuth routes\u001b[39;00m\n\u001b[0;32m 170\u001b[0m \u001b[38;5;129m@app\u001b[39m\u001b[38;5;241m.\u001b[39mget(\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m/login/huggingface\u001b[39m\u001b[38;5;124m\"\u001b[39m)\n\u001b[0;32m 171\u001b[0m \u001b[38;5;28;01masync\u001b[39;00m \u001b[38;5;28;01mdef\u001b[39;00m\u001b[38;5;250m \u001b[39m\u001b[38;5;21moauth_login\u001b[39m(request: fastapi\u001b[38;5;241m.\u001b[39mRequest): \u001b[38;5;66;03m# noqa: ARG001\u001b[39;00m\n",
|
| 322 |
-
"File \u001b[1;32mc:\\Users\\andrea.giorni\\Desktop\\code\\Hugging face Agent course\\Final_Assignment_Template\\.venv310\\lib\\site-packages\\gradio\\oauth.py:310\u001b[0m, in \u001b[0;36m_get_mocked_oauth_info\u001b[1;34m()\u001b[0m\n\u001b[0;32m 308\u001b[0m token \u001b[38;5;241m=\u001b[39m get_token()\n\u001b[0;32m 309\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m token \u001b[38;5;129;01mis\u001b[39;00m \u001b[38;5;28;01mNone\u001b[39;00m:\n\u001b[1;32m--> 310\u001b[0m \u001b[38;5;28;01mraise\u001b[39;00m \u001b[38;5;167;01mValueError\u001b[39;00m(\n\u001b[0;32m 311\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mYour machine must be logged in to HF to debug a Gradio app locally. Please\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 312\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124m run `huggingface-cli login` or set `HF_TOKEN` as environment variable \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 313\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mwith one of your access token. You can generate a new token in your \u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 314\u001b[0m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124msettings page (https://huggingface.co/settings/tokens).\u001b[39m\u001b[38;5;124m\"\u001b[39m\n\u001b[0;32m 315\u001b[0m )\n\u001b[0;32m 317\u001b[0m user \u001b[38;5;241m=\u001b[39m whoami()\n\u001b[0;32m 318\u001b[0m \u001b[38;5;28;01mif\u001b[39;00m user[\u001b[38;5;124m\"\u001b[39m\u001b[38;5;124mtype\u001b[39m\u001b[38;5;124m\"\u001b[39m] \u001b[38;5;241m!=\u001b[39m \u001b[38;5;124m\"\u001b[39m\u001b[38;5;124muser\u001b[39m\u001b[38;5;124m\"\u001b[39m:\n",
|
| 323 |
-
"\u001b[1;31mValueError\u001b[0m: Your machine must be logged in to HF to debug a Gradio app locally. Please run `huggingface-cli login` or set `HF_TOKEN` as environment variable with one of your access token. You can generate a new token in your settings page (https://huggingface.co/settings/tokens)."
|
| 324 |
-
]
|
| 325 |
-
}
|
| 326 |
-
],
|
| 327 |
-
"source": [
|
| 328 |
-
"import app"
|
| 329 |
-
]
|
| 330 |
-
},
|
| 331 |
-
{
|
| 332 |
-
"cell_type": "code",
|
| 333 |
-
"execution_count": null,
|
| 334 |
-
"id": "5def4105",
|
| 335 |
-
"metadata": {},
|
| 336 |
-
"outputs": [],
|
| 337 |
-
"source": []
|
| 338 |
-
}
|
| 339 |
-
],
|
| 340 |
-
"metadata": {
|
| 341 |
-
"kernelspec": {
|
| 342 |
-
"display_name": ".venv310 (3.10.0)",
|
| 343 |
-
"language": "python",
|
| 344 |
-
"name": "python3"
|
| 345 |
-
},
|
| 346 |
-
"language_info": {
|
| 347 |
-
"codemirror_mode": {
|
| 348 |
-
"name": "ipython",
|
| 349 |
-
"version": 3
|
| 350 |
-
},
|
| 351 |
-
"file_extension": ".py",
|
| 352 |
-
"mimetype": "text/x-python",
|
| 353 |
-
"name": "python",
|
| 354 |
-
"nbconvert_exporter": "python",
|
| 355 |
-
"pygments_lexer": "ipython3",
|
| 356 |
-
"version": "3.10.0"
|
| 357 |
-
}
|
| 358 |
-
},
|
| 359 |
-
"nbformat": 4,
|
| 360 |
-
"nbformat_minor": 5
|
| 361 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
tools_test.ipynb
DELETED
|
@@ -1,389 +0,0 @@
|
|
| 1 |
-
{
|
| 2 |
-
"cells": [
|
| 3 |
-
{
|
| 4 |
-
"cell_type": "code",
|
| 5 |
-
"execution_count": 1,
|
| 6 |
-
"id": "ccd01f7c",
|
| 7 |
-
"metadata": {},
|
| 8 |
-
"outputs": [],
|
| 9 |
-
"source": [
|
| 10 |
-
"%load_ext autoreload\n",
|
| 11 |
-
"\n",
|
| 12 |
-
"%autoreload 2"
|
| 13 |
-
]
|
| 14 |
-
},
|
| 15 |
-
{
|
| 16 |
-
"cell_type": "code",
|
| 17 |
-
"execution_count": 2,
|
| 18 |
-
"id": "c14296ff",
|
| 19 |
-
"metadata": {},
|
| 20 |
-
"outputs": [],
|
| 21 |
-
"source": [
|
| 22 |
-
"import textwrap\n",
|
| 23 |
-
"\n",
|
| 24 |
-
"def print_(message: str):\n",
|
| 25 |
-
"\n",
|
| 26 |
-
" print(textwrap.fill(message, 75))"
|
| 27 |
-
]
|
| 28 |
-
},
|
| 29 |
-
{
|
| 30 |
-
"cell_type": "code",
|
| 31 |
-
"execution_count": 3,
|
| 32 |
-
"id": "4ec297d7",
|
| 33 |
-
"metadata": {},
|
| 34 |
-
"outputs": [],
|
| 35 |
-
"source": [
|
| 36 |
-
"import tools\n"
|
| 37 |
-
]
|
| 38 |
-
},
|
| 39 |
-
{
|
| 40 |
-
"cell_type": "code",
|
| 41 |
-
"execution_count": 9,
|
| 42 |
-
"id": "7cf442f8",
|
| 43 |
-
"metadata": {},
|
| 44 |
-
"outputs": [
|
| 45 |
-
{
|
| 46 |
-
"data": {
|
| 47 |
-
"text/plain": [
|
| 48 |
-
"WikipediaQueryRun(api_wrapper=WikipediaAPIWrapper(wiki_client=<module 'wikipedia' from 'c:\\\\Users\\\\andrea.giorni\\\\Desktop\\\\code\\\\Hugging face Agent course\\\\Final_Assignment_Template\\\\.venv\\\\Lib\\\\site-packages\\\\wikipedia\\\\__init__.py'>, top_k_results=1, lang='en', load_all_available_meta=False, doc_content_chars_max=300))"
|
| 49 |
-
]
|
| 50 |
-
},
|
| 51 |
-
"execution_count": 9,
|
| 52 |
-
"metadata": {},
|
| 53 |
-
"output_type": "execute_result"
|
| 54 |
-
}
|
| 55 |
-
],
|
| 56 |
-
"source": [
|
| 57 |
-
"tools.wikipedia_tool"
|
| 58 |
-
]
|
| 59 |
-
},
|
| 60 |
-
{
|
| 61 |
-
"cell_type": "code",
|
| 62 |
-
"execution_count": 55,
|
| 63 |
-
"id": "3f538870",
|
| 64 |
-
"metadata": {},
|
| 65 |
-
"outputs": [],
|
| 66 |
-
"source": [
|
| 67 |
-
"# msg = '''How many studio album were published by mercedes sosa between 2000 and 2009 (included)?\n",
|
| 68 |
-
"# you can use the latest 2022 version of english wikipedia'''\n",
|
| 69 |
-
"\n",
|
| 70 |
-
"out = tools.wikipedia_tool.invoke(msg)"
|
| 71 |
-
]
|
| 72 |
-
},
|
| 73 |
-
{
|
| 74 |
-
"cell_type": "code",
|
| 75 |
-
"execution_count": 56,
|
| 76 |
-
"id": "ef465273",
|
| 77 |
-
"metadata": {},
|
| 78 |
-
"outputs": [
|
| 79 |
-
{
|
| 80 |
-
"name": "stdout",
|
| 81 |
-
"output_type": "stream",
|
| 82 |
-
"text": [
|
| 83 |
-
"Page: José José Summary: José Rómulo Sosa Ortiz (17 February 1948 – 28\n",
|
| 84 |
-
"September 2019), known professionally as José José, was a Mexican singer\n",
|
| 85 |
-
"and actor. Also known as \"El Príncipe de la Canción\" (The Prince of Song),\n",
|
| 86 |
-
"his performance and vocal style have influenced many Latin pop artists in a\n",
|
| 87 |
-
"career that spanned more than four decades. Due to his vocals and\n",
|
| 88 |
-
"popularity, José José was considered by Latin audiences and media as an\n",
|
| 89 |
-
"icon of Latin pop music and one of the most emblematic Latin singers of his\n",
|
| 90 |
-
"time. Born into a family of musicians, José began his musical career in his\n",
|
| 91 |
-
"early teens playing guitar and singing in serenade. He later joined a jazz\n",
|
| 92 |
-
"and bossa nova trio where he sang and played bass and double bass. José\n",
|
| 93 |
-
"José found success as a solo artist in the early 1970s. Demonstrating his\n",
|
| 94 |
-
"tenor vocal ability with a stunning performance of the song \"El Triste\" at\n",
|
| 95 |
-
"a Latin music festival held in Mexico City in 1970, he climbed the Latin\n",
|
| 96 |
-
"charts during that decade. Having achieved recognition as a balladeer, his\n",
|
| 97 |
-
"singing garnered universal critical acclaim from musical peers and media.\n",
|
| 98 |
-
"In the 1980s, after signing with Ariola Records, José rose to international\n",
|
| 99 |
-
"prominence as one of the most popular and talented Latin performers. His\n",
|
| 100 |
-
"1983 album Secretos has sold over four million units. With many\n",
|
| 101 |
-
"international hits, he received several Grammy nominations, sold more than\n",
|
| 102 |
-
"40 million albums and was once courted by music legend Frank Sinatra, who\n",
|
| 103 |
-
"wanted to win him for his own label. He sold out in venues such as Madison\n",
|
| 104 |
-
"Square Garden and Radio City Music Hall. His music reached non-Spanish-\n",
|
| 105 |
-
"speaking countries in Europe and Asia. He forged a career as an actor,\n",
|
| 106 |
-
"starring in movies such as Gavilán o Paloma (1985) and Perdóname Todo\n",
|
| 107 |
-
"(1995).\n"
|
| 108 |
-
]
|
| 109 |
-
}
|
| 110 |
-
],
|
| 111 |
-
"source": [
|
| 112 |
-
"print_(out)"
|
| 113 |
-
]
|
| 114 |
-
},
|
| 115 |
-
{
|
| 116 |
-
"cell_type": "code",
|
| 117 |
-
"execution_count": 54,
|
| 118 |
-
"id": "a21740d8",
|
| 119 |
-
"metadata": {},
|
| 120 |
-
"outputs": [],
|
| 121 |
-
"source": [
|
| 122 |
-
"msg = 'studio album by Mercedes Sosa between 2000 and 2009'"
|
| 123 |
-
]
|
| 124 |
-
},
|
| 125 |
-
{
|
| 126 |
-
"cell_type": "code",
|
| 127 |
-
"execution_count": 51,
|
| 128 |
-
"id": "5ef4d0cd",
|
| 129 |
-
"metadata": {},
|
| 130 |
-
"outputs": [],
|
| 131 |
-
"source": [
|
| 132 |
-
"msg = \"barrak obama\""
|
| 133 |
-
]
|
| 134 |
-
},
|
| 135 |
-
{
|
| 136 |
-
"cell_type": "code",
|
| 137 |
-
"execution_count": 52,
|
| 138 |
-
"id": "a9768b29",
|
| 139 |
-
"metadata": {},
|
| 140 |
-
"outputs": [],
|
| 141 |
-
"source": [
|
| 142 |
-
"res = tools.wiki_RAG(msg)"
|
| 143 |
-
]
|
| 144 |
-
},
|
| 145 |
-
{
|
| 146 |
-
"cell_type": "code",
|
| 147 |
-
"execution_count": 53,
|
| 148 |
-
"id": "d140be5f",
|
| 149 |
-
"metadata": {},
|
| 150 |
-
"outputs": [
|
| 151 |
-
{
|
| 152 |
-
"data": {
|
| 153 |
-
"text/plain": [
|
| 154 |
-
"[Document(id='5616d47e-c781-4235-9399-1902a19e0027', metadata={'source': 'https://en.wikipedia.org/wiki/Barrak', 'summary': 'Barrak (Arabic: برّاك) or Al-Barrak (Arabic: البرّاك) is a surname. Notable people with the surname include:\\n\\nAbdul-Rahman al-Barrak (born c. 1933), senior Saudi cleric\\nAbdulrahman bin Abdullah Al Barrak (born 1956), Saudi academic\\nMusallam Al-Barrak, member of the Kuwaiti National Assembly\\nNagib Barrak (born 1940), Lebanese alpine skier\\nRony Barrak, Lebanese musician and darbouka player and composer\\nSaad Al Barrak, Kuwaiti businessman and investor', 'title': 'Barrak'}, page_content='Barrak (Arabic: برّاك) or Al-Barrak (Arabic: البرّاك) is a surname. Notable people with the surname include:\\n\\nAbdul-Rahman al-Barrak (born c. 1933), senior Saudi cleric\\nAbdulrahman bin Abdullah Al Barrak (born 1956), Saudi academic\\nMusallam Al-Barrak, member of the Kuwaiti National Assembly\\nNagib Barrak (born 1940), Lebanese alpine skier\\nRony Barrak, Lebanese musician and darbouka player and composer\\nSaad Al Barrak, Kuwaiti businessman and investor\\n\\n\\n== See also ==\\nAll pages with titles containing Barrak\\nBarack (disambiguation)\\nBarack Obama, U.S. president\\nBarak (disambiguation)\\nBaraq (disambiguation)\\nBarrack (disambiguation)\\nBarracks\\nB-R-K'),\n",
|
| 155 |
-
" Document(id='6b35b789-0c32-4f6d-b487-396aa2e028ab', metadata={'source': 'https://en.wikipedia.org/wiki/Barack_Obama', 'title': 'Barack Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\"}, page_content='Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.'),\n",
|
| 156 |
-
" Document(id='f8375b7f-1867-4ac5-8dcc-4f95cd389acd', metadata={'source': 'https://en.wikipedia.org/wiki/Barack_Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\", 'title': 'Barack Obama'}, page_content=\"Obama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging\"),\n",
|
| 157 |
-
" Document(id='f2bbc8b9-723c-4450-89cd-e69e8d24d053', metadata={'source': 'https://en.wikipedia.org/wiki/Barack_Obama', 'title': 'Barack Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\"}, page_content='though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.'),\n",
|
| 158 |
-
" Document(id='a5f095d9-c6b2-49ef-ab79-8fdc9172ad2a', metadata={'title': 'Barack Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\", 'source': 'https://en.wikipedia.org/wiki/Barack_Obama'}, page_content=\"Obama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Fat\"),\n",
|
| 159 |
-
" Document(id='466cc0f7-f6eb-49b2-af9a-c09874bd4d4a', metadata={'title': 'Barack Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\", 'source': 'https://en.wikipedia.org/wiki/Barack_Obama'}, page_content='Born in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.'),\n",
|
| 160 |
-
" Document(id='225bb748-c745-4784-a906-16fd37845ec9', metadata={'title': 'Barack Obama', 'source': 'https://en.wikipedia.org/wiki/Barack_Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\"}, page_content=\"Obama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country\"),\n",
|
| 161 |
-
" Document(id='5564d870-41f8-41d4-9594-9c1d39a568c6', metadata={'source': 'https://en.wikipedia.org/wiki/Barack_Obama', 'title': 'Barack Obama', 'summary': \"Barack Hussein Obama II (born August 4, 1961) is an American politician who was the 44th president of the United States from 2009 to 2017. A member of the Democratic Party, he was the first African American president. Obama previously served as a U.S. senator representing Illinois from 2005 to 2008 and as an Illinois state senator from 1997 to 2004.\\nBorn in Honolulu, Hawaii, Obama graduated from Columbia University in 1983 with a Bachelor of Arts degree in political science and later worked as a community organizer in Chicago. In 1988, Obama enrolled in Harvard Law School, where he was the first black president of the Harvard Law Review. He became a civil rights attorney and an academic, teaching constitutional law at the University of Chicago Law School from 1992 to 2004. In 1996, Obama was elected to represent the 13th district in the Illinois Senate, a position he held until 2004, when he successfully ran for the U.S. Senate. In the 2008 presidential election, after a close primary campaign against Hillary Clinton, he was nominated by the Democratic Party for president. Obama selected Joe Biden as his running mate and defeated Republican nominee John McCain and his running mate Sarah Palin.\\nObama was awarded the 2009 Nobel Peace Prize for efforts in international diplomacy, a decision which drew both criticism and praise. During his first term, his administration responded to the 2008 financial crisis with measures including the American Recovery and Reinvestment Act of 2009, a major stimulus package to guide the economy in recovering from the Great Recession; a partial extension of the Bush tax cuts; legislation to reform health care; and the Dodd–Frank Wall Street Reform and Consumer Protection Act, a major financial regulation reform bill. Obama also appointed Supreme Court justices Sonia Sotomayor and Elena Kagan, the former being the first Hispanic American on the Supreme Court. He oversaw the end of the Iraq War and ordered Operation Neptune Spear, the raid that killed Osama bin Laden, who was responsible for the September 11 attacks. Obama downplayed Bush's counterinsurgency model, expanding air strikes and making extensive use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.\\nObama defeated Republican opponent Mitt Romney and his running mate Paul Ryan in the 2012 presidential election. In his second term, Obama advocated for gun control in the wake of the Sandy Hook Elementary School shooting, took steps to combat climate change, signing the Paris Agreement, a major international climate agreement, and an executive order to limit carbon emissions. Obama also presided over the implementation of the Affordable Care Act and other legislation passed in his first term. He initiated sanctions against Russia following the invasion in Ukraine and again after Russian interference in the 2016 U.S. elections, ordered military intervention in Iraq in response to gains made by ISIL following the 2011 withdrawal from Iraq, negotiated the Joint Comprehensive Plan of Action (a nuclear agreement with Iran), and normalized relations with Cuba. The number of American soldiers in Afghanistan decreased during Obama's second term, though U.S. soldiers remained in the country throughout the remainder of his presidency. Obama promoted inclusion for LGBT Americans, becoming the first sitting U.S. president to publicly support same-sex marriage.\\nObama left office in 2017 with high approval ratings both within the United States and among foreign advisories. He continues to reside in Washington, D.C., and remains politically active, campaigning for candidates in various American elections, including in Biden's successful presidential bid in the 2020 presidential election. Outside of politics, Obama has published three books: Dreams from My Father (1995), The Audacity of Hope (2006), and A Promised Land (2020). His presidential library began construction in the South Side of Chicago in 2021. Historians and political scientists rank Obama among the upper tier in historical rankings of U.S. presidents.\"}, page_content='use of special forces, while encouraging greater reliance on host-government militaries. He also ordered the 2011 military intervention in Libya to implement United Nations Security Council Resolution 1973, contributing to the overthrow of Muammar Gaddafi.')]"
|
| 162 |
-
]
|
| 163 |
-
},
|
| 164 |
-
"execution_count": 53,
|
| 165 |
-
"metadata": {},
|
| 166 |
-
"output_type": "execute_result"
|
| 167 |
-
}
|
| 168 |
-
],
|
| 169 |
-
"source": [
|
| 170 |
-
"res"
|
| 171 |
-
]
|
| 172 |
-
},
|
| 173 |
-
{
|
| 174 |
-
"cell_type": "code",
|
| 175 |
-
"execution_count": 33,
|
| 176 |
-
"id": "7f334a2f",
|
| 177 |
-
"metadata": {},
|
| 178 |
-
"outputs": [
|
| 179 |
-
{
|
| 180 |
-
"name": "stdout",
|
| 181 |
-
"output_type": "stream",
|
| 182 |
-
"text": [
|
| 183 |
-
"Germany). The list below gives the chancellors of West Germany; the government of East Germany was\n",
|
| 184 |
-
"and the German Democratic Republic (known as East Germany). The list below gives the chancellors of\n",
|
| 185 |
-
"== Federal Republic of Germany (1949–present) ==\n",
|
| 186 |
-
"In 1949, two separate German states were established: the Federal Republic of Germany (known as West Germany) and the German Democratic Republic (known as East Germany). The list below gives the chancellors of West Germany; the government of East Germany was headed by the chairman of the Council of Ministers. In 1990, East Germany was dissolved as it merged with West Germany; Germany was reunified. It retained the name of the Federal Republic of Germany.\n",
|
| 187 |
-
"Political parties:\n",
|
| 188 |
-
" CDU (6)\n",
|
| 189 |
-
" SPD (4)\n",
|
| 190 |
-
"\n",
|
| 191 |
-
"\n",
|
| 192 |
-
"== Timeline ==\n",
|
| 193 |
-
"\n",
|
| 194 |
-
"\n",
|
| 195 |
-
"== See also ==\n",
|
| 196 |
-
"\n",
|
| 197 |
-
"Leadership of East Germany\n",
|
| 198 |
-
"List of chancellors of Germany by time in offi\n",
|
| 199 |
-
"The chancellor of Germany, officially the federal chancellor of the Federal Republic of Germany, is the head of the federal government of Germany. The chancellor is the chief executive of the Federal Cabinet and heads the executive branch. The chancellor is elected by the Bundestag on the proposal of the federal president and without debate (Article 63 of the German Constitution). During a state of defence declared by the Bundestag the chancellor also assumes the position of commander-in-chief of the Bundeswehr.\n",
|
| 200 |
-
"Ten people (nine men and one woman) have served as chancellor of the Federal Republic of Germany, the first being Konrad Adenauer from 1949 to 1963. (Another 26 men had served as \"Reich chancellors\" of the previous German Empire from 1871 to 1945.) The current officeholder is Friedrich Merz of the Christian Democratic Union, sworn in on 6 May 2025.\n",
|
| 201 |
-
"\n",
|
| 202 |
-
"\n",
|
| 203 |
-
"== History of the office (pre-1949) ==\n",
|
| 204 |
-
"Ten people (nine men and one woman) have served as chancellor of the Federal Republic of Germany,\n",
|
| 205 |
-
"to 1963. (Another 26 men had served as \"Reich chancellors\" of the previous German Empire from 1871\n",
|
| 206 |
-
"as chancellor of the Federal Republic of Germany, the first being Konrad Adenauer from 1949 to\n",
|
| 207 |
-
"== See also ==\n",
|
| 208 |
-
"\n",
|
| 209 |
-
"Leadership of East Germany\n",
|
| 210 |
-
"List of chancellors of Germany by time in offi\n"
|
| 211 |
-
]
|
| 212 |
-
}
|
| 213 |
-
],
|
| 214 |
-
"source": [
|
| 215 |
-
"print(res2)"
|
| 216 |
-
]
|
| 217 |
-
},
|
| 218 |
-
{
|
| 219 |
-
"cell_type": "code",
|
| 220 |
-
"execution_count": 34,
|
| 221 |
-
"id": "a6933d2d",
|
| 222 |
-
"metadata": {},
|
| 223 |
-
"outputs": [
|
| 224 |
-
{
|
| 225 |
-
"ename": "AttributeError",
|
| 226 |
-
"evalue": "'str' object has no attribute 'page_content'",
|
| 227 |
-
"output_type": "error",
|
| 228 |
-
"traceback": [
|
| 229 |
-
"\u001b[31m---------------------------------------------------------------------------\u001b[39m",
|
| 230 |
-
"\u001b[31mAttributeError\u001b[39m Traceback (most recent call last)",
|
| 231 |
-
"\u001b[36mCell\u001b[39m\u001b[36m \u001b[39m\u001b[32mIn[34]\u001b[39m\u001b[32m, line 1\u001b[39m\n\u001b[32m----> \u001b[39m\u001b[32m1\u001b[39m print_(\u001b[43mres2\u001b[49m\u001b[43m[\u001b[49m\u001b[32;43m2\u001b[39;49m\u001b[43m]\u001b[49m\u001b[43m.\u001b[49m\u001b[43mpage_content\u001b[49m)\n",
|
| 232 |
-
"\u001b[31mAttributeError\u001b[39m: 'str' object has no attribute 'page_content'"
|
| 233 |
-
]
|
| 234 |
-
}
|
| 235 |
-
],
|
| 236 |
-
"source": [
|
| 237 |
-
"print_(res2[2].page_content)"
|
| 238 |
-
]
|
| 239 |
-
},
|
| 240 |
-
{
|
| 241 |
-
"cell_type": "code",
|
| 242 |
-
"execution_count": 6,
|
| 243 |
-
"id": "08e04f44",
|
| 244 |
-
"metadata": {},
|
| 245 |
-
"outputs": [],
|
| 246 |
-
"source": [
|
| 247 |
-
"path_img = 'cca530fc-4052-43b2-b130-b30968d8aa44.png'\n",
|
| 248 |
-
"res = tools.image_analyser(path_img)"
|
| 249 |
-
]
|
| 250 |
-
},
|
| 251 |
-
{
|
| 252 |
-
"cell_type": "code",
|
| 253 |
-
"execution_count": 7,
|
| 254 |
-
"id": "284e6c50",
|
| 255 |
-
"metadata": {},
|
| 256 |
-
"outputs": [
|
| 257 |
-
{
|
| 258 |
-
"data": {
|
| 259 |
-
"text/plain": [
|
| 260 |
-
"\"This image depicts a chess position on a standard 8x8 chessboard. The pieces are arranged as follows:\\n\\n### **White Pieces:**\\n- **King**: g1\\n- **Queen**: h5\\n- **Rooks**: e3\\n- **Bishops**: d3, c3\\n- **Pawns**: f2, g2, h3, a3\\n\\n### **Black Pieces:**\\n- **King**: g8\\n- **Queen**: b3\\n- **Rook**: d8\\n- **Bishop**: e6\\n- **Knight**: d5\\n- **Pawns**: f7, g7, h7, a7, b7, c7\\n\\nThe position appears to be mid-game, with both sides having developed their pieces. Black's queen is aggressively placed on b3, and White's queen is on h5, threatening the kingside.\""
|
| 261 |
-
]
|
| 262 |
-
},
|
| 263 |
-
"execution_count": 7,
|
| 264 |
-
"metadata": {},
|
| 265 |
-
"output_type": "execute_result"
|
| 266 |
-
}
|
| 267 |
-
],
|
| 268 |
-
"source": [
|
| 269 |
-
"res"
|
| 270 |
-
]
|
| 271 |
-
},
|
| 272 |
-
{
|
| 273 |
-
"cell_type": "code",
|
| 274 |
-
"execution_count": null,
|
| 275 |
-
"id": "14ae331c",
|
| 276 |
-
"metadata": {},
|
| 277 |
-
"outputs": [],
|
| 278 |
-
"source": [
|
| 279 |
-
"results = tools.python_executor_tool(file_content)"
|
| 280 |
-
]
|
| 281 |
-
},
|
| 282 |
-
{
|
| 283 |
-
"cell_type": "code",
|
| 284 |
-
"execution_count": 15,
|
| 285 |
-
"id": "60bc36b8",
|
| 286 |
-
"metadata": {},
|
| 287 |
-
"outputs": [
|
| 288 |
-
{
|
| 289 |
-
"data": {
|
| 290 |
-
"text/plain": [
|
| 291 |
-
"str"
|
| 292 |
-
]
|
| 293 |
-
},
|
| 294 |
-
"execution_count": 15,
|
| 295 |
-
"metadata": {},
|
| 296 |
-
"output_type": "execute_result"
|
| 297 |
-
}
|
| 298 |
-
],
|
| 299 |
-
"source": [
|
| 300 |
-
"type(file_content)"
|
| 301 |
-
]
|
| 302 |
-
},
|
| 303 |
-
{
|
| 304 |
-
"cell_type": "code",
|
| 305 |
-
"execution_count": 6,
|
| 306 |
-
"id": "362e9afd",
|
| 307 |
-
"metadata": {},
|
| 308 |
-
"outputs": [
|
| 309 |
-
{
|
| 310 |
-
"name": "stdout",
|
| 311 |
-
"output_type": "stream",
|
| 312 |
-
"text": [
|
| 313 |
-
"from random import randint\n",
|
| 314 |
-
"import time\n",
|
| 315 |
-
"\n",
|
| 316 |
-
"class UhOh(Exception):\n",
|
| 317 |
-
" pass\n",
|
| 318 |
-
"\n",
|
| 319 |
-
"class Hmm:\n",
|
| 320 |
-
" def __init__(self):\n",
|
| 321 |
-
" self.value = randint(-100, 100)\n",
|
| 322 |
-
"\n",
|
| 323 |
-
" def Yeah(self):\n",
|
| 324 |
-
" if self.value == 0:\n",
|
| 325 |
-
" return True\n",
|
| 326 |
-
" else:\n",
|
| 327 |
-
" raise UhOh()\n",
|
| 328 |
-
"\n",
|
| 329 |
-
"def Okay():\n",
|
| 330 |
-
" while True:\n",
|
| 331 |
-
" yield Hmm()\n",
|
| 332 |
-
"\n",
|
| 333 |
-
"def keep_trying(go, first_try=True):\n",
|
| 334 |
-
" maybe = next(go)\n",
|
| 335 |
-
" try:\n",
|
| 336 |
-
" if maybe.Yeah():\n",
|
| 337 |
-
" return maybe.value\n",
|
| 338 |
-
" except UhOh:\n",
|
| 339 |
-
" if first_try:\n",
|
| 340 |
-
" print(\"Working...\")\n",
|
| 341 |
-
" print(\"Please wait patiently...\")\n",
|
| 342 |
-
" time.sleep(0.1)\n",
|
| 343 |
-
" return keep_trying(go, first_try=False)\n",
|
| 344 |
-
"\n",
|
| 345 |
-
"if __name__ == \"__main__\":\n",
|
| 346 |
-
" go = Okay()\n",
|
| 347 |
-
" print(f\"{keep_trying(go)}\")\n",
|
| 348 |
-
"\n"
|
| 349 |
-
]
|
| 350 |
-
}
|
| 351 |
-
],
|
| 352 |
-
"source": [
|
| 353 |
-
"from pathlib import Path\n",
|
| 354 |
-
"\n",
|
| 355 |
-
"file_content = Path('f918266a-b3e0-4914-865d-4faa564f1aef.py').read_text()\n",
|
| 356 |
-
"print(file_content)"
|
| 357 |
-
]
|
| 358 |
-
},
|
| 359 |
-
{
|
| 360 |
-
"cell_type": "code",
|
| 361 |
-
"execution_count": null,
|
| 362 |
-
"id": "ce68ec3d",
|
| 363 |
-
"metadata": {},
|
| 364 |
-
"outputs": [],
|
| 365 |
-
"source": []
|
| 366 |
-
}
|
| 367 |
-
],
|
| 368 |
-
"metadata": {
|
| 369 |
-
"kernelspec": {
|
| 370 |
-
"display_name": ".venv310 (3.10.0)",
|
| 371 |
-
"language": "python",
|
| 372 |
-
"name": "python3"
|
| 373 |
-
},
|
| 374 |
-
"language_info": {
|
| 375 |
-
"codemirror_mode": {
|
| 376 |
-
"name": "ipython",
|
| 377 |
-
"version": 3
|
| 378 |
-
},
|
| 379 |
-
"file_extension": ".py",
|
| 380 |
-
"mimetype": "text/x-python",
|
| 381 |
-
"name": "python",
|
| 382 |
-
"nbconvert_exporter": "python",
|
| 383 |
-
"pygments_lexer": "ipython3",
|
| 384 |
-
"version": "3.10.0"
|
| 385 |
-
}
|
| 386 |
-
},
|
| 387 |
-
"nbformat": 4,
|
| 388 |
-
"nbformat_minor": 5
|
| 389 |
-
}
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|
|