2024-03-03 22:30:05 +00:00
|
|
|
from unittest.mock import AsyncMock, patch
|
|
|
|
|
|
|
|
import pytest
|
community: Add you.com utility, update you retriever integration docs (#17014)
<!-- Thank you for contributing to LangChain!
Please title your PR "<package>: <description>", where <package> is
whichever of langchain, community, core, experimental, etc. is being
modified.
Replace this entire comment with:
- **Description:** a description of the change,
- **Issue:** the issue # it fixes if applicable,
- **Dependencies:** any dependencies required for this change,
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` from the root
of the package you've modified to check this locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc: https://python.langchain.com/docs/contributing/
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
-->
- **Description: changes to you.com files**
- general cleanup
- adds community/utilities/you.py, moving bulk of code from retriever ->
utility
- removes `snippet` as endpoint
- adds `news` as endpoint
- adds more tests
<s>**Description: update community MAKE file**
- adds `integration_tests`
- adds `coverage`</s>
- **Issue:** the issue # it fixes if applicable,
- [For New Contributors: Update Integration
Documentation](https://github.com/langchain-ai/langchain/issues/15664#issuecomment-1920099868)
- **Dependencies:** n/a
- **Twitter handle:** @scottnath
- **Mastodon handle:** scottnath@mastodon.social
---------
Co-authored-by: Bagatur <baskaryan@gmail.com>
2024-02-08 21:47:50 +00:00
|
|
|
import responses
|
2023-10-05 20:48:11 +00:00
|
|
|
|
2023-12-11 21:53:30 +00:00
|
|
|
from langchain_community.retrievers.you import YouRetriever
|
2023-10-05 20:48:11 +00:00
|
|
|
|
community: Add you.com utility, update you retriever integration docs (#17014)
<!-- Thank you for contributing to LangChain!
Please title your PR "<package>: <description>", where <package> is
whichever of langchain, community, core, experimental, etc. is being
modified.
Replace this entire comment with:
- **Description:** a description of the change,
- **Issue:** the issue # it fixes if applicable,
- **Dependencies:** any dependencies required for this change,
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` from the root
of the package you've modified to check this locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc: https://python.langchain.com/docs/contributing/
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
-->
- **Description: changes to you.com files**
- general cleanup
- adds community/utilities/you.py, moving bulk of code from retriever ->
utility
- removes `snippet` as endpoint
- adds `news` as endpoint
- adds more tests
<s>**Description: update community MAKE file**
- adds `integration_tests`
- adds `coverage`</s>
- **Issue:** the issue # it fixes if applicable,
- [For New Contributors: Update Integration
Documentation](https://github.com/langchain-ai/langchain/issues/15664#issuecomment-1920099868)
- **Dependencies:** n/a
- **Twitter handle:** @scottnath
- **Mastodon handle:** scottnath@mastodon.social
---------
Co-authored-by: Bagatur <baskaryan@gmail.com>
2024-02-08 21:47:50 +00:00
|
|
|
from ..utilities.test_you import (
|
|
|
|
LIMITED_PARSED_OUTPUT,
|
|
|
|
MOCK_PARSED_OUTPUT,
|
|
|
|
MOCK_RESPONSE_RAW,
|
|
|
|
NEWS_RESPONSE_PARSED,
|
|
|
|
NEWS_RESPONSE_RAW,
|
|
|
|
TEST_ENDPOINT,
|
|
|
|
)
|
|
|
|
|
2023-10-05 20:48:11 +00:00
|
|
|
|
|
|
|
class TestYouRetriever:
|
community: Add you.com utility, update you retriever integration docs (#17014)
<!-- Thank you for contributing to LangChain!
Please title your PR "<package>: <description>", where <package> is
whichever of langchain, community, core, experimental, etc. is being
modified.
Replace this entire comment with:
- **Description:** a description of the change,
- **Issue:** the issue # it fixes if applicable,
- **Dependencies:** any dependencies required for this change,
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` from the root
of the package you've modified to check this locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc: https://python.langchain.com/docs/contributing/
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
-->
- **Description: changes to you.com files**
- general cleanup
- adds community/utilities/you.py, moving bulk of code from retriever ->
utility
- removes `snippet` as endpoint
- adds `news` as endpoint
- adds more tests
<s>**Description: update community MAKE file**
- adds `integration_tests`
- adds `coverage`</s>
- **Issue:** the issue # it fixes if applicable,
- [For New Contributors: Update Integration
Documentation](https://github.com/langchain-ai/langchain/issues/15664#issuecomment-1920099868)
- **Dependencies:** n/a
- **Twitter handle:** @scottnath
- **Mastodon handle:** scottnath@mastodon.social
---------
Co-authored-by: Bagatur <baskaryan@gmail.com>
2024-02-08 21:47:50 +00:00
|
|
|
@responses.activate
|
2023-10-05 20:48:11 +00:00
|
|
|
def test_get_relevant_documents(self) -> None:
|
community: Add you.com utility, update you retriever integration docs (#17014)
<!-- Thank you for contributing to LangChain!
Please title your PR "<package>: <description>", where <package> is
whichever of langchain, community, core, experimental, etc. is being
modified.
Replace this entire comment with:
- **Description:** a description of the change,
- **Issue:** the issue # it fixes if applicable,
- **Dependencies:** any dependencies required for this change,
- **Twitter handle:** we announce bigger features on Twitter. If your PR
gets announced, and you'd like a mention, we'll gladly shout you out!
Please make sure your PR is passing linting and testing before
submitting. Run `make format`, `make lint` and `make test` from the root
of the package you've modified to check this locally.
See contribution guidelines for more information on how to write/run
tests, lint, etc: https://python.langchain.com/docs/contributing/
If you're adding a new integration, please include:
1. a test for the integration, preferably unit tests that do not rely on
network access,
2. an example notebook showing its use. It lives in
`docs/docs/integrations` directory.
If no one reviews your PR within a few days, please @-mention one of
@baskaryan, @eyurtsev, @hwchase17.
-->
- **Description: changes to you.com files**
- general cleanup
- adds community/utilities/you.py, moving bulk of code from retriever ->
utility
- removes `snippet` as endpoint
- adds `news` as endpoint
- adds more tests
<s>**Description: update community MAKE file**
- adds `integration_tests`
- adds `coverage`</s>
- **Issue:** the issue # it fixes if applicable,
- [For New Contributors: Update Integration
Documentation](https://github.com/langchain-ai/langchain/issues/15664#issuecomment-1920099868)
- **Dependencies:** n/a
- **Twitter handle:** @scottnath
- **Mastodon handle:** scottnath@mastodon.social
---------
Co-authored-by: Bagatur <baskaryan@gmail.com>
2024-02-08 21:47:50 +00:00
|
|
|
responses.add(
|
|
|
|
responses.GET, f"{TEST_ENDPOINT}/search", json=MOCK_RESPONSE_RAW, status=200
|
|
|
|
)
|
|
|
|
query = "Test query text"
|
|
|
|
you_wrapper = YouRetriever(ydc_api_key="test")
|
|
|
|
results = you_wrapper.get_relevant_documents(query)
|
|
|
|
expected_result = MOCK_PARSED_OUTPUT
|
|
|
|
assert results == expected_result
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_invoke(self) -> None:
|
|
|
|
responses.add(
|
|
|
|
responses.GET, f"{TEST_ENDPOINT}/search", json=MOCK_RESPONSE_RAW, status=200
|
|
|
|
)
|
|
|
|
query = "Test query text"
|
|
|
|
you_wrapper = YouRetriever(ydc_api_key="test")
|
|
|
|
results = you_wrapper.invoke(query)
|
|
|
|
expected_result = MOCK_PARSED_OUTPUT
|
|
|
|
assert results == expected_result
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_invoke_max_docs(self) -> None:
|
|
|
|
responses.add(
|
|
|
|
responses.GET, f"{TEST_ENDPOINT}/search", json=MOCK_RESPONSE_RAW, status=200
|
|
|
|
)
|
|
|
|
query = "Test query text"
|
|
|
|
you_wrapper = YouRetriever(k=2, ydc_api_key="test")
|
|
|
|
results = you_wrapper.invoke(query)
|
|
|
|
expected_result = [MOCK_PARSED_OUTPUT[0], MOCK_PARSED_OUTPUT[1]]
|
|
|
|
assert results == expected_result
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_invoke_limit_snippets(self) -> None:
|
|
|
|
responses.add(
|
|
|
|
responses.GET, f"{TEST_ENDPOINT}/search", json=MOCK_RESPONSE_RAW, status=200
|
|
|
|
)
|
|
|
|
|
|
|
|
query = "Test query text"
|
|
|
|
you_wrapper = YouRetriever(n_snippets_per_hit=1, ydc_api_key="test")
|
|
|
|
results = you_wrapper.results(query)
|
|
|
|
expected_result = LIMITED_PARSED_OUTPUT
|
|
|
|
assert results == expected_result
|
|
|
|
|
|
|
|
@responses.activate
|
|
|
|
def test_invoke_news(self) -> None:
|
|
|
|
responses.add(
|
|
|
|
responses.GET, f"{TEST_ENDPOINT}/news", json=NEWS_RESPONSE_RAW, status=200
|
|
|
|
)
|
|
|
|
|
|
|
|
query = "Test news text"
|
|
|
|
# ensure limit on number of docs returned
|
|
|
|
you_wrapper = YouRetriever(endpoint_type="news", ydc_api_key="test")
|
|
|
|
results = you_wrapper.results(query)
|
|
|
|
expected_result = NEWS_RESPONSE_PARSED
|
|
|
|
assert results == expected_result
|
2024-03-03 22:30:05 +00:00
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_aget_relevant_documents(self) -> None:
|
|
|
|
instance = YouRetriever(ydc_api_key="test_api_key")
|
|
|
|
|
|
|
|
# Mock response object to simulate aiohttp response
|
|
|
|
mock_response = AsyncMock()
|
|
|
|
mock_response.__aenter__.return_value = (
|
|
|
|
mock_response # Make the context manager return itself
|
|
|
|
)
|
|
|
|
mock_response.__aexit__.return_value = None # No value needed for exit
|
|
|
|
mock_response.status = 200
|
|
|
|
mock_response.json = AsyncMock(return_value=MOCK_RESPONSE_RAW)
|
|
|
|
|
|
|
|
# Patch the aiohttp.ClientSession object
|
|
|
|
with patch("aiohttp.ClientSession.get", return_value=mock_response):
|
|
|
|
results = await instance.aget_relevant_documents("test query")
|
|
|
|
assert results == MOCK_PARSED_OUTPUT
|
|
|
|
|
|
|
|
@pytest.mark.asyncio
|
|
|
|
async def test_ainvoke(self) -> None:
|
|
|
|
instance = YouRetriever(ydc_api_key="test_api_key")
|
|
|
|
|
|
|
|
# Mock response object to simulate aiohttp response
|
|
|
|
mock_response = AsyncMock()
|
|
|
|
mock_response.__aenter__.return_value = (
|
|
|
|
mock_response # Make the context manager return itself
|
|
|
|
)
|
|
|
|
mock_response.__aexit__.return_value = None # No value needed for exit
|
|
|
|
mock_response.status = 200
|
|
|
|
mock_response.json = AsyncMock(return_value=MOCK_RESPONSE_RAW)
|
|
|
|
|
|
|
|
# Patch the aiohttp.ClientSession object
|
|
|
|
with patch("aiohttp.ClientSession.get", return_value=mock_response):
|
|
|
|
results = await instance.ainvoke("test query")
|
|
|
|
assert results == MOCK_PARSED_OUTPUT
|