processSearchResponse function
Process search results from an API response containing web_search_tool_result blocks.
Implementation
WebSearchOutput processSearchResponse(
String originalQuery,
List<Map<String, dynamic>> contentBlocks,
double durationSeconds,
) {
final results = <dynamic>[];
var searchCount = 0;
var currentText = StringBuffer();
var inText = true;
for (final block in contentBlocks) {
final type = block['type'] as String?;
if (type == 'text') {
final text = block['text'] as String? ?? '';
if (!inText && currentText.isNotEmpty) {
results.add(currentText.toString());
currentText = StringBuffer();
}
inText = true;
currentText.write(text);
} else if (type == 'web_search_tool_result') {
if (inText && currentText.isNotEmpty) {
results.add(currentText.toString());
currentText = StringBuffer();
inText = false;
}
searchCount++;
final content = block['content'] as List?;
if (content != null) {
final searchResults = content
.whereType<Map<String, dynamic>>()
.where((r) => r.containsKey('url'))
.map((r) => SearchResult.fromJson(r))
.toList();
if (searchResults.isNotEmpty) {
results.add(searchResults);
}
}
// Check for errors
final errorCode = block['error_code'] as String?;
if (errorCode != null) {
results.add('Search error: $errorCode');
}
}
}
// Flush remaining text
if (currentText.isNotEmpty) {
results.add(currentText.toString());
}
return WebSearchOutput(
query: originalQuery,
results: results,
durationSeconds: durationSeconds,
searchCount: searchCount,
);
}