Coverage for open_webui/retrieval/loaders/external_web.py: 28%
26 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
1import logging
2from typing import Iterator, List, Union
4import requests
5from langchain_core.document_loaders import BaseLoader
6from langchain_core.documents import Document
8log = logging.getLogger(__name__)
11class ExternalWebLoader(BaseLoader):
12 def __init__(
13 self,
14 web_paths: Union[str, List[str]],
15 external_url: str,
16 external_api_key: str,
17 continue_on_failure: bool = True,
18 **kwargs,
19 ) -> None:
20 self.external_url = external_url
21 self.external_api_key = external_api_key
22 self.urls = web_paths if isinstance(web_paths, list) else [web_paths]
23 self.continue_on_failure = continue_on_failure
25 def lazy_load(self) -> Iterator[Document]:
26 batch_size = 20
27 for i in range(0, len(self.urls), batch_size):
28 urls = self.urls[i : i + batch_size]
29 try:
30 response = requests.post(
31 self.external_url,
32 headers={
33 # LICENSE covers this Open WebUI user-agent identifier.
34 # Do not alter, remove, obscure, or replace it except as LICENSE permits:
35 # https://docs.openwebui.com/license.
36 'User-Agent': 'Open WebUI (https://github.com/open-webui/open-webui) External Web Loader',
37 'Authorization': f'Bearer {self.external_api_key}',
38 },
39 json={
40 'urls': urls,
41 },
42 )
43 response.raise_for_status()
44 results = response.json()
45 for result in results:
46 yield Document(
47 page_content=result.get('page_content', ''),
48 metadata=result.get('metadata', {}),
49 )
50 except Exception as e:
51 if self.continue_on_failure:
52 log.error(f'Error extracting content from batch {urls}: {e}')
53 else:
54 raise e