arcade-mcp/toolkits/google/evals/eval_google_drive.py
Sam Partee 63cabe8f1f
Google Toolkit (Drive, Docs) (#97)
**New Tools Added**
- `docs.py`: Provides tools for Google Docs functionalities, including
creating documents and inserting text.
- `drive.py`: Introduces tools for Google Drive operations, such as
listing documents.

This PR also focuses on simplifying the error handling logic in the Google
toolkit, specifically within the Calendar and Gmail tools. The primary
change involves removing redundant `try-except` blocks that were
catching `HttpError` and general exceptions, and re-raising them as
`ToolExecutionError`. By removing these blocks, we allow exceptions to
propagate naturally, and be handled by the ``ToolExecutor``

---------

Co-authored-by: Eric Gustin <eric@arcade-ai.com>
2024-10-08 17:04:16 -07:00

105 lines
3.4 KiB
Python

import arcade_google
from arcade_google.tools.drive import list_documents
from arcade_google.tools.models import Corpora, OrderBy
from arcade.core.catalog import ToolCatalog
from arcade.sdk.eval import (
BinaryCritic,
EvalRubric,
EvalSuite,
tool_eval,
)
# Evaluation rubric
rubric = EvalRubric(
fail_threshold=0.9,
warn_threshold=0.95,
)
catalog = ToolCatalog()
catalog.add_module(arcade_google)
@tool_eval()
def drive_eval_suite() -> EvalSuite:
"""Create an evaluation suite for Google Drive tools."""
suite = EvalSuite(
name="Google Drive Tools Evaluation",
system_message="You are an AI assistant that can manage Google Drive documents using the provided tools.",
catalog=catalog,
rubric=rubric,
)
suite.add_case(
name="List documents in Google Drive",
user_message="show me the titles of my 39 most recently created documents. Show me the newest ones first and the oldest ones last.",
expected_tool_calls=[
(
list_documents,
{
"corpora": Corpora.USER,
"order_by": OrderBy.CREATED_TIME_DESC,
"supports_all_drives": False,
"limit": 39,
},
)
],
critics=[
BinaryCritic(critic_field="corpora", weight=0.25),
BinaryCritic(critic_field="order_by", weight=0.25),
BinaryCritic(critic_field="supports_all_drives", weight=0.25),
BinaryCritic(critic_field="limit", weight=0.25),
],
)
suite.add_case(
name="List documents in Google Drive based on title keywords",
user_message="list all documents that have title that contains the word'greedy' and also the phrase 'Joe's algo'",
expected_tool_calls=[
(
list_documents,
{
"corpora": Corpora.USER,
"title_keywords": ["greedy", "Joe's algo"],
"order_by": OrderBy.MODIFIED_TIME_DESC,
"supports_all_drives": False,
"limit": 50,
},
)
],
critics=[
BinaryCritic(critic_field="order_by", weight=0.25),
BinaryCritic(critic_field="title_keywords", weight=0.75),
],
)
suite.add_case(
name="List documents in shared drives",
user_message="List the 5 documents from all drives that nobody has touched in forever, including shared ones.",
expected_tool_calls=[
(
list_documents,
{
"corpora": Corpora.ALL_DRIVES,
"order_by": OrderBy.MODIFIED_TIME,
"supports_all_drives": True,
"limit": 5,
},
)
],
critics=[
BinaryCritic(critic_field="corpora", weight=0.25),
BinaryCritic(critic_field="order_by", weight=0.25),
BinaryCritic(critic_field="supports_all_drives", weight=0.25),
BinaryCritic(critic_field="limit", weight=0.25),
],
)
suite.add_case(
name="No tool call case",
user_message="List my 10 most recently modified documents that are stored in my Microsoft OneDrive.",
expected_tool_calls=[],
critics=[],
)
return suite