blob: f1833334ca64b3f341fcc4e9301ee27983fe5876 [file] [log] [blame]
# Licensed to the Apache Software Foundation (ASF) under one
# or more contributor license agreements. See the NOTICE file
# distributed with this work for additional information
# regarding copyright ownership. The ASF licenses this file
# to you under the Apache License, Version 2.0 (the
# "License"); you may not use this file except in compliance
# with the License. You may obtain a copy of the License at
#
# http://www.apache.org/licenses/LICENSE-2.0
#
# Unless required by applicable law or agreed to in writing,
# software distributed under the License is distributed on an
# "AS IS" BASIS, WITHOUT WARRANTIES OR CONDITIONS OF ANY
# KIND, either express or implied. See the License for the
# specific language governing permissions and limitations
# under the License.
import os
from unittest.mock import MagicMock, patch
from hugegraph_llm.document import Document
from .utils.mock import VectorIndex
# Check if external service tests should be skipped
def should_skip_external():
return os.environ.get("SKIP_EXTERNAL_SERVICES") == "true"
# Create mock Ollama embedding response
def mock_ollama_embedding(dimension=1024):
return {"embedding": [0.1] * dimension}
# Create mock OpenAI embedding response
def mock_openai_embedding(dimension=1536):
class MockResponse:
def __init__(self, data):
self.data = data
return MockResponse([{"embedding": [0.1] * dimension, "index": 0}])
# Create mock OpenAI chat response
def mock_openai_chat_response(text="Mock OpenAI response"):
class MockResponse:
def __init__(self, content):
self.choices = [MagicMock()]
self.choices[0].message.content = content
return MockResponse(text)
# Create mock Ollama chat response
def mock_ollama_chat_response(text="Mock Ollama response"):
return {"message": {"content": text}}
# Decorator for mocking Ollama embedding
def with_mock_ollama_embedding(func):
@patch("ollama._client.Client._request_raw")
def wrapper(self, mock_request, *args, **kwargs):
mock_request.return_value.json.return_value = mock_ollama_embedding()
return func(self, *args, **kwargs)
return wrapper
# Decorator for mocking OpenAI embedding
def with_mock_openai_embedding(func):
@patch("openai.resources.embeddings.Embeddings.create")
def wrapper(self, mock_create, *args, **kwargs):
mock_create.return_value = mock_openai_embedding()
return func(self, *args, **kwargs)
return wrapper
# Decorator for mocking Ollama LLM client
def with_mock_ollama_client(func):
@patch("ollama._client.Client._request_raw")
def wrapper(self, mock_request, *args, **kwargs):
mock_request.return_value.json.return_value = mock_ollama_chat_response()
return func(self, *args, **kwargs)
return wrapper
# Decorator for mocking OpenAI LLM client
def with_mock_openai_client(func):
@patch("openai.resources.chat.completions.Completions.create")
def wrapper(self, mock_create, *args, **kwargs):
mock_create.return_value = mock_openai_chat_response()
return func(self, *args, **kwargs)
return wrapper
# Helper function to download NLTK resources
def ensure_nltk_resources():
import nltk
try:
nltk.data.find("corpora/stopwords")
except LookupError:
nltk.download("stopwords", quiet=True)
# Helper function to create test document
def create_test_document(content="This is a test document"):
return Document(content=content, metadata={"source": "test"})
# Helper function to create test vector index
def create_test_vector_index(dimension=1536):
index = VectorIndex(dimension)
return index