Evaluating LLMs as Mobile Personal Assistants
Listen to the summary
Uses a voice available on your device
Audio options
On this page 5 sections
Related concepts 2 concepts
Key Takeaways
- The top performing model, GPT-5.5 (xhigh), only achieved 57.3 percent accuracy, highlighting significant room for improvement in mobile assistant tasks.
- A massive 79 percent of task failures were caused by the model failing to accurately locate the necessary information within the user's data.
- Models heavily favor basic substring matching for data retrieval, with fewer than 2 percent of actions utilizing advanced search methods.
- Performance gaps exist between basic tasks and complex operations, as models show significantly lower proficiency in preference inference and multi-intent decomposition.
Summary & Methodology Analysis
The paper introduces SPIEval, a benchmark grounded in five cognitive capabilities: reasoning, disambiguation, integration, preference inference, and multi-intent decomposition. The methodology evaluates how models perform as mobile assistants by requiring them to navigate and utilize data stored across simulated applications. To execute these tasks, models are provided with a suite of retrieval and execution tools. The evaluation process involves comparing the generated tool-calling sequences against human-annotated gold answers to determine accuracy across the specified cognitive dimensions.
Interactive System Flowchart
Illustrative Implementation
A short sketch of the paper's core idea, not the authors' own code.
# Illustrative sketch (not from the paper)
import re
# Unified user profile (identity)
user_profile = {"user_id": "U123", "name": "Alice"}
# Simulated apps with simple schemas
apps = {
"contacts": [{"id": 1, "name": "Bob", "phone": "555-1234"}],
"calendar": [{"id": 1, "event": "Meeting", "time": "10:00"}],
}
# Retrieval tools (substring, regex, fuzzy placeholder)
def retrieve(app, query, method="substring"):
records = apps.get(app, [])
if method == "substring":
return [r for r in records if query in str(r)]
if method == "regex":
pattern = re.compile(query)
return [r for r in records if any(pattern.search(str(v)) for v in r.values())]
# fuzzy not implemented in sketch
return []
# Execution tool placeholder
def execute(action, target):
return f"Executed {action} on {target}"
# Core evaluation loop: generate tool calls from instruction
def process_instruction(instruction):
# naive parsing: look for app name and keyword
if "call" in instruction.lower():
app = "contacts"
query = "Bob"
retrieved = retrieve(app, query)
if retrieved:
return [
{"tool": "retrieve", "app": app, "query": query},
{"tool": "execute", "action": "call", "target": retrieved[0]["phone"]},
]
return []
# Example usage
instr = "Call my friend Bob"
tool_calls = process_instruction(instr)
print(tool_calls)// Illustrative sketch (not from the paper)
const userProfile = { userId: "U123", name: "Alice" };
// Simulated apps with simple schemas
const apps = {
contacts: [{ id: 1, name: "Bob", phone: "555-1234" }],
calendar: [{ id: 1, event: "Meeting", time: "10:00" }],
};
// Retrieval tools (substring, regex)
function retrieve(app, query, method = "substring") {
const records = apps[app] || [];
if (method === "substring") {
return records.filter(r => JSON.stringify(r).includes(query));
}
if (method === "regex") {
const regex = new RegExp(query);
return records.filter(r => Object.values(r).some(v => regex.test(String(v))));
}
// fuzzy not implemented in sketch
return [];
}
// Execution tool placeholder
function execute(action, target) {
return `Executed ${action} on ${target}`;
}
// Core evaluation: turn instruction into tool calls
function processInstruction(instruction) {
if (instruction.includes("Call")) {
const app = "contacts";
const query = "Bob";
const retrieved = retrieve(app, query);
if (retrieved.length) {
return [
{ tool: "retrieve", app, query },
{ tool: "execute", action: "call", target: retrieved[0].phone },
];
}
}
return [];
}
// Example usage
const instr = "Call my friend Bob";
const toolCalls = processInstruction(instr);
console.log(toolCalls);
Cross-Examination & FAQs
A deeper dive clarifying mechanics, constraints, and baseline evaluations.
Q1. What is SPIEval?
SPIEval is a human-curated benchmark created to evaluate the performance of large language models when acting as mobile assistants that must access scattered personal information.
Q2. How well do current models perform on these tasks?
Performance varies significantly, with the top model reaching 57.3 percent accuracy and the weakest model scoring 16.4 percent.
Q3. What is the primary reason models fail to complete tasks correctly?
The paper identifies that 79 percent of failures are due to inaccurate information localization, where models incorrectly commit to plausible but wrong data instead of continuing to retrieve and verify.
Q4. How do models handle data retrieval in this mobile environment?
Models show a strong reliance on basic substring matching, which accounts for 98.5 percent of all retrieval calls, while fewer than 2 percent of actions employ advanced search methods.
Q5. Are certain types of cognitive tasks harder for these models?
Yes, while models achieve roughly 46 percent average accuracy on reasoning, disambiguation, and integration, their performance on preference inference and multi-intent decomposition is only about half as high.
Q6. How many model configurations were evaluated in the study?
The researchers evaluated 18 different model configurations to derive their findings.
Q7. Does the paper describe how the benchmark tasks were validated?
Yes, each task was independently verified by at least two human annotators to ensure quality and resolve potential ambiguities.
Q8. What specifically causes the poor performance in information localization?
The models tend to commit to plausible but incorrect information early in the process rather than continuing to retrieve and verify the information.
Q9. What is the total number of retrieval calls analyzed?
The analysis included 126,279 retrieval calls issued across the evaluated configurations.