Coverage for open_webui/retrieval/web/microsoft_web_iq.py: 31%
22 statements
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
« prev ^ index » next coverage.py v7.15.2, created at 2026-10-07 05:07 +0000
1from __future__ import annotations
3import logging
4from urllib.parse import urlparse
6import requests
7from open_webui.retrieval.web.main import SearchResult, get_filtered_results
8from open_webui.utils.headers import include_user_info_headers
10log = logging.getLogger(__name__)
13def search_microsoft_web_iq(
14 api_base_url: str,
15 api_key: str,
16 query: str,
17 count: int,
18 filter_list: list[str] | None = None,
19 language: str = 'en',
20 user=None,
21) -> list[SearchResult]:
22 try:
23 api_base_url = api_base_url.rstrip('/')
24 headers = {
25 'host': urlparse(api_base_url).netloc or 'api.microsoft.ai',
26 'x-apikey': api_key,
27 'content-type': 'application/json',
28 }
29 if user is not None:
30 headers = include_user_info_headers(headers, user)
32 response = requests.post(
33 f'{api_base_url}/search/web',
34 json={
35 'query': query,
36 'maxResults': count,
37 'language': language,
38 'contentFormat': 'passage',
39 },
40 headers=headers,
41 )
42 response.raise_for_status()
44 results = response.json().get('webResults', [])
45 if filter_list:
46 results = get_filtered_results(results, filter_list)
48 return [
49 SearchResult(
50 link=result['url'],
51 title=result.get('title'),
52 snippet=result.get('content'),
53 )
54 for result in results
55 ]
56 except Exception as e:
57 log.error(f'Error searching with Microsoft Web IQ API: {e}')
58 return []