refac: modernize type annotations (PEP 604 / PEP 585)

This commit is contained in:
Timothy Jaeryang Baek committed 2026-05-12 17:10:15 +09:00
1 parent a59c967d7e
commit 6d0295588e
197 files changed
+3265 -3488

No files matched your search

@@ -1,11 +1,12 @@
import json
import logging
import os
import time
import requests
import logging
import json
from typing import List, Optional
from langchain_core.documents import Document
import requests
from fastapi import HTTPException, status
from langchain_core.documents import Document
log = logging.getLogger(__name__)
@@ -1,8 +1,9 @@
import requests
import logging, os
import logging
import os
from typing import Iterator, List, Union
from urllib.parse import quote
import requests
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
from open_webui.utils.headers import include_user_info_headers
@@ -1,7 +1,7 @@
import requests
import logging
from typing import Iterator, List, Union
import requests
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
+7 -10
View File
@@ -1,10 +1,10 @@
import asyncio
import requests
import logging
import ftfy
import sys
import json
import logging
import sys
import ftfy
import requests
from azure.identity import DefaultAzureCredential
from langchain_community.document_loaders import (
AzureAIDocumentIntelligenceLoader,
@@ -17,16 +17,13 @@ from langchain_community.document_loaders import (
YoutubeLoader,
)
from langchain_core.documents import Document
from open_webui.retrieval.loaders.external_document import ExternalDocumentLoader
from open_webui.retrieval.loaders.mistral import MistralLoader
from open_webui.env import AIOHTTP_CLIENT_SESSION_SSL, GLOBAL_LOG_LEVEL, REQUESTS_VERIFY
from open_webui.retrieval.loaders.datalab_marker import DatalabMarkerLoader
from open_webui.retrieval.loaders.external_document import ExternalDocumentLoader
from open_webui.retrieval.loaders.mineru import MinerULoader
from open_webui.retrieval.loaders.mistral import MistralLoader
from open_webui.retrieval.loaders.paddleocr_vl import PaddleOCRVLLoader
from open_webui.env import GLOBAL_LOG_LEVEL, REQUESTS_VERIFY, AIOHTTP_CLIENT_SESSION_SSL
logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL)
log = logging.getLogger(__name__)
@@ -1,12 +1,13 @@
import os
import time
import requests
import logging
import os
import tempfile
import time
import zipfile
from typing import List, Optional
from langchain_core.documents import Document
import requests
from fastapi import HTTPException, status
from langchain_core.documents import Document
log = logging.getLogger(__name__)
@@ -1,15 +1,15 @@
import requests
import aiohttp
import asyncio
import logging
import os
import sys
import time
from typing import List, Dict, Any
from contextlib import asynccontextmanager
from typing import Any, Dict, List
import aiohttp
import requests
from langchain_core.documents import Document
from open_webui.env import GLOBAL_LOG_LEVEL, AIOHTTP_CLIENT_SESSION_SSL
from open_webui.env import AIOHTTP_CLIENT_SESSION_SSL, GLOBAL_LOG_LEVEL
logging.basicConfig(stream=sys.stdout, level=GLOBAL_LOG_LEVEL)
log = logging.getLogger(__name__)
@@ -1,10 +1,10 @@
import base64
import os
import requests
import logging
import os
import sys
from typing import List
import requests
from langchain_core.documents import Document
from open_webui.env import GLOBAL_LOG_LEVEL
@@ -1,7 +1,7 @@
import requests
import logging
from typing import Iterator, List, Literal, Union
import requests
from langchain_core.document_loaders import BaseLoader
from langchain_core.documents import Document
@@ -1,8 +1,8 @@
import logging
from xml.etree.ElementTree import ParseError
from typing import Any, Dict, Generator, List, Optional, Sequence, Union
from urllib.parse import parse_qs, urlparse
from xml.etree.ElementTree import ParseError
from langchain_core.documents import Document
log = logging.getLogger(__name__)
@@ -1,5 +1,5 @@
from abc import ABC, abstractmethod
from typing import Optional, List, Tuple
from typing import List, Optional, Tuple
class BaseReranker(ABC):
@@ -1,11 +1,10 @@
import os
import logging
import torch
import os
import numpy as np
import torch
from colbert.infra import ColBERTConfig
from colbert.modeling.checkpoint import Checkpoint
from open_webui.retrieval.models.base_reranker import BaseReranker
log = logging.getLogger(__name__)
@@ -1,9 +1,8 @@
import logging
import requests
from typing import Optional, List, Tuple
from typing import List, Optional, Tuple
from urllib.parse import quote
import requests
from open_webui.env import ENABLE_FORWARD_USER_INFO_HEADERS, REQUESTS_VERIFY
from open_webui.retrieval.models.base_reranker import BaseReranker
from open_webui.utils.headers import include_user_info_headers
+10 -5
View File
@@ -1,3 +1,5 @@
from __future__ import annotations
import asyncio
import hashlib
import logging
@@ -516,8 +518,11 @@ def get_all_items_from_collections(collection_names: list[str]) -> dict:
async def query_collection(
request, collection_names: list[str], queries: list[str],
embedding_function, k: int,
request,
collection_names: list[str],
queries: list[str],
embedding_function,
k: int,
) -> dict:
# When request is provided, try hybrid search + reranking if enabled
if request and request.app.state.config.ENABLE_RAG_HYBRID_SEARCH:
@@ -1109,7 +1114,7 @@ async def get_sources_from_items(
hybrid_bm25_weight,
hybrid_search,
full_context=False,
user: Optional[UserModel] = None,
user: UserModel | None = None,
):
log.debug(f'items: {items} {queries} {embedding_function} {reranking_function} {full_context}')
@@ -1421,7 +1426,7 @@ class RerankCompressor(BaseDocumentCompressor):
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
callbacks: Callbacks | None = None,
) -> Sequence[Document]:
"""Compress retrieved documents given the query context.
@@ -1440,7 +1445,7 @@ class RerankCompressor(BaseDocumentCompressor):
self,
documents: Sequence[Document],
query: str,
callbacks: Optional[Callbacks] = None,
callbacks: Callbacks | None = None,
) -> Sequence[Document]:
reranking = self.reranking_function is not None
@@ -1,29 +1,27 @@
import chromadb
import logging
from chromadb import Settings
from chromadb.utils.batch_utils import create_batches
from typing import Optional
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.retrieval.vector.utils import process_metadata
import chromadb
from chromadb import Settings
from chromadb.utils.batch_utils import create_batches
from open_webui.config import (
CHROMA_CLIENT_AUTH_CREDENTIALS,
CHROMA_CLIENT_AUTH_PROVIDER,
CHROMA_DATA_PATH,
CHROMA_DATABASE,
CHROMA_HTTP_HEADERS,
CHROMA_HTTP_HOST,
CHROMA_HTTP_PORT,
CHROMA_HTTP_HEADERS,
CHROMA_HTTP_SSL,
CHROMA_TENANT,
CHROMA_DATABASE,
CHROMA_CLIENT_AUTH_PROVIDER,
CHROMA_CLIENT_AUTH_CREDENTIALS,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
log = logging.getLogger(__name__)
@@ -2,28 +2,28 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from elasticsearch import Elasticsearch, BadRequestError
from typing import Optional
import ssl
from elasticsearch.helpers import bulk, scan
from typing import Optional
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from elasticsearch import BadRequestError, Elasticsearch
from elasticsearch.helpers import bulk, scan
from open_webui.config import (
ELASTICSEARCH_URL,
ELASTICSEARCH_CA_CERTS,
ELASTICSEARCH_API_KEY,
ELASTICSEARCH_USERNAME,
ELASTICSEARCH_PASSWORD,
ELASTICSEARCH_CA_CERTS,
ELASTICSEARCH_CLOUD_ID,
ELASTICSEARCH_INDEX_PREFIX,
ELASTICSEARCH_PASSWORD,
ELASTICSEARCH_URL,
ELASTICSEARCH_USERNAME,
SSL_ASSERT_FINGERPRINT,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
class ElasticsearchClient(VectorDBBase):
@@ -13,18 +13,15 @@ import sys
from contextlib import contextmanager
from typing import Any, Dict, List, Optional, Tuple
from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool, QueuePool
from open_webui.config import (
MARIADB_VECTOR_DB_URL,
MARIADB_VECTOR_DISTANCE_STRATEGY,
MARIADB_VECTOR_INDEX_M,
MARIADB_VECTOR_INITIALIZE_MAX_VECTOR_LENGTH,
MARIADB_VECTOR_POOL_SIZE,
MARIADB_VECTOR_POOL_MAX_OVERFLOW,
MARIADB_VECTOR_POOL_TIMEOUT,
MARIADB_VECTOR_POOL_RECYCLE,
MARIADB_VECTOR_POOL_SIZE,
MARIADB_VECTOR_POOL_TIMEOUT,
)
from open_webui.retrieval.vector.main import (
GetResult,
@@ -33,6 +30,8 @@ from open_webui.retrieval.vector.main import (
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
from sqlalchemy import create_engine
from sqlalchemy.pool import NullPool, QueuePool
log = logging.getLogger(__name__)
@@ -2,33 +2,31 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from pymilvus import MilvusClient as Client
from pymilvus import FieldSchema, DataType
from pymilvus import connections, Collection
import json
import logging
from typing import Optional
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
MILVUS_URI,
MILVUS_DB,
MILVUS_TOKEN,
MILVUS_INDEX_TYPE,
MILVUS_METRIC_TYPE,
MILVUS_HNSW_M,
MILVUS_HNSW_EFCONSTRUCTION,
MILVUS_IVF_FLAT_NLIST,
MILVUS_DISKANN_MAX_DEGREE,
MILVUS_DISKANN_SEARCH_LIST_SIZE,
MILVUS_HNSW_EFCONSTRUCTION,
MILVUS_HNSW_M,
MILVUS_INDEX_TYPE,
MILVUS_IVF_FLAT_NLIST,
MILVUS_METRIC_TYPE,
MILVUS_TOKEN,
MILVUS_URI,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
from pymilvus import Collection, DataType, FieldSchema, connections
from pymilvus import MilvusClient as Client
log = logging.getLogger(__name__)
@@ -3,18 +3,18 @@ NOTE: This vector database integration is community-supported and maintained on
"""
import logging
from typing import Optional, Tuple, List, Dict, Any
from typing import Any, Dict, List, Optional, Tuple
from open_webui.config import (
MILVUS_URI,
MILVUS_TOKEN,
MILVUS_DB,
MILVUS_COLLECTION_PREFIX,
MILVUS_INDEX_TYPE,
MILVUS_METRIC_TYPE,
MILVUS_HNSW_M,
MILVUS_DB,
MILVUS_HNSW_EFCONSTRUCTION,
MILVUS_HNSW_M,
MILVUS_INDEX_TYPE,
MILVUS_IVF_FLAT_NLIST,
MILVUS_METRIC_TYPE,
MILVUS_TOKEN,
MILVUS_URI,
)
from open_webui.retrieval.vector.main import (
GetResult,
@@ -23,12 +23,12 @@ from open_webui.retrieval.vector.main import (
VectorItem,
)
from pymilvus import (
connections,
utility,
Collection,
CollectionSchema,
FieldSchema,
DataType,
FieldSchema,
connections,
utility,
)
log = logging.getLogger(__name__)
@@ -2,37 +2,36 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from typing import Optional, List, Dict, Any
import json
import logging
import re
import json
from typing import Any, Dict, List, Optional
from pgvector.sqlalchemy import Vector
from sqlalchemy import (
func,
literal,
Column,
Integer,
LargeBinary,
MetaData,
Table,
Text,
cast,
column,
create_engine,
Column,
Integer,
MetaData,
LargeBinary,
func,
literal,
select,
text,
Text,
Table,
values,
)
from sqlalchemy.sql import true
from sqlalchemy.pool import NullPool, QueuePool
from sqlalchemy.orm import declarative_base, scoped_session, sessionmaker
from sqlalchemy.dialects.postgresql import JSONB, array
from pgvector.sqlalchemy import Vector
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.exc import NoSuchTableError
from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
from sqlalchemy.dialects import registry
from sqlalchemy.dialects.postgresql import JSONB, array
from sqlalchemy.dialects.postgresql.psycopg2 import PGDialect_psycopg2
from sqlalchemy.exc import NoSuchTableError
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.orm import declarative_base, scoped_session, sessionmaker
from sqlalchemy.pool import NullPool, QueuePool
from sqlalchemy.sql import true
class OpenGaussDialect(PGDialect_psycopg2):
@@ -56,23 +55,22 @@ class OpenGaussDialect(PGDialect_psycopg2):
# Register dialect
registry.register('opengauss', __name__, 'OpenGaussDialect')
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
OPENGAUSS_DB_URL,
OPENGAUSS_INITIALIZE_MAX_VECTOR_LENGTH,
OPENGAUSS_POOL_SIZE,
OPENGAUSS_POOL_MAX_OVERFLOW,
OPENGAUSS_POOL_TIMEOUT,
OPENGAUSS_POOL_RECYCLE,
OPENGAUSS_POOL_SIZE,
OPENGAUSS_POOL_TIMEOUT,
)
from open_webui.env import SRC_LOG_LEVELS
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
VECTOR_LENGTH = OPENGAUSS_INITIALIZE_MAX_VECTOR_LENGTH
Base = declarative_base()
@@ -2,24 +2,24 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from opensearchpy import OpenSearch
from opensearchpy.helpers import bulk
from typing import Optional
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.config import (
OPENSEARCH_CERT_VERIFY,
OPENSEARCH_PASSWORD,
OPENSEARCH_SSL,
OPENSEARCH_URI,
OPENSEARCH_USERNAME,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
OPENSEARCH_URI,
OPENSEARCH_SSL,
OPENSEARCH_CERT_VERIFY,
OPENSEARCH_USERNAME,
OPENSEARCH_PASSWORD,
)
from open_webui.retrieval.vector.utils import process_metadata
from opensearchpy import OpenSearch
from opensearchpy.helpers import bulk
class OpenSearchClient(VectorDBBase):
@@ -28,34 +28,33 @@ ORACLE_DB_POOL_MAX = 10
ORACLE_DB_POOL_INCREMENT = 1
"""
from typing import Optional, List, Dict, Any, Union
from decimal import Decimal
import array
import json
import logging
import os
import threading
import time
import json
import array
from decimal import Decimal
from typing import Any, Dict, List, Optional, Union
import oracledb
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
ORACLE_DB_DSN,
ORACLE_DB_PASSWORD,
ORACLE_DB_POOL_INCREMENT,
ORACLE_DB_POOL_MAX,
ORACLE_DB_POOL_MIN,
ORACLE_DB_USE_WALLET,
ORACLE_DB_USER,
ORACLE_DB_PASSWORD,
ORACLE_DB_DSN,
ORACLE_VECTOR_LENGTH,
ORACLE_WALLET_DIR,
ORACLE_WALLET_PASSWORD,
ORACLE_VECTOR_LENGTH,
ORACLE_DB_POOL_MIN,
ORACLE_DB_POOL_MAX,
ORACLE_DB_POOL_INCREMENT,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
log = logging.getLogger(__name__)
@@ -1,56 +1,54 @@
from typing import Optional, List, Dict, Any, Tuple
import logging
import json
import logging
from typing import Any, Dict, List, Optional, Tuple
from open_webui.config import (
PGVECTOR_CREATE_EXTENSION,
PGVECTOR_DB_URL,
PGVECTOR_HNSW_EF_CONSTRUCTION,
PGVECTOR_HNSW_M,
PGVECTOR_INDEX_METHOD,
PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH,
PGVECTOR_IVFFLAT_LISTS,
PGVECTOR_PGCRYPTO,
PGVECTOR_PGCRYPTO_KEY,
PGVECTOR_POOL_MAX_OVERFLOW,
PGVECTOR_POOL_RECYCLE,
PGVECTOR_POOL_SIZE,
PGVECTOR_POOL_TIMEOUT,
PGVECTOR_USE_HALFVEC,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.utils.misc import sanitize_text_for_db
from pgvector.sqlalchemy import HALFVEC, Vector
from sqlalchemy import (
func,
literal,
Column,
Integer,
LargeBinary,
MetaData,
Table,
Text,
cast,
column,
create_engine,
Column,
Integer,
MetaData,
LargeBinary,
func,
literal,
select,
text,
Text,
Table,
values,
)
from sqlalchemy.sql import true
from sqlalchemy.pool import NullPool, QueuePool
from sqlalchemy.orm import declarative_base, scoped_session, sessionmaker
from sqlalchemy.dialects.postgresql import JSONB, array
from pgvector.sqlalchemy import Vector, HALFVEC
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.exc import NoSuchTableError
from open_webui.retrieval.vector.utils import process_metadata
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.utils.misc import sanitize_text_for_db
from open_webui.config import (
PGVECTOR_DB_URL,
PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH,
PGVECTOR_CREATE_EXTENSION,
PGVECTOR_PGCRYPTO,
PGVECTOR_PGCRYPTO_KEY,
PGVECTOR_POOL_SIZE,
PGVECTOR_POOL_MAX_OVERFLOW,
PGVECTOR_POOL_TIMEOUT,
PGVECTOR_POOL_RECYCLE,
PGVECTOR_INDEX_METHOD,
PGVECTOR_HNSW_M,
PGVECTOR_HNSW_EF_CONSTRUCTION,
PGVECTOR_IVFFLAT_LISTS,
PGVECTOR_USE_HALFVEC,
)
from sqlalchemy.ext.mutable import MutableDict
from sqlalchemy.orm import declarative_base, scoped_session, sessionmaker
from sqlalchemy.pool import NullPool, QueuePool
from sqlalchemy.sql import true
VECTOR_LENGTH = PGVECTOR_INITIALIZE_MAX_VECTOR_LENGTH
USE_HALFVEC = PGVECTOR_USE_HALFVEC
@@ -2,9 +2,10 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from typing import Optional, List, Dict, Any, Union
import logging
import time # for measuring elapsed time
from typing import Any, Dict, List, Optional, Union
from pinecone import Pinecone, ServerlessSpec
# Add gRPC support for better performance (Pinecone best practice)
@@ -16,24 +17,23 @@ except ImportError:
GRPC_AVAILABLE = False
import asyncio # for async upserts
import functools # for partial binding in async tasks
import concurrent.futures # for parallel batch upserts
import functools # for partial binding in async tasks
import random # for jitter in retry backoff
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
PINECONE_API_KEY,
PINECONE_CLOUD,
PINECONE_DIMENSION,
PINECONE_ENVIRONMENT,
PINECONE_INDEX_NAME,
PINECONE_DIMENSION,
PINECONE_METRIC,
PINECONE_CLOUD,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
@@ -2,31 +2,30 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from typing import Optional
import logging
from typing import Optional
from urllib.parse import urlparse
from open_webui.config import (
QDRANT_API_KEY,
QDRANT_COLLECTION_PREFIX,
QDRANT_GRPC_PORT,
QDRANT_HNSW_M,
QDRANT_ON_DISK,
QDRANT_PREFER_GRPC,
QDRANT_TIMEOUT,
QDRANT_URI,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from qdrant_client import QdrantClient as Qclient
from qdrant_client.http.models import PointStruct
from qdrant_client.models import models
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.config import (
QDRANT_URI,
QDRANT_API_KEY,
QDRANT_ON_DISK,
QDRANT_GRPC_PORT,
QDRANT_PREFER_GRPC,
QDRANT_COLLECTION_PREFIX,
QDRANT_TIMEOUT,
QDRANT_HNSW_M,
)
NO_LIMIT = 999999999
log = logging.getLogger(__name__)
@@ -3,19 +3,19 @@ NOTE: This vector database integration is community-supported and maintained on
"""
import logging
from typing import Optional, Tuple, List, Dict, Any
from typing import Any, Dict, List, Optional, Tuple
from urllib.parse import urlparse
import grpc
from open_webui.config import (
QDRANT_API_KEY,
QDRANT_COLLECTION_PREFIX,
QDRANT_GRPC_PORT,
QDRANT_HNSW_M,
QDRANT_ON_DISK,
QDRANT_PREFER_GRPC,
QDRANT_URI,
QDRANT_COLLECTION_PREFIX,
QDRANT_TIMEOUT,
QDRANT_HNSW_M,
QDRANT_URI,
)
from open_webui.retrieval.vector.main import (
GetResult,
@@ -2,17 +2,18 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
from open_webui.retrieval.vector.utils import process_metadata
import logging
from typing import Any, Dict, List, Optional, Union
import boto3
from open_webui.config import S3_VECTOR_BUCKET_NAME, S3_VECTOR_REGION
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.config import S3_VECTOR_BUCKET_NAME, S3_VECTOR_REGION
from typing import List, Optional, Dict, Any, Union
import logging
import boto3
from open_webui.retrieval.vector.utils import process_metadata
log = logging.getLogger(__name__)
@@ -2,28 +2,28 @@
NOTE: This vector database integration is community-supported and maintained on a best-effort basis.
"""
import weaviate
import re
import uuid
from typing import Any, Dict, List, Optional, Union
from open_webui.retrieval.vector.main import (
VectorDBBase,
VectorItem,
SearchResult,
GetResult,
)
from open_webui.retrieval.vector.utils import process_metadata
import weaviate
from open_webui.config import (
WEAVIATE_HTTP_HOST,
WEAVIATE_GRPC_HOST,
WEAVIATE_HTTP_PORT,
WEAVIATE_GRPC_PORT,
WEAVIATE_API_KEY,
WEAVIATE_HTTP_SECURE,
WEAVIATE_GRPC_HOST,
WEAVIATE_GRPC_PORT,
WEAVIATE_GRPC_SECURE,
WEAVIATE_HTTP_HOST,
WEAVIATE_HTTP_PORT,
WEAVIATE_HTTP_SECURE,
WEAVIATE_SKIP_INIT_CHECKS,
)
from open_webui.retrieval.vector.main import (
GetResult,
SearchResult,
VectorDBBase,
VectorItem,
)
from open_webui.retrieval.vector.utils import process_metadata
def _convert_uuids_to_strings(obj: Any) -> Any:
@@ -1,10 +1,10 @@
from open_webui.config import (
ENABLE_MILVUS_MULTITENANCY_MODE,
ENABLE_QDRANT_MULTITENANCY_MODE,
VECTOR_DB,
)
from open_webui.retrieval.vector.main import VectorDBBase
from open_webui.retrieval.vector.type import VectorType
from open_webui.config import (
VECTOR_DB,
ENABLE_QDRANT_MULTITENANCY_MODE,
ENABLE_MILVUS_MULTITENANCY_MODE,
)
class Vector:
+2 -1
View File
@@ -1,7 +1,8 @@
from pydantic import BaseModel
from abc import ABC, abstractmethod
from typing import Any, Dict, List, Optional, Union
from pydantic import BaseModel
class VectorItem(BaseModel):
id: str
@@ -1,5 +1,6 @@
import logging
from typing import Optional
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
+2 -1
View File
@@ -1,10 +1,11 @@
import argparse
import logging
import os
from pprint import pprint
from typing import Optional
import requests
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
import argparse
log = logging.getLogger(__name__)
"""
+1 -1
View File
@@ -1,8 +1,8 @@
import json
import logging
from typing import Optional
import requests
import json
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
@@ -8,6 +8,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_brave(api_key: str, query: str, count: int, filter_list: list[str | None] = None) -> list[SearchResult]:
"""Search using Brave's Search API and return the results as a list of SearchResult objects.
@@ -9,6 +9,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_duckduckgo(
query: str,
count: int,
+2 -5
View File
@@ -1,14 +1,11 @@
import logging
from typing import Optional, List
from typing import List, Optional
import requests
from fastapi import Request
from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.utils.headers import include_user_info_headers
from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
log = logging.getLogger(__name__)
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_google_pse(
api_key: str,
search_engine_id: str,
@@ -8,6 +8,7 @@ from yarl import URL
log = logging.getLogger(__name__)
def search_jina(api_key: str, query: str, count: int, base_url: str = '') -> list[SearchResult]:
"""
Search using Jina's Search API and return the results as a list of SearchResult objects.
+2
View File
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.utils import resolve_hostname
from open_webui.utils.misc import is_string_allowed
from pydantic import BaseModel
def get_filtered_results(results, filter_list):
if not filter_list:
return results
@@ -37,6 +38,7 @@ def get_filtered_results(results, filter_list):
return filtered_results
class SearchResult(BaseModel):
link: str
title: str | None
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_mojeek(api_key: str, query: str, count: int, filter_list: list[str | None] = None) -> list[SearchResult]:
"""Search using Mojeek's Search API and return the results as a list of SearchResult objects.
@@ -1,7 +1,7 @@
import logging
from typing import Optional, Literal
import requests
from typing import Literal, Optional
import requests
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
MODELS = Literal[
@@ -1,7 +1,7 @@
import logging
from typing import Optional, Literal
import requests
from typing import Literal, Optional
import requests
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.utils.headers import include_user_info_headers
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_searxng( # noqa: PLR0913
query_url: str,
query: str,
@@ -8,6 +8,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_serper(api_key: str, query: str, count: int, filter_list: list[str | None] = None) -> list[SearchResult]:
"""Search using serper.dev's API and return the results as a list of SearchResult objects.
@@ -8,6 +8,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_serply(
api_key: str,
query: str,
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_serpstack(
api_key: str,
query: str,
+3 -4
View File
@@ -1,7 +1,6 @@
import logging
import json
from typing import Optional, List
import logging
from typing import List, Optional
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
@@ -15,8 +14,8 @@ def search_sougou(
count: int,
filter_list: Optional[List[str]] = None,
) -> List[SearchResult]:
from tencentcloud.common.common_client import CommonClient
from tencentcloud.common import credential
from tencentcloud.common.common_client import CommonClient
from tencentcloud.common.exception.tencent_cloud_sdk_exception import (
TencentCloudSDKException,
)
@@ -7,6 +7,7 @@ from open_webui.retrieval.web.main import SearchResult, get_filtered_results
log = logging.getLogger(__name__)
def search_tavily(
api_key: str,
query: str,
+14 -16
View File
@@ -5,8 +5,6 @@ import socket
import ssl
import urllib.parse
import urllib.request
import requests
from datetime import datetime, time, timedelta
from typing import (
Any,
@@ -14,41 +12,41 @@ from typing import (
Dict,
Iterator,
List,
Literal,
Optional,
Sequence,
Union,
Literal,
)
from fastapi.concurrency import run_in_threadpool
import aiohttp
import certifi
import requests
import validators
from fastapi.concurrency import run_in_threadpool
from langchain_community.document_loaders import PlaywrightURLLoader, WebBaseLoader
from langchain_community.document_loaders.base import BaseLoader
from langchain_core.documents import Document
from open_webui.retrieval.loaders.tavily import TavilyLoader
from open_webui.retrieval.loaders.external_web import ExternalWebLoader
from open_webui.retrieval.web.firecrawl import scrape_firecrawl_url
from open_webui.constants import ERROR_MESSAGES
from open_webui.config import (
ENABLE_RAG_LOCAL_WEB_FETCH,
PLAYWRIGHT_WS_URL,
PLAYWRIGHT_TIMEOUT,
WEB_LOADER_ENGINE,
WEB_LOADER_TIMEOUT,
EXTERNAL_WEB_LOADER_API_KEY,
EXTERNAL_WEB_LOADER_URL,
FIRECRAWL_API_BASE_URL,
FIRECRAWL_API_KEY,
FIRECRAWL_TIMEOUT,
PLAYWRIGHT_TIMEOUT,
PLAYWRIGHT_WS_URL,
TAVILY_API_KEY,
TAVILY_EXTRACT_DEPTH,
EXTERNAL_WEB_LOADER_URL,
EXTERNAL_WEB_LOADER_API_KEY,
WEB_FETCH_FILTER_LIST,
WEB_LOADER_ENGINE,
WEB_LOADER_TIMEOUT,
)
from open_webui.constants import ERROR_MESSAGES
from open_webui.env import AIOHTTP_CLIENT_ALLOW_REDIRECTS, AIOHTTP_CLIENT_SESSION_SSL
from open_webui.retrieval.loaders.external_web import ExternalWebLoader
from open_webui.retrieval.loaders.tavily import TavilyLoader
from open_webui.retrieval.web.firecrawl import scrape_firecrawl_url
from open_webui.utils.misc import is_string_allowed
from open_webui.env import AIOHTTP_CLIENT_SESSION_SSL, AIOHTTP_CLIENT_ALLOW_REDIRECTS
log = logging.getLogger(__name__)
+1 -1
View File
@@ -2,8 +2,8 @@ import logging
from typing import Optional
import requests
from requests.auth import HTTPDigestAuth
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from requests.auth import HTTPDigestAuth
log = logging.getLogger(__name__)
+8 -11
View File
@@ -3,19 +3,16 @@ import io
import json
import logging
import os
from typing import Optional, List
import requests
from fastapi import Request
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.utils.headers import include_user_info_headers
from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
from typing import List, Optional
from xml.etree import ElementTree as ET
from xml.etree.ElementTree import Element
import requests
from fastapi import Request
from open_webui.env import FORWARD_SESSION_INFO_HEADER_CHAT_ID
from open_webui.retrieval.web.main import SearchResult, get_filtered_results
from open_webui.utils.headers import include_user_info_headers
log = logging.getLogger(__name__)
@@ -122,8 +119,8 @@ def search_yandex(
if __name__ == '__main__':
from starlette.datastructures import Headers
from fastapi import FastAPI
from starlette.datastructures import Headers
result = search_yandex(
Request(
+1 -1
View File
@@ -1,5 +1,5 @@
import logging
from typing import Optional, List
from typing import List, Optional
import requests
from open_webui.retrieval.web.main import SearchResult, get_filtered_results