Spaces:
Sleeping
Sleeping
from smolagents.tools import Tool | |
import requests | |
class PrimeiraLigaTeamStatsTool(Tool): | |
name = "get_primeira_liga_team_stats" | |
description = "Retrieve standing and last 3 match scores for a given Primeira Liga team." | |
inputs = {'team_name': {'type': 'string', 'description': 'Name of the team to search for'}} | |
output_type = "string" | |
def forward(self, team_name: str) -> str: | |
def _determine_match_outcome(home_team: str, away_team: str, | |
home_score: int, away_score: int, | |
target_team: str) -> str: | |
""" | |
Determine match outcome (W/D/L) from the perspective of the target team. | |
""" | |
if home_team == target_team: | |
if home_score > away_score: | |
return 'W' | |
elif home_score < away_score: | |
return 'L' | |
else: | |
return 'D' | |
else: | |
if away_score > home_score: | |
return 'W' | |
elif away_score < home_score: | |
return 'L' | |
else: | |
return 'D' | |
# API Base URL | |
BASE_URL = "https://www.thesportsdb.com/api/v1/json/3" | |
# Hardcoded Primeira Liga League ID | |
PRIMEIRA_LIGA_ID = 4344 | |
try: | |
# Step 1: Search for the team to get its ID | |
team_search_url = f"{BASE_URL}/searchteams.php?t={team_name.replace(' ', '%20')}" | |
team_search_response = requests.get(team_search_url) | |
team_search_data = team_search_response.json() | |
if not team_search_data.get('teams'): | |
return "Error: Team not found" | |
# Get the first matching team's ID | |
team_id = team_search_data['teams'][0]['idTeam'] | |
# Step 2: Get league table | |
table_url = f"{BASE_URL}/lookuptable.php?l={PRIMEIRA_LIGA_ID}" | |
table_response = requests.get(table_url) | |
table_data = table_response.json() | |
# Find team's standing | |
standing = next( | |
(int(entry['intRank']) for entry in table_data.get('table', []) | |
if entry['idTeam'] == team_id), | |
None | |
) | |
# Step 3: Get last 5 events for the team | |
last_events_url = f"{BASE_URL}/eventslast.php?id={team_id}" | |
last_events_response = requests.get(last_events_url) | |
last_events_data = last_events_response.json() | |
# Process last 3 matches | |
last_3_matches = [] | |
for event in last_events_data.get('results', [])[:3]: | |
match = { | |
'opponent': event['strAwayTeam'] if event['strHomeTeam'] == team_name else event['strHomeTeam'], | |
'result': f"{event['intHomeScore']} - {event['intAwayScore']}", | |
'outcome': _determine_match_outcome( | |
event['strHomeTeam'], event['strAwayTeam'], | |
event['intHomeScore'], event['intAwayScore'], | |
team_name | |
) | |
} | |
last_3_matches.append(match) | |
return str({ | |
"team": team_name, | |
"standing": standing, | |
"last_3_matches": last_3_matches | |
}) | |
except Exception as e: | |
print(f"Error retrieving team stats: {e}") | |
return str("Error retrieving team stats") | |
def __init__(self, *args, **kwargs): | |
self.is_initialized = False | |