diff --git a/projects/pgai/tests/vectorizer/cassettes/test_recursive_character_splitting.yaml b/projects/pgai/tests/vectorizer/cassettes/test_recursive_character_splitting.yaml new file mode 100644 index 000000000..e5746cf77 --- /dev/null +++ b/projects/pgai/tests/vectorizer/cassettes/test_recursive_character_splitting.yaml @@ -0,0 +1,881 @@ +interactions: +- request: + body: '{"input": [[38255, 311, 13257, 21579], [22333, 6975, 374, 264, 27084, 315, + 21075, 11478, 430, 24400, 389, 828, 323, 198, 278, 19517, 13], [278, 19517, + 627, 2181, 20682, 6067, 311, 4048, 323, 7417, 505, 3217, 13], [1622, 76872, + 512, 16, 13, 62924, 4147, 21579, 198, 17, 13, 1252, 13066, 79090, 21579, 198, + 18, 13, 47169, 11167, 21579], [4959, 955, 706, 1202, 1866, 5016, 8522, 323, + 81898, 13], [2028, 374, 264, 24210, 1772, 430, 13434, 956, 1205, 45473, 13]], + "model": "text-embedding-ada-002", "encoding_format": "float"}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate + connection: + - keep-alive + content-length: + - '521' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.53.0 + x-stainless-arch: + - arm64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - MacOS + x-stainless-package-version: + - 1.53.0 + x-stainless-retry-count: + - '0' + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.10.15 + method: POST + uri: https://api.openai.com/v1/embeddings + response: + body: + string: !!binary | + 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 + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8df8464f1f97842f-YVR + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Fri, 08 Nov 2024 20:22:21 GMT + Server: + - cloudflare + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-allow-origin: + - '*' + access-control-expose-headers: + - X-Request-ID + alt-svc: + - h3=":443"; ma=86400 + openai-model: + - text-embedding-ada-002 + openai-organization: + - timescale-team + openai-processing-ms: + - '176' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=31536000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '5000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '4999923' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_0e0e3dab0eb92dc9f8657aac0825f320 + status: + code: 200 + message: OK +version: 1 diff --git a/projects/pgai/tests/vectorizer/conftest.py b/projects/pgai/tests/vectorizer/conftest.py index 84e54816e..5532b802a 100644 --- a/projects/pgai/tests/vectorizer/conftest.py +++ b/projects/pgai/tests/vectorizer/conftest.py @@ -1,5 +1,6 @@ import os from pathlib import Path +from typing import Any import pytest import tiktoken @@ -29,6 +30,15 @@ def __env_setup(): # type:ignore os.environ.update(original_env) +def remove_set_cookie_header(response: dict[str, Any]): + headers = response["headers"] + headers_to_remove = ["set-cookie", "Set-Cookie"] + for header in headers_to_remove: + if header in headers: + del headers[header] + return response + + @pytest.fixture(scope="session") def vcr_(): cassette_library_dir = Path(__file__).parent.joinpath("cassettes") @@ -39,6 +49,7 @@ def vcr_(): record_mode=vcr.mode.ONCE, filter_headers=["authorization"], match_on=["method", "scheme", "host", "port", "path", "query", "body"], + before_record_response=remove_set_cookie_header, ) diff --git a/projects/pgai/tests/vectorizer/test_vectorizer_cli.py b/projects/pgai/tests/vectorizer/test_vectorizer_cli.py index 7edb24944..25ae2f361 100644 --- a/projects/pgai/tests/vectorizer/test_vectorizer_cli.py +++ b/projects/pgai/tests/vectorizer/test_vectorizer_cli.py @@ -499,3 +499,107 @@ def test_vectorizer_picks_up_new_vectorizer( else: break process.terminate() + + +@pytest.mark.parametrize( + "test_params", + [ + ( + 2, + 1, + 2, + "chunking_recursive_character_text_splitter('content', 100, 20," + " separators => array[E'\\n\\n', E'\\n', ' '])", + "formatting_python_template('$chunk')", + ) + ], +) +def test_recursive_character_splitting( + cli_db: tuple[PostgresContainer, Connection], + cli_db_url: str, + configured_vectorizer_and_source_table: int, + monkeypatch: pytest.MonkeyPatch, + vcr_: Any, +): + """Test that recursive character splitting correctly chunks + content based on natural boundaries""" + _, conn = cli_db + + # Given content with natural splitting points + sample_content = """Introduction to Machine Learning + +Machine learning is a subset of artificial intelligence that focuses on data and +algorithms. +It enables systems to learn and improve from experience. + +Key Concepts: +1. Supervised Learning +2. Unsupervised Learning +3. Reinforcement Learning + +Each type has its own unique applications and methodologies.""" + + shorter_content = "This is a shorter post that shouldn't need splitting." + + # Update the test data with our structured content + with conn.cursor(row_factory=dict_row) as cur: + cur.execute("UPDATE blog SET content = %s WHERE id = 1", (sample_content,)) + cur.execute("UPDATE blog SET content = %s WHERE id = 2", (shorter_content,)) + + monkeypatch.setenv("OPENAI_API_KEY", "test-key") + + # When running the worker + with vcr_.use_cassette("test_recursive_character_splitting.yaml"): + result = CliRunner().invoke( + vectorizer_worker, + [ + "--db-url", + cli_db_url, + "--once", + "--vectorizer-id", + str(configured_vectorizer_and_source_table), + ], + catch_exceptions=False, + ) + + assert result.exit_code == 0 + + # Then verify the chunks were created correctly + with conn.cursor(row_factory=dict_row) as cur: + cur.execute(""" + SELECT id, chunk_seq, chunk + FROM blog_embedding_store + ORDER BY id, chunk_seq + """) + chunks = cur.fetchall() + + # Verify we got multiple chunks for the longer content + first_doc_chunks = [c for c in chunks if c["id"] == 1] + assert ( + len(first_doc_chunks) > 1 + ), "Long document should be split into multiple chunks" + + # Verify chunk boundaries align with natural breaks + assert any( + "Introduction to Machine Learning" in c["chunk"] for c in first_doc_chunks + ), "Should have a chunk starting with the title" + + assert not all( + "Introduction to Machine Learning" in c["chunk"] for c in first_doc_chunks + ), "Not all chunks should start with the title" + + assert any( + "Key Concepts:" in c["chunk"] for c in first_doc_chunks + ), "Should have a chunk containing the key concepts section" + + # Verify shorter content remains as single chunk + second_doc_chunks = [c for c in chunks if c["id"] == 2] + assert len(second_doc_chunks) == 1, "Short document should be a single chunk" + assert second_doc_chunks[0]["chunk"] == shorter_content + + # Verify chunk sequences are correct + for doc_chunks in [first_doc_chunks, second_doc_chunks]: + sequences = [c["chunk_seq"] for c in doc_chunks] + assert sequences == list( + range(len(sequences)) + ), "Chunk sequences should be sequential starting from 0"