arcade-mcp/toolkits/salesforce/evals/eval_create_contact.py
Renato Byrro e1c293ee4f
Salesforce toolkit (#360)
Co-authored-by: Eric Gustin <34000337+EricGustin@users.noreply.github.com>
2025-04-18 14:28:27 -03:00

102 lines
3.4 KiB
Python

from arcade.sdk import ToolCatalog
from arcade.sdk.eval import (
EvalRubric,
EvalSuite,
ExpectedToolCall,
tool_eval,
)
from arcade.sdk.eval.critic import BinaryCritic
import arcade_salesforce
from arcade_salesforce.tools import create_contact
# Evaluation rubric
rubric = EvalRubric(
fail_threshold=0.85,
warn_threshold=0.95,
)
catalog = ToolCatalog()
catalog.add_module(arcade_salesforce)
@tool_eval()
def create_contact_eval_suite() -> EvalSuite:
suite = EvalSuite(
name="create contact eval suite",
system_message=(
"You are an AI assistant with access to Salesforce tools. "
"Use them to help the user with their tasks."
),
catalog=catalog,
rubric=rubric,
)
suite.add_case(
name="Create contact",
user_message="Create a contact for the account with ID 001gK000003DIn0QAG with name Jenifer Bear and email jenifer@acme.net.",
expected_tool_calls=[
ExpectedToolCall(
func=create_contact,
args={
"account_id": "001gK000003DIn0QAG",
"last_name": "Bear",
"first_name": "Jenifer",
"email": "jenifer@acme.net",
"phone": None,
"mobile_phone": None,
"title": None,
"department": None,
"description": None,
},
),
],
rubric=rubric,
critics=[
BinaryCritic(critic_field="account_id", weight=0.2),
BinaryCritic(critic_field="last_name", weight=0.1),
BinaryCritic(critic_field="first_name", weight=0.1),
BinaryCritic(critic_field="email", weight=0.1),
BinaryCritic(critic_field="phone", weight=0.1),
BinaryCritic(critic_field="mobile_phone", weight=0.1),
BinaryCritic(critic_field="title", weight=0.1),
BinaryCritic(critic_field="department", weight=0.1),
BinaryCritic(critic_field="description", weight=0.1),
],
)
suite.add_case(
name="Create contact with only last name",
user_message="Create a contact for the account with ID 001gK000003DIn0QAG with name Doe and email doe@acme.net.",
expected_tool_calls=[
ExpectedToolCall(
func=create_contact,
args={
"account_id": "001gK000003DIn0QAG",
"last_name": "Doe",
"first_name": None,
"email": "doe@acme.net",
"phone": None,
"mobile_phone": None,
"title": None,
"department": None,
"description": None,
},
),
],
rubric=rubric,
critics=[
BinaryCritic(critic_field="account_id", weight=0.2),
BinaryCritic(critic_field="last_name", weight=0.1),
BinaryCritic(critic_field="first_name", weight=0.1),
BinaryCritic(critic_field="email", weight=0.1),
BinaryCritic(critic_field="phone", weight=0.1),
BinaryCritic(critic_field="mobile_phone", weight=0.1),
BinaryCritic(critic_field="title", weight=0.1),
BinaryCritic(critic_field="department", weight=0.1),
BinaryCritic(critic_field="description", weight=0.1),
],
)
return suite