75 lines
2.4 KiB
Python
75 lines
2.4 KiB
Python
from arcade.sdk import ToolCatalog
|
|
from arcade.sdk.eval import (
|
|
BinaryCritic,
|
|
EvalRubric,
|
|
EvalSuite,
|
|
ExpectedToolCall,
|
|
tool_eval,
|
|
)
|
|
|
|
from arcade_spotify.tools.tracks import get_track_from_id
|
|
|
|
# Evaluation rubric
|
|
rubric = EvalRubric(
|
|
fail_threshold=0.9,
|
|
warn_threshold=0.95,
|
|
)
|
|
|
|
catalog = ToolCatalog()
|
|
catalog.add_tool(get_track_from_id, "Spotify")
|
|
|
|
# This history is a conversation where the user asks for the currently playing song, and then asks for information about it.
|
|
history = [
|
|
{"role": "user", "content": "what song is playing rn"},
|
|
{
|
|
"role": "assistant",
|
|
"content": "",
|
|
"tool_calls": [
|
|
{
|
|
"id": "call_fqZHT1DNcil1pbIv6UbOWVq9",
|
|
"type": "function",
|
|
"function": {"name": "Spotify_GetCurrentlyPlaying", "arguments": "{}"},
|
|
}
|
|
],
|
|
},
|
|
{
|
|
"role": "tool",
|
|
"content": '{"album_artists":["Gajaka"],"album_id":"7b5h7MJ70KC92FrwSvRaQi","album_name":"Aerial","album_spotify_url":"https://open.spotify.com/album/7b5h7MJ70KC92FrwSvRaQi","currently_playing_type":"track","is_playing":true,"progress_ms":96962,"track_artists":["Gajaka"],"track_id":"03gaqN3aWm9TQxuHay0G8R","track_name":"Aerial"}',
|
|
"tool_call_id": "call_fqZHT1DNcil1pbIv6UbOWVq9",
|
|
"name": "Spotify_GetCurrentlyPlaying",
|
|
},
|
|
{
|
|
"role": "assistant",
|
|
"content": 'The song currently playing is "Aerial" by Gajaka. You can listen to it on Spotify [here](https://open.spotify.com/album/7b5h7MJ70KC92FrwSvRaQi).',
|
|
},
|
|
]
|
|
|
|
|
|
@tool_eval()
|
|
def spotify_tracks_eval_suite() -> EvalSuite:
|
|
"""Create an evaluation suite for Spotify "track" tools."""
|
|
suite = EvalSuite(
|
|
name="Spotify Tools Evaluation",
|
|
system_message="You are an AI assistant that can manage Spotify using the provided tools.",
|
|
catalog=catalog,
|
|
rubric=rubric,
|
|
)
|
|
|
|
suite.add_case(
|
|
name="Get information about a track",
|
|
user_message="can you get more info about that song",
|
|
expected_tool_calls=[
|
|
ExpectedToolCall(
|
|
func=get_track_from_id,
|
|
args={
|
|
"track_id": "03gaqN3aWm9TQxuHay0G8R",
|
|
},
|
|
)
|
|
],
|
|
critics=[
|
|
BinaryCritic(critic_field="track_id", weight=1.0),
|
|
],
|
|
additional_messages=history,
|
|
)
|
|
|
|
return suite
|