From 785d718ffd0a9f25667e18e4228f5450d4ea1ac6 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Mon, 23 Sep 2024 11:25:38 -0700 Subject: [PATCH 001/179] chore: Add timeout for tox CI tests #2450 --- .github/workflows/test.yaml | 1 + 1 file changed, 1 insertion(+) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index bd2c92b7ffe..e0918332724 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -149,6 +149,7 @@ jobs: trace-tests: name: Trace tox tests + timeout-minutes: 10 runs-on: ubuntu-latest strategy: matrix: From 6e95acb37772821d14dc86aa34b19690842d1205 Mon Sep 17 00:00:00 2001 From: Andrew Truong Date: Mon, 23 Sep 2024 14:55:05 -0400 Subject: [PATCH 002/179] chore(weave): Re-enable missing Clickhouse tests (#2449) Co-authored-by: Tim Sweeney --- .github/workflows/test.yaml | 2 +- weave/conftest.py | 8 ++++---- weave/trace_server/calls_query_builder.py | 2 +- 3 files changed, 6 insertions(+), 6 deletions(-) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index e0918332724..a37bcf9e120 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -213,7 +213,7 @@ jobs: WEAVE_SENTRY_ENV: ci CI: 1 WB_SERVER_HOST: http://wandbservice - WF_CLICKHOUSE_HOST: weave_clickhouse + WF_CLICKHOUSE_HOST: localhost WEAVE_SERVER_DISABLE_ECOSYSTEM: 1 run: | tox -e ${{ matrix.tox-shard }}-py${{ matrix.python-version-major }}${{ matrix.python-version-minor }} -- \ diff --git a/weave/conftest.py b/weave/conftest.py index bf65c6a1cc9..c8135fe74a3 100644 --- a/weave/conftest.py +++ b/weave/conftest.py @@ -64,6 +64,10 @@ def pytest_sessionfinish(session, exitstatus): def pytest_collection_modifyitems(config, items): # Add the weave_client marker to all tests that have a client fixture + for item in items: + if "client" in item.fixturenames: + item.add_marker(pytest.mark.weave_client) + # Get the job number from environment variable (0 for even tests, 1 for odd tests) job_num = config.getoption("--job-num", default=None) if job_num is None: @@ -78,10 +82,6 @@ def pytest_collection_modifyitems(config, items): items[:] = selected_items - for item in items: - if "client" in item.fixturenames: - item.add_marker(pytest.mark.weave_client) - @pytest.fixture(autouse=True) def throw_on_error(): diff --git a/weave/trace_server/calls_query_builder.py b/weave/trace_server/calls_query_builder.py index e3fbe2aad26..76e94d27d61 100644 --- a/weave/trace_server/calls_query_builder.py +++ b/weave/trace_server/calls_query_builder.py @@ -179,7 +179,7 @@ class OrderField(BaseModel): def as_sql(self, pb: ParamBuilder, table_alias: str) -> str: options: list[typing.Tuple[typing.Optional[tsi_query.CastTo], str]] - if isinstance(self.field, CallsMergedDynamicField): + if isinstance(self.field, (QueryBuilderDynamicField, CallsMergedDynamicField)): # Prioritize existence, then cast to double, then str options = [ ("exists", "desc"), From 7d30f505fd1cdd1248f2bc81b70e53e37b84bc37 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Mon, 23 Sep 2024 16:13:30 -0500 Subject: [PATCH 003/179] fix: chat view not showing when it should (#2451) --- .../Home/Browse3/pages/CallPage/CallChat.tsx | 6 +++++- 1 file changed, 5 insertions(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallChat.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallChat.tsx index ff5e71247f9..f0bfac0b5fa 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallChat.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallChat.tsx @@ -127,7 +127,11 @@ export const isMessage = (message: any): boolean => { if (!('content' in message) && !('tool_calls' in message)) { return false; } - if ('content' in message && !isMessageContent(message.content)) { + if ( + 'content' in message && + message.content !== null && + !isMessageContent(message.content) + ) { return false; } if ('tool_calls' in message && !isToolCalls(message.tool_calls)) { From 259debe99cfcf60aae26895a25028ab2edef7f91 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Mon, 23 Sep 2024 21:17:52 +0000 Subject: [PATCH 004/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index fa69189fd1d..7db8c96c22a 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 68126e3a083..44eee90d555 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -663f517972b0de7b63feddd804cb9e4c3ddae126 +a262d9df422c28d75011669bc2baa883fe65ffde From dd38917656be17a4d7fb523eefdeedaeb4bc51f0 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Mon, 23 Sep 2024 15:40:06 -0700 Subject: [PATCH 005/179] fix: LiteLLM Cost Logging (#2447) * initialized tests * init * init * init * init * possibly done * revert prior change * cleanup * cleanup * comments --- weave/integrations/litellm/litellm_test.py | 61 ++++++++++++---------- weave/integrations/openai/openai_sdk.py | 44 +++++++++++++++- 2 files changed, 76 insertions(+), 29 deletions(-) diff --git a/weave/integrations/litellm/litellm_test.py b/weave/integrations/litellm/litellm_test.py index 3663e71eb43..24fa4503ea9 100644 --- a/weave/integrations/litellm/litellm_test.py +++ b/weave/integrations/litellm/litellm_test.py @@ -1,4 +1,5 @@ import os +from importlib.metadata import version from typing import Any, Generator import litellm @@ -11,12 +12,11 @@ # This PR: # https://github.com/BerriAI/litellm/commit/fe2aa706e8ff4edbcd109897e5da6b83ef6ad693 -# Changed the output format for OpenAI to use APIResponse when using async. -# We should fix support for this, but for now we will just skip the test -# parts that are affected by this change to unblock CI -USES_RAW_OPENAI_RESPONSE_IN_ASYNC = ( - semver.compare(litellm._version.version, "1.42.11") > 0 -) +# Changed the output format for OpenAI to use APIResponse. +# We can handle this in non-streaming mode, but in streaming mode, we +# have no way of correctly capturing the output and not messing up the +# users' code (that i can see). In these cases, model cost is not captured. +USES_RAW_OPENAI_RESPONSE = semver.compare(version("litellm"), "1.42.11") > 0 class Nearly: @@ -74,16 +74,13 @@ def test_litellm_quickstart( assert output["created"] == Nearly(chat_response.created) summary = call.summary assert summary is not None - if not USES_RAW_OPENAI_RESPONSE_IN_ASYNC: - model_usage = summary["usage"][output["model"]] - assert model_usage["requests"] == 1 - assert ( - output["usage"]["completion_tokens"] - == model_usage["completion_tokens"] - == 31 - ) - assert output["usage"]["prompt_tokens"] == model_usage["prompt_tokens"] == 13 - assert output["usage"]["total_tokens"] == model_usage["total_tokens"] == 44 + model_usage = summary["usage"][output["model"]] + assert model_usage["requests"] == 1 + assert ( + output["usage"]["completion_tokens"] == model_usage["completion_tokens"] == 31 + ) + assert output["usage"]["prompt_tokens"] == model_usage["prompt_tokens"] == 13 + assert output["usage"]["total_tokens"] == model_usage["total_tokens"] == 44 @pytest.mark.skip_clickhouse_client # TODO:VCR recording does not seem to allow us to make requests to the clickhouse db in non-recording mode @@ -118,16 +115,14 @@ async def test_litellm_quickstart_async( assert output["created"] == Nearly(chat_response.created) summary = call.summary assert summary is not None - if not USES_RAW_OPENAI_RESPONSE_IN_ASYNC: - model_usage = summary["usage"][output["model"]] - assert model_usage["requests"] == 1 - assert ( - output["usage"]["completion_tokens"] - == model_usage["completion_tokens"] - == 35 - ) - assert output["usage"]["prompt_tokens"] == model_usage["prompt_tokens"] == 13 - assert output["usage"]["total_tokens"] == model_usage["total_tokens"] == 48 + + model_usage = summary["usage"][output["model"]] + assert model_usage["requests"] == 1 + assert ( + output["usage"]["completion_tokens"] == model_usage["completion_tokens"] == 35 + ) + assert output["usage"]["prompt_tokens"] == model_usage["prompt_tokens"] == 13 + assert output["usage"]["total_tokens"] == model_usage["total_tokens"] == 48 @pytest.mark.skip_clickhouse_client # TODO:VCR recording does not seem to allow us to make requests to the clickhouse db in non-recording mode @@ -165,7 +160,12 @@ def test_litellm_quickstart_stream( assert output["created"] == Nearly(chunk.created) summary = call.summary assert summary is not None - if not USES_RAW_OPENAI_RESPONSE_IN_ASYNC: + + # We are stuck here: + # 1. LiteLLM uses raw responses, which we can't wrap in our iterator + # 2. They don't even capture token usage correctly, so this info is + # not available for now. + if not USES_RAW_OPENAI_RESPONSE: model_usage = summary["usage"][output["model"]] assert model_usage["requests"] == 1 assert model_usage["completion_tokens"] == 31 @@ -208,7 +208,12 @@ async def test_litellm_quickstart_stream_async( assert output["created"] == Nearly(chunk.created) summary = call.summary assert summary is not None - if not USES_RAW_OPENAI_RESPONSE_IN_ASYNC: + + # We are stuck here: + # 1. LiteLLM uses raw responses, which we can't wrap in our iterator + # 2. They don't even capture token usage correctly, so this info is + # not available for now. + if not USES_RAW_OPENAI_RESPONSE: model_usage = summary["usage"][output["model"]] assert model_usage["requests"] == 1 assert model_usage["completion_tokens"] == 41 diff --git a/weave/integrations/openai/openai_sdk.py b/weave/integrations/openai/openai_sdk.py index 208c72dd888..cc10d7032e4 100644 --- a/weave/integrations/openai/openai_sdk.py +++ b/weave/integrations/openai/openai_sdk.py @@ -10,6 +10,38 @@ from openai.types.chat import ChatCompletionChunk +def maybe_unwrap_api_response(value: typing.Any) -> typing.Any: + """If the caller requests a raw response, we unwrap the APIResponse object. + We take a very conservative approach to only unwrap the types we know about. + """ + maybe_value: typing.Any = None + try: + from openai._legacy_response import LegacyAPIResponse + + if isinstance(value, LegacyAPIResponse): + maybe_value = value.parse() + except: + pass + + try: + from openai._response import APIResponse + + if isinstance(value, APIResponse): + maybe_value = value.parse() + except: + pass + + try: + from openai.types.chat import ChatCompletion, ChatCompletionChunk + + if isinstance(maybe_value, (ChatCompletion, ChatCompletionChunk)): + return maybe_value + except: + pass + + return value + + def openai_on_finish_post_processor( value: typing.Optional["ChatCompletionChunk"], ) -> typing.Optional[typing.Dict]: @@ -24,6 +56,8 @@ def openai_on_finish_post_processor( Function, ) + value = maybe_unwrap_api_response(value) + def _get_function_call( function_call: typing.Optional[ChoiceDeltaFunctionCall], ) -> typing.Optional[FunctionCall]: @@ -232,7 +266,15 @@ def _process_chunk( # Unlike other integrations, streaming is based on input flag def should_use_accumulator(inputs: typing.Dict) -> bool: - return isinstance(inputs, dict) and bool(inputs.get("stream")) + return ( + isinstance(inputs, dict) + and bool(inputs.get("stream")) + # This is very critical. When `"X-Stainless-Raw-Response` is true, the response + # is an APIResponse object. This is very hard to mock/patch for the streaming use + # case, so we don't even try. + and not inputs.get("extra_headers", {}).get("X-Stainless-Raw-Response") + == "true" + ) def create_wrapper_sync( From 5b6aebf3f53963cc428417aa3bd41b21d3c52729 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Mon, 23 Sep 2024 15:54:21 -0700 Subject: [PATCH 006/179] fix: Ensure patching fails gracefully (#2448) * unpin cohete * unpin cohete * unpin cohere * lint * done * done * done * init * test fix * better tests * better tests * better tests * better tests * fixes * merged * damn lint --- weave/conftest.py | 7 + weave/tests/trace/test_tracing_resilience.py | 557 +++++++++++++++++++ weave/trace/async_job_queue.py | 8 + weave/trace/context.py | 20 + weave/trace/op.py | 22 +- weave/trace/op_extensions/accumulator.py | 50 +- weave/trace/op_extensions/log_once.py | 28 + weave/trace/patcher.py | 23 +- weave/trace/vals.py | 7 + weave/trace_server/async_batch_processor.py | 3 + 10 files changed, 716 insertions(+), 9 deletions(-) create mode 100644 weave/tests/trace/test_tracing_resilience.py create mode 100644 weave/trace/op_extensions/log_once.py diff --git a/weave/conftest.py b/weave/conftest.py index c8135fe74a3..2a49a1565f8 100644 --- a/weave/conftest.py +++ b/weave/conftest.py @@ -11,6 +11,7 @@ import weave from weave import context_state from weave.trace import weave_init +from weave.trace.context import raise_on_captured_errors from weave.trace_server import ( clickhouse_trace_server_batched, sqlite_trace_server, @@ -83,6 +84,12 @@ def pytest_collection_modifyitems(config, items): items[:] = selected_items +@pytest.fixture(autouse=True) +def always_raise_on_captured_errors(): + with raise_on_captured_errors(): + yield + + @pytest.fixture(autouse=True) def throw_on_error(): os.environ["WEAVE_VALUE_OR_ERROR_DEBUG"] = "true" diff --git a/weave/tests/trace/test_tracing_resilience.py b/weave/tests/trace/test_tracing_resilience.py new file mode 100644 index 00000000000..7ce27e719f8 --- /dev/null +++ b/weave/tests/trace/test_tracing_resilience.py @@ -0,0 +1,557 @@ +""" +The purpose of this test suite is to ensure that Weave can handle various types of errors that can occur during tracing. + +We should never be breaking the user's program with an error. +""" + +import importlib +from typing import Callable, Iterator + +# TODO: Test code capture resilience +# TODO: Test postprocess input/output resilience +import pytest + +import weave +from weave.trace import call_context +from weave.trace.context import raise_on_captured_errors +from weave.trace.op_extensions.accumulator import add_accumulator +from weave.trace.patcher import MultiPatcher, SymbolPatcher +from weave.trace_server import trace_server_interface as tsi + + +class TestException(Exception): + pass + + +def assert_no_current_call(): + assert call_context.get_current_call() is None + + +def test_resilience_to_user_code_errors(client): + def do_test(): + @weave.op + def throws(): + raise TestException("This is a test exception") + + throws() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + do_test() + + # The user's exception should be raised - even if we're not capturing errors + with raise_on_captured_errors(False): + with pytest.raises(TestException): + do_test() + + assert_no_current_call() + + +class ThrowingServer(tsi.TraceServerInterface): + # Call API + def call_start(self, req: tsi.CallStartReq) -> tsi.CallStartRes: + raise TestException("FAILURE!") + + def call_end(self, req: tsi.CallEndReq) -> tsi.CallEndRes: + raise TestException("FAILURE!") + + def call_read(self, req: tsi.CallReadReq) -> tsi.CallReadRes: + raise TestException("FAILURE!") + + def calls_query(self, req: tsi.CallsQueryReq) -> tsi.CallsQueryRes: + raise TestException("FAILURE!") + + def calls_query_stream(self, req: tsi.CallsQueryReq) -> Iterator[tsi.CallSchema]: + raise TestException("FAILURE!") + + def calls_delete(self, req: tsi.CallsDeleteReq) -> tsi.CallsDeleteRes: + raise TestException("FAILURE!") + + def calls_query_stats(self, req: tsi.CallsQueryStatsReq) -> tsi.CallsQueryStatsRes: + raise TestException("FAILURE!") + + def call_update(self, req: tsi.CallUpdateReq) -> tsi.CallUpdateRes: + raise TestException("FAILURE!") + + # Op API + def op_create(self, req: tsi.OpCreateReq) -> tsi.OpCreateRes: + raise TestException("FAILURE!") + + def op_read(self, req: tsi.OpReadReq) -> tsi.OpReadRes: + raise TestException("FAILURE!") + + def ops_query(self, req: tsi.OpQueryReq) -> tsi.OpQueryRes: + raise TestException("FAILURE!") + + # Cost API + def cost_create(self, req: tsi.CostCreateReq) -> tsi.CostCreateRes: + raise TestException("FAILURE!") + + def cost_query(self, req: tsi.CostQueryReq) -> tsi.CostQueryRes: + raise TestException("FAILURE!") + + def cost_purge(self, req: tsi.CostPurgeReq) -> tsi.CostPurgeRes: + raise TestException("FAILURE!") + + # Obj API + def obj_create(self, req: tsi.ObjCreateReq) -> tsi.ObjCreateRes: + raise TestException("FAILURE!") + + def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: + raise TestException("FAILURE!") + + def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: + raise TestException("FAILURE!") + + def table_create(self, req: tsi.TableCreateReq) -> tsi.TableCreateRes: + raise TestException("FAILURE!") + + def table_update(self, req: tsi.TableUpdateReq) -> tsi.TableUpdateRes: + raise TestException("FAILURE!") + + def table_query(self, req: tsi.TableQueryReq) -> tsi.TableQueryRes: + raise TestException("FAILURE!") + + def refs_read_batch(self, req: tsi.RefsReadBatchReq) -> tsi.RefsReadBatchRes: + raise TestException("FAILURE!") + + def file_create(self, req: tsi.FileCreateReq) -> tsi.FileCreateRes: + raise TestException("FAILURE!") + + def file_content_read(self, req: tsi.FileContentReadReq) -> tsi.FileContentReadRes: + raise TestException("FAILURE!") + + def feedback_create(self, req: tsi.FeedbackCreateReq) -> tsi.FeedbackCreateRes: + raise TestException("FAILURE!") + + def feedback_query(self, req: tsi.FeedbackQueryReq) -> tsi.FeedbackQueryRes: + raise TestException("FAILURE!") + + def feedback_purge(self, req: tsi.FeedbackPurgeReq) -> tsi.FeedbackPurgeRes: + raise TestException("FAILURE!") + + +@pytest.mark.skip( + "TODO: Unskip after Tim's backgrounding PR goes in (add one for the entire eval workflow)" +) +def test_resilience_to_server_errors(client): + client.server = ThrowingServer() + + def do_test(): + @weave.op + def simple_op(): + return "hello" + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert res == "hello" + + assert_no_current_call() + + +def test_resilience_to_patcher_errors(client): + class Module: + def method(self): + return 0 + + def custom_patcher(m: Callable): + raise TestException("FAILURE!") + + def do_test(): + test_patcher = MultiPatcher( + [ + SymbolPatcher( + lambda: Module, + "method", + custom_patcher, + ) + ] + ) + + test_patcher.attempt_patch() + + return Module().method() + + res = do_test() + assert res == 0 + + assert_no_current_call() + + +def test_resilience_to_output_handler_errors(client): + def do_test(): + @weave.op + def simple_op(): + return "hello" + + def on_output_handler(*args, **kwargs): + raise TestException("FAILURE!") + + simple_op._set_on_output_handler(on_output_handler) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert res == "hello" + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_output_handler_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + return "hello" + + def on_output_handler(*args, **kwargs): + raise TestException("FAILURE!") + + simple_op._set_on_output_handler(on_output_handler) + + return await simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + await do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = await do_test() + assert res == "hello" + + assert_no_current_call() + + +def test_resilience_to_accumulator_make_accumulator_errors(client): + def do_test(): + @weave.op + def simple_op(): + yield from [1, 2, 3] + + def make_accumulator(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert list(res) == [1, 2, 3] + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_accumulator_make_accumulator_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + yield 1 + yield 2 + yield 3 + + def make_accumulator(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + await do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = await do_test() + assert [item async for item in res] == [1, 2, 3] + + assert_no_current_call() + + +def test_resilience_to_accumulator_accumulation_errors(client): + def do_test(): + @weave.op + def simple_op(): + yield from [1, 2, 3] + + def make_accumulator(*args, **kwargs): + def accumulate(*args, **kwargs): + raise TestException("FAILURE!") + + return accumulate + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + list(do_test()) + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert list(res) == [1, 2, 3] + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_accumulator_accumulation_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + yield 1 + yield 2 + yield 3 + + def make_accumulator(*args, **kwargs): + def accumulate(*args, **kwargs): + raise TestException("FAILURE!") + + return accumulate + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + res = await do_test() + l = [item async for item in res] + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = await do_test() + assert [item async for item in res] == [1, 2, 3] + + assert_no_current_call() + + +def test_resilience_to_accumulator_should_accumulate_errors(client): + def do_test(): + @weave.op + def simple_op(): + yield from [1, 2, 3] + + def make_accumulator(*args, **kwargs): + def accumulate(*args, **kwargs): + return {} + + return accumulate + + def should_accumulate(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator( + simple_op, + make_accumulator=make_accumulator, + should_accumulate=should_accumulate, + ) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + list(do_test()) + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert list(res) == [1, 2, 3] + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_accumulator_should_accumulate_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + yield 1 + yield 2 + yield 3 + + def make_accumulator(*args, **kwargs): + async def accumulate(*args, **kwargs): + return {} + + return accumulate + + def should_accumulate(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator( + simple_op, + make_accumulator=make_accumulator, + should_accumulate=should_accumulate, + ) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + await do_test() + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = await do_test() + assert [item async for item in res] == [1, 2, 3] + + assert_no_current_call() + + +def test_resilience_to_accumulator_on_finish_post_processor_errors(client): + def do_test(): + @weave.op + def simple_op(): + yield from [1, 2, 3] + + def make_accumulator(*args, **kwargs): + def accumulate(*args, **kwargs): + return {} + + return accumulate + + def on_finish_post_processor(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator( + simple_op, + make_accumulator=make_accumulator, + on_finish_post_processor=on_finish_post_processor, + ) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + list(do_test()) + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = do_test() + assert list(res) == [1, 2, 3] + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_accumulator_on_finish_post_processor_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + yield 1 + yield 2 + yield 3 + + def make_accumulator(*args, **kwargs): + async def accumulate(*args, **kwargs): + return {} + + return accumulate + + def on_finish_post_processor(*args, **kwargs): + raise TestException("FAILURE!") + + add_accumulator( + simple_op, + make_accumulator=make_accumulator, + on_finish_post_processor=on_finish_post_processor, + ) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + res = await do_test() + l = [item async for item in res] + + # We should gracefully handle the error and return a value + with raise_on_captured_errors(False): + res = await do_test() + assert [item async for item in res] == [1, 2, 3] + + assert_no_current_call() + + +def test_resilience_to_accumulator_internal_errors(client): + def do_test(): + @weave.op + def simple_op(): + yield 1 + raise TestException("FAILURE!") + + def make_accumulator(*args, **kwargs): + def accumulate(*args, **kwargs): + return {} + + return accumulate + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + list(do_test()) + + # User errors should still be raised + with raise_on_captured_errors(False): + with pytest.raises(TestException): + list(do_test()) + + assert_no_current_call() + + +@pytest.mark.asyncio +async def test_resilience_to_accumulator_internal_errors_async(client): + async def do_test(): + @weave.op + async def simple_op(): + yield 1 + raise TestException("FAILURE!") + + def make_accumulator(*args, **kwargs): + async def accumulate(*args, **kwargs): + return {} + + return accumulate + + add_accumulator(simple_op, make_accumulator=make_accumulator) + + return simple_op() + + # The user's exception should be raised - even if we're capturing errors + with pytest.raises(TestException): + res = await do_test() + l = [item async for item in res] + + # User errors should still be raised + with raise_on_captured_errors(False): + with pytest.raises(TestException): + res = await do_test() + l = [item async for item in res] + + assert_no_current_call() diff --git a/weave/trace/async_job_queue.py b/weave/trace/async_job_queue.py index 3c4e757adcf..07c08cbe3ca 100644 --- a/weave/trace/async_job_queue.py +++ b/weave/trace/async_job_queue.py @@ -5,6 +5,8 @@ from concurrent.futures import Future from typing import Any, Callable, TypeVar +from weave.trace.context import get_raise_on_captured_errors + T = TypeVar("T") MAX_WORKER_DEFAULT = 2**3 # 8 workers to not overwhelm the DB @@ -84,6 +86,8 @@ def callback(f: Future[T]) -> None: exception = f.exception() if exception: logger.error(f"Job failed with exception: {exception}") + if get_raise_on_captured_errors(): + raise future.add_done_callback(callback) return future @@ -94,6 +98,8 @@ def _at_exit_handler(self) -> None: self.executor.shutdown(wait=True) except Exception as e: logger.error(f"Error shutting down executor: {e}") + if get_raise_on_captured_errors(): + raise def flush(self) -> None: """Waits for all currently submitted jobs to complete. @@ -110,3 +116,5 @@ def flush(self) -> None: future.result() except Exception as e: logger.error(f"Job failed during flush: {e}") + if get_raise_on_captured_errors(): + raise diff --git a/weave/trace/context.py b/weave/trace/context.py index 22002f4dab7..d4667b67775 100644 --- a/weave/trace/context.py +++ b/weave/trace/context.py @@ -1,6 +1,26 @@ +import contextlib import contextvars import typing call_attributes: contextvars.ContextVar[typing.Dict[str, typing.Any]] = ( contextvars.ContextVar("call_attributes", default={}) ) + +test_only_raise_on_captured_errors: contextvars.ContextVar[bool] = ( + contextvars.ContextVar("test_only_raise_on_captured_errors", default=False) +) + + +@contextlib.contextmanager +def raise_on_captured_errors( + should_raise: bool = True, +) -> typing.Generator[None, None, None]: + token = test_only_raise_on_captured_errors.set(should_raise) + try: + yield + finally: + test_only_raise_on_captured_errors.reset(token) + + +def get_raise_on_captured_errors() -> bool: + return test_only_raise_on_captured_errors.get(False) diff --git a/weave/trace/op.py b/weave/trace/op.py index 7ffec8b1715..1fe9e3ac989 100644 --- a/weave/trace/op.py +++ b/weave/trace/op.py @@ -1,6 +1,7 @@ """Defines the Op protocol and related functions.""" import inspect +import logging import sys import typing from functools import partial, wraps @@ -23,10 +24,13 @@ from weave.legacy.weave import context_state from weave.trace import box, call_context, settings from weave.trace.client_context import weave_client as weave_client_context -from weave.trace.context import call_attributes +from weave.trace.context import call_attributes, get_raise_on_captured_errors from weave.trace.errors import OpCallError +from weave.trace.op_extensions.log_once import log_once from weave.trace.refs import ObjectRef +logger = logging.getLogger(__name__) + from .constants import TRACE_CALL_EMOJI if TYPE_CHECKING: @@ -236,7 +240,21 @@ def on_output(output: Any) -> Any: def process(res: Any) -> Any: res = box.box(res) - res = on_output(res) + try: + # Here we do a try/catch because we don't want to + # break the user process if we trip up on processing + # the output + res = on_output(res) + except Exception as e: + log_once(logger.error, f"Error capturing call output: {e}") + if get_raise_on_captured_errors(): + raise + finally: + # Is there a better place for this? We want to ensure that even + # if the final output fails to be captured, we still pop the call + # so we don't put future calls under the old call. + call_context.pop_call(call.id) + return res, call def handle_exception(e: Exception) -> Any: diff --git a/weave/trace/op_extensions/accumulator.py b/weave/trace/op_extensions/accumulator.py index fab4b7548a5..55b01fe8e2e 100644 --- a/weave/trace/op_extensions/accumulator.py +++ b/weave/trace/op_extensions/accumulator.py @@ -1,4 +1,5 @@ import atexit +import logging import weakref from typing import ( Any, @@ -14,7 +15,11 @@ Union, ) +from weave.trace.context import get_raise_on_captured_errors from weave.trace.op import FinishCallbackType, Op +from weave.trace.op_extensions.log_once import log_once + +logger = logging.getLogger(__name__) S = TypeVar("S") V = TypeVar("V") @@ -46,12 +51,28 @@ def __init__( def _call_on_close_once(self) -> None: if not self._on_finished_called: - self._on_close() # type: ignore + try: + self._on_close() # type: ignore + except Exception as e: + log_once( + logger.error, + f"Error finishing call - some logs may not be captured: {e}", + ) + if get_raise_on_captured_errors(): + raise self._on_finished_called = True def _call_on_error_once(self, e: Exception) -> None: if not self._on_finished_called: - self._on_error(e) + try: + self._on_error(e) + except Exception as e: + log_once( + logger.error, + f"Error finishing call with exception - some logs may not be captured: {e}", + ) + if get_raise_on_captured_errors(): + raise self._on_finished_called = True def __iter__(self) -> "_IteratorWrapper": @@ -64,7 +85,17 @@ def __next__(self) -> Generator[None, None, V]: ) try: value = next(self._iterator_or_ctx_manager) # type: ignore - self._on_yield(value) + try: + # Here we do a try/catch because we don't want to + # break the user process if we trip up on processing + # the yielded value + self._on_yield(value) + except Exception as e: + log_once( + logger.error, f"Error capturing yielded value for call output: {e}" + ) + if get_raise_on_captured_errors(): + raise return value except (StopIteration, StopAsyncIteration) as e: self._call_on_close_once() @@ -83,7 +114,18 @@ async def __anext__(self) -> Generator[None, None, V]: ) try: value = await self._iterator_or_ctx_manager.__anext__() # type: ignore - self._on_yield(value) + try: + self._on_yield(value) + # Here we do a try/catch because we don't want to + # break the user process if we trip up on processing + # the yielded value + except Exception as e: + log_once( + logger.error, + f"Error capturing async yielded value for call output: {e}", + ) + if get_raise_on_captured_errors(): + raise return value except (StopAsyncIteration, StopIteration) as e: self._call_on_close_once() diff --git a/weave/trace/op_extensions/log_once.py b/weave/trace/op_extensions/log_once.py new file mode 100644 index 00000000000..e217fda55b0 --- /dev/null +++ b/weave/trace/op_extensions/log_once.py @@ -0,0 +1,28 @@ +from typing import Callable + +LOG_ONCE_MESSAGE_SUFFIX = " (subsequent messages of this type will be suppressed)" +logged_messages = [] + + +def log_once(log_method: Callable[[str], None], message: str) -> None: + """Logs a message once, suppressing subsequent messages of the same type. This + is useful for notifying the user about errors without spamming the logs. + + This is mostly useful for cases where the same error message might occur many times. + For example, if an op fails to save, it is likely going to happen every time that op is + called. Or, if we have an error in our patched iterator, then it likely happens every time + we iterate over the result. This allows use to inform the user about the error without + clogging up their logs. + + Args: + log_method: The method to use to log the message. This should accept a string argument. + message: The message to log. + + Example: + ```python + log_once(logger.error, "Failed to save op") + ``` + """ + if message not in logged_messages: + log_method(message + LOG_ONCE_MESSAGE_SUFFIX) + logged_messages.append(message) diff --git a/weave/trace/patcher.py b/weave/trace/patcher.py index 49cbea05c01..aebec49e541 100644 --- a/weave/trace/patcher.py +++ b/weave/trace/patcher.py @@ -1,5 +1,10 @@ +import logging from typing import Any, Callable, Optional, Sequence +from weave.trace.context import get_raise_on_captured_errors + +logger = logging.getLogger(__name__) + class Patcher: def attempt_patch(self) -> bool: @@ -16,13 +21,25 @@ def __init__(self, patchers: Sequence[Patcher]) -> None: def attempt_patch(self) -> bool: all_successful = True for patcher in self.patchers: - all_successful = all_successful and patcher.attempt_patch() + try: + all_successful = all_successful and patcher.attempt_patch() + except Exception as e: + logger.error(f"Error patching - some logs may not be captured: {e}") + if get_raise_on_captured_errors(): + raise + all_successful = False return all_successful def undo_patch(self) -> bool: all_successful = True for patcher in self.patchers: - all_successful = all_successful and patcher.undo_patch() + try: + all_successful = all_successful and patcher.undo_patch() + except Exception as e: + logger.error(f"Error unpatching: {e}") + if get_raise_on_captured_errors(): + raise + all_successful = False return all_successful @@ -71,7 +88,7 @@ def attempt_patch(self) -> bool: try: new_val = self._make_new_value(original_value) except Exception: - print(f"Failed to patch {self._attribute_name}") + logger.error(f"Failed to patch {self._attribute_name}") return False setattr( target.base_symbol, diff --git a/weave/trace/vals.py b/weave/trace/vals.py index 3782490dbd8..6557771df67 100644 --- a/weave/trace/vals.py +++ b/weave/trace/vals.py @@ -10,6 +10,7 @@ from weave.trace import box from weave.trace.client_context.weave_client import get_weave_client +from weave.trace.context import get_raise_on_captured_errors from weave.trace.errors import InternalError from weave.trace.object_record import ObjectRecord from weave.trace.op import is_op, maybe_bind_method @@ -320,6 +321,8 @@ def _local_iter_with_remote_fallback(self) -> Generator[dict, None, None]: logger.error( "Expected all row digests and prefetched rows to be set, falling back to remote iteration" ) + if get_raise_on_captured_errors(): + raise yield from self._remote_iter() return @@ -329,6 +332,8 @@ def _local_iter_with_remote_fallback(self) -> Generator[dict, None, None]: logger.error( f"Expected length of row digests ({row_digest_len}) to match prefetched rows ({prefetched_rows_len}). Falling back to remote iteration." ) + if get_raise_on_captured_errors(): + raise yield from self._remote_iter() return @@ -364,6 +369,8 @@ def _remote_iter(self) -> Generator[dict, None, None]: logger.error( f"Expected length of response rows ({len(response.rows)}) to match prefetched rows ({len(self._prefetched_rows)}). Ignoring prefetched rows." ) + if get_raise_on_captured_errors(): + raise self._prefetched_rows = None for ndx, item in enumerate(response.rows): diff --git a/weave/trace_server/async_batch_processor.py b/weave/trace_server/async_batch_processor.py index 17f364481fc..af77d222e9d 100644 --- a/weave/trace_server/async_batch_processor.py +++ b/weave/trace_server/async_batch_processor.py @@ -5,6 +5,7 @@ from threading import Event, Lock, Thread from typing import Callable, Generic, List, TypeVar +from weave.trace.context import get_raise_on_captured_errors from weave.trace_server import requests T = TypeVar("T") @@ -64,6 +65,8 @@ def _process_batches(self) -> None: if e.response.status_code == 413: # 413: payload too large, don't raise just log logger.error(f"Error processing batch: {e}") + if get_raise_on_captured_errors(): + raise else: raise e From a1e81202937c6e919f410ab1212690c8be8455fb Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Mon, 23 Sep 2024 15:59:03 -0700 Subject: [PATCH 007/179] fix: Fix object op retrieval for "dirtied" objects (#2452) * initialize tests * initialize tests * initialize tests --- .../trace/test_dirty_model_op_retrieval.py | 30 +++++++++++++++++++ weave/trace/vals.py | 12 ++++++-- 2 files changed, 40 insertions(+), 2 deletions(-) create mode 100644 weave/tests/trace/test_dirty_model_op_retrieval.py diff --git a/weave/tests/trace/test_dirty_model_op_retrieval.py b/weave/tests/trace/test_dirty_model_op_retrieval.py new file mode 100644 index 00000000000..92dbdcc13a8 --- /dev/null +++ b/weave/tests/trace/test_dirty_model_op_retrieval.py @@ -0,0 +1,30 @@ +import weave + + +def test_dirty_model_op_retrieval(client): + class MyModel(weave.Model): + client: str + + @weave.op() + def invoke(self): + return self.client + + # Base Case + m = MyModel(client="openai") + assert m.invoke() == "openai" + m.client = "anthropic" + assert m.invoke() == "anthropic" + + # Case 1: Model is clean on first call + m2 = weave.ref(m.ref.uri()).get() + + assert m2.invoke() == "openai" + m2.client = "anthropic" + assert m2.invoke() == "anthropic" + + # Case 2: Model is dirty on first call + m3 = weave.ref(m.ref.uri()).get() + m3.client = "anthropic" + assert m3.invoke() == "anthropic" # This fails in 0.51.8 + m3.client = "mistral" + assert m3.invoke() == "mistral" diff --git a/weave/trace/vals.py b/weave/trace/vals.py index 6557771df67..f5166e5bea4 100644 --- a/weave/trace/vals.py +++ b/weave/trace/vals.py @@ -156,12 +156,20 @@ def attribute_access_result( return maybe_bind_method(val_attr_val, self) if (ref := getattr(self, "ref", None)) is None: - return val_attr_val + # Even if we have not parent ref, if our current value is an object + # ref, we should still process it with make_trace_obj. Practically, + # this allows a user to "get" a Model, update a field, then invoke it. + # Primary test: `test_dirty_model_op_retrieval` + if not isinstance(val_attr_val, ObjectRef): + return val_attr_val + new_ref = None + else: + new_ref = ref.with_attr(attr_name) + if server is None: return val_attr_val root = getattr(self, "root", None) - new_ref = ref.with_attr(attr_name) return make_trace_obj( val_attr_val, From 48ac97052f7d6e94c9def70f6d6b3e9ecd7a026a Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 09:42:38 -0500 Subject: [PATCH 008/179] chore: disable Evaluation tab until it is better for single evals (#2457) --- .../Home/Browse3/pages/CallPage/CallPage.tsx | 3 ++- 1 file changed, 2 insertions(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx index 740cea01405..510042fcecd 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx @@ -54,7 +54,8 @@ const useCallTabs = (call: CallSchema) => { const {entity, project, callId} = call; const weaveRef = makeRefCall(entity, project, callId); return [ - ...(isEvaluateOp(call.spanName) + // Disabling Evaluation tab until it's better for single evaluation + ...(false && isEvaluateOp(call.spanName) ? [ { label: 'Evaluation', From 701323cd68f9b90b83e9102f887809fd9c1c1873 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 14:46:57 +0000 Subject: [PATCH 009/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 7db8c96c22a..4c64e621ff9 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 44eee90d555..a4dfc884f22 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -a262d9df422c28d75011669bc2baa883fe65ffde +007fd0cac46711a563ca36d618fe3002c6aec960 From b3ed0a1435b9023c52d7144e01f6e95a9912333b Mon Sep 17 00:00:00 2001 From: Joe Crawley Date: Tue, 24 Sep 2024 08:01:35 -0700 Subject: [PATCH 010/179] Update CODEOWNERS to allow FE infra to approve component changes (#2405) --- .github/CODEOWNERS | 2 ++ 1 file changed, 2 insertions(+) diff --git a/.github/CODEOWNERS b/.github/CODEOWNERS index b9702a4c693..54c42593db7 100644 --- a/.github/CODEOWNERS +++ b/.github/CODEOWNERS @@ -1,2 +1,4 @@ * @wandb/weave-team weave-js/src/common @wandb/fe-infra-reviewers +weave-js/src/components @wandb/fe-infra-reviewers @wandb/weave-team +weave-js/src/assets @wandb/fe-infra-reviewers @wandb/weave-team From 5118a3ef07f8efc27c1994191bea711db33d2b25 Mon Sep 17 00:00:00 2001 From: Nicolas Remerscheid Date: Tue, 24 Sep 2024 18:20:42 +0200 Subject: [PATCH 011/179] docs(cookbook): Governance Dashboard (#2071) * baseline governance dashboard cookbook --- docs/docs/guides/cookbooks/prod_dashboard.md | 18 + .../gen_notebooks/online_monitoring.md | 222 ++ docs/notebooks/online_monitoring.ipynb | 2765 +++++++++++++++++ 3 files changed, 3005 insertions(+) create mode 100644 docs/docs/guides/cookbooks/prod_dashboard.md create mode 100644 docs/docs/reference/gen_notebooks/online_monitoring.md create mode 100644 docs/notebooks/online_monitoring.ipynb diff --git a/docs/docs/guides/cookbooks/prod_dashboard.md b/docs/docs/guides/cookbooks/prod_dashboard.md new file mode 100644 index 00000000000..c76a5ef3ad5 --- /dev/null +++ b/docs/docs/guides/cookbooks/prod_dashboard.md @@ -0,0 +1,18 @@ +--- +sidebar_position: 2 +hide_table_of_contents: true +--- + +# Integrating with Weave: Case Study - Custom Dashboard for Production Monitoring +When we consider how well Weave can be intergated in existing processes and AI Apps we consider data input and data output as the two fundemantal characteristics: +1. **Data Input:** + * **Framework Agnostic Tracing:** Many different tools, packages, frameworks are used to create LLM apps (LangChain, LangGraph, LlamaIndex, AutoGen, CrewAI). Weave's single `@weave-op()` decorator makes it very easy to integrate with any framework and custom objects (THERE SHOULD BE A COOKBOOK FOR HOW TO INTEGRATE AND HOW TO DEAL WITH CUSTOM OBJECTS INCL. SERIALIZATION). For most common frameworks our team already did that making the tracking of apps as easy as initializing Weave before the start of the application. For how feedback can be flexibly integrated into Weave check out the Cookbook Series on Feedback (ADD LINK TO OTHER COOKBOOK HERE). + * **Openning API endpoints (soon):** LLM applications are very diverse (webpage in typescript, python scripts, java backends, on-device apps) but should still be trckable and traceable from anywhere. For most use-cases Weave is already proving native support (python and typescript coming soon), for the rest Weave makes it very easy to log traces or connect with existing tools (ONE AVAILABLE A COOKBOOK SHOULD BE LAUNCHED ONCE THE NEW APIs ARE EXPOSED). + +2. **Data Output**: Weave focuses on a) online monitoring (tracing generations, tracking governance metrics such as cost, latency, tokens) and b) offline evaluations (systematic benchmarking on eval datasets, human feedback loops, LLM judges, side-by-side comparisons). For both parts Weave provides strong visulalization capabiltities through the Weave UI. Sometimes, creating a visual extension based on the specific business or monitoring requirements makes sense - this is what we'll discover in this cookbook (SEEMS LIKE IN THE FUTURE WE'LL HAVE WEAVE BOARDS BACK FOR THAT). + +The introduction, specific use-case that we consider in this cookbook: +* In this cookbook we show how Weave's exposed APIs and functions make it very easy to create a custom dashboard for production monitoring as an extension to the Traces view in Weave. +* We will focus on creating aggregate views of the cost, latency, tokens, and provided user-feedback +* We will focus on providing aggregation functions across models, calls, and projects +* We will take a look at how to add alerts and guardrailes (GOOD FOR OTHER COOKBOOKS) \ No newline at end of file diff --git a/docs/docs/reference/gen_notebooks/online_monitoring.md b/docs/docs/reference/gen_notebooks/online_monitoring.md new file mode 100644 index 00000000000..27d033a8ca4 --- /dev/null +++ b/docs/docs/reference/gen_notebooks/online_monitoring.md @@ -0,0 +1,222 @@ +--- +title: Integrating with Weave - Production Dashboard +--- + + +:::tip[This is a notebook] + +
Open In Colab
Open in Colab
+ +
View in Github
View in Github
+ +::: + + + +Weights & Biases + + +# Integrating with Weave: Production Dashboard + +The GenAI tooling landscape is rapidly evolving - new frameworks, tools, and applications are emerging all the time. Weave aims to be a one-stop-shop for all your GenAI monitoring and evaluation needs. This also means that sometimes it is necessary to integrate with existing platforms or extend Weave to fit the specific needs of your project or organization. + +In this cookbook, we'll demonstrate how to leverage Weave's powerful APIs and functions to create a custom dashboard for production monitoring as an extension to the Traces view in Weave. We'll focus on: +* Fetching traces, costs, feedback, and other metrics from Weave +* Creating aggregate views for user feedback and cost distribution +* Creating visualizations for token usage and latency over time + +You can try out the dashboard with your own Weave project by installing streamlit and running [this production dashboard script](https://github.com/NiWaRe/agent-dev-collection)! + +Example Production Dashboard with Weave + +# 1. Setup +To follow along this tutorial you'll only need to install the following packages: + + +```python +!pip install streamlit pandas plotly weave +``` + +# 2. Implementation + +## 2.1 Initializing Weave Client and Defining Costs +First, we'll set up a function to initialize the Weave client and add costs for each model. + +* We have included the standard costs for many standard models but we also make it easy to add your own custom costs and custom models. In the following we'll show how to add custom costs for a few models and use the standard costs for the rest. +* The costs are calculate based on the tracked tokens for each call in Weave. For many LLM vendor libraries, we will automatically track the token usage, but it is also possible to return custom token counts for any call. See this cookbook on how to define the token count and cost calculation for a custom model - [custom cost cookbook](https://weave-docs.wandb.ai/reference/gen_notebooks/custom_model_cost#setting-up-a-model-with-weave). + + +```python +PROJECT_NAME = "wandb-smle/weave-cookboook-demo" +``` + + +```python +import weave + +MODEL_NAMES = [ + # model name, prompt cost, completion cost + ("gpt-4o-2024-05-13", 0.03, 0.06), + ("gpt-4o-mini-2024-07-18", 0.03, 0.06), + ("gemini/gemini-1.5-flash", 0.00025, 0.0005), + ("gpt-4o-mini", 0.03, 0.06), + ("gpt-4-turbo", 0.03, 0.06), + ("claude-3-haiku-20240307", 0.01, 0.03), + ("gpt-4o", 0.03, 0.06) +] + +def init_weave_client(project_name): + try: + client = weave.init(project_name) + for model, prompt_cost, completion_cost in MODEL_NAMES: + client.add_cost(llm_id=model, prompt_token_cost=prompt_cost, completion_token_cost=completion_cost) + return client + except Exception as e: + print(f"Failed to initialize Weave client for project '{project_name}': {e}") + return None + +client = init_weave_client(PROJECT_NAME) +``` + +## 2.2 Fetching Calls Data from Weave +In order to fetch call data from Weave, we have two options: +1. Fetching Data call-by-call +2. Using high-level APIs + +### 2.2.1 Fetching Data call-by-call +The first option to access data from Weave is to retrieve a list of filtered calls and extract the wanted data call-by-call. For that we can use the `calls_query_stream` API to fetch the calls data from Weave: + +* `calls_query_stream` API: This API allows us to fetch the calls data from Weave. +* `filter` dictionary: This dictionary contains the filter parameters to fetch the calls data - see [here](https://weave-docs.wandb.ai/reference/python-sdk/weave/trace_server/weave.trace_server.trace_server_interface/#class-callschema) for more details. +* `expand_columns` list: This list contains the columns to expand in the calls data. +* `sort_by` list: This list contains the sorting parameters for the calls data. +* `include_costs` boolean: This boolean indicates whether to include the costs in the calls data. +* `include_feedback` boolean: This boolean indicates whether to include the feedback in the calls data. + + +```python +import itertools +import pandas as pd +from datetime import datetime, timedelta + +def fetch_calls(client, project_id, start_time, trace_roots_only, limit): + filter_params = { + "project_id": project_id, + "filter": {"started_at": start_time, "trace_roots_only": trace_roots_only}, + "expand_columns": ["inputs.example", "inputs.model"], + "sort_by": [{"field": "started_at", "direction": "desc"}], + "include_costs": True, + "include_feedback": True, + } + try: + calls_stream = client.server.calls_query_stream(filter_params) + calls = list(itertools.islice(calls_stream, limit)) # limit the number of calls to fetch if too many + print(f"Fetched {len(calls)} calls.") + return calls + except Exception as e: + print(f"Error fetching calls: {e}") + return [] + +calls = fetch_calls(client, PROJECT_NAME, datetime.now() - timedelta(days=1), True, 100) +``` + + +```python +# the raw data is a list of Call objects +pd.DataFrame([call.dict() for call in calls]).head(3) +``` + +Processing the calls is very easy with the return from Weave - we'll extract the relevant information and store it in a list of dictionaries. We'll then convert the list of dictionaries to a pandas DataFrame and return it. + + +```python +import json +import pandas as pd +from datetime import datetime + +def process_calls(calls): + records = [] + for call in calls: + feedback = call.summary.get("weave", {}).get("feedback", []) + thumbs_up = sum(1 for item in feedback if isinstance(item, dict) and item.get("payload", {}).get("emoji") == "👍") + thumbs_down = sum(1 for item in feedback if isinstance(item, dict) and item.get("payload", {}).get("emoji") == "👎") + latency = call.summary.get("weave", {}).get("latency_ms", 0) + + records.append({ + "Call ID": call.id, + "Trace ID": call.trace_id, # this is a unique ID for the trace that can be used to retrieve it + "Display Name": call.display_name, # this is an optional name you can set in the UI or programatically + "Latency (ms)": latency, + "Thumbs Up": thumbs_up, + "Thumbs Down": thumbs_down, + "Started At": pd.to_datetime(getattr(call, 'started_at', datetime.min)), + "Inputs": json.dumps(call.inputs, default=str), + "Outputs": json.dumps(call.output, default=str) + }) + return pd.DataFrame(records) +``` + + +```python +df_calls = process_calls(calls) +df_calls.head(3) +``` + +### 2.2.2 Using high-level APIs +Instead of goin through every call Weave also provides high-level APIs to directly access model costs, feedback, and other metrics. +For example, for the cost, we'll use the `query_costs` API to fetch the costs of all used LLMs using in project: + + +```python +# Use cost API to get costs +costs = client.query_costs() +df_costs = pd.DataFrame([cost.dict() for cost in costs]) +df_costs['total_cost'] = df_costs['prompt_token_cost'] + df_costs['completion_token_cost'] + +# only show the first row for every unqiue llm_id +df_costs +``` + +## 2.4 Gathering inputs and generating visualizations +Next, we can generate the visualizations using plotly. This is the most basic dashboard, but you can customize it as you like! For a more complex example, check out a Streamlit example [here](https://github.com/NiWaRe/knowledge-worker-weave/blob/master/prod_dashboard.py). + + +```python +import plotly.express as px +import plotly.graph_objects as go + +def plot_feedback_pie_chart(thumbs_up, thumbs_down): + fig = go.Figure(data=[go.Pie(labels=['Thumbs Up', 'Thumbs Down'], values=[thumbs_up, thumbs_down], marker=dict(colors=['#66b3ff', '#ff9999']), hole=.3)]) + fig.update_traces(textinfo='percent+label', hoverinfo='label+percent') + fig.update_layout(showlegend=False, title="Feedback Summary") + return fig + +def plot_model_cost_distribution(df): + fig = px.bar(df, x="llm_id", y="total_cost", color="llm_id", title="Cost Distribution by Model") + fig.update_layout(xaxis_title="Model", yaxis_title="Cost (USD)") + return fig + +# See the source code for all the plots +``` + + +```python +plot_feedback_pie_chart(df_calls["Thumbs Up"].sum(), df_calls["Thumbs Down"].sum()) +``` + + +```python +plot_model_cost_distribution(df_costs) +``` + +# Conclusion +In this cookbook, we demonstrated how to create a custom production monitoring dashboard using Weave's APIs and functions. Weave currently focuses on fast integrations for easy input of data as well as extraction of the data for custom processes. + +* **Data Input:** + * Framework-agnostic tracing with [@weave-op()](https://weave-docs.wandb.ai/quickstart#2-log-a-trace-to-a-new-project) decorator and the possibility to import calls from CSV (see related [import cookbook](https://weave-docs.wandb.ai/reference/gen_notebooks/import_from_csv)) + * Service API endpoints to log to Weave from for various programming frameworks and languages, see [here](https://weave-docs.wandb.ai/reference/service-api/call-start-call-start-post) for more details. +* **Data Output:** + * Easy download of the data in CSV, TSV, JSONL, JSON formats - see [here](https://weave-docs.wandb.ai/guides/tracking/tracing#querying--exporting-calls) for more details. + * Easy export using programmatic access to the data - see "Use Python" section in the export panel as described in this cookbook. See [here](https://weave-docs.wandb.ai/guides/tracking/tracing#querying--exporting-calls) for more details. + +This custom dashboard extends Weave's native Traces view, allowing for tailored monitoring of LLM applications in production. If you're interested in viewing a more complex dashboard, check out a Streamlit example where you can add your own Weave project URL [in this repo](https://github.com/NiWaRe/agent-dev-collection). diff --git a/docs/notebooks/online_monitoring.ipynb b/docs/notebooks/online_monitoring.ipynb new file mode 100644 index 00000000000..e743c23d648 --- /dev/null +++ b/docs/notebooks/online_monitoring.ipynb @@ -0,0 +1,2765 @@ +{ + "cells": [ + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\n", + "\n", + "\"Weights\n", + "" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Integrating with Weave: Production Dashboard\n", + "\n", + "The GenAI tooling landscape is rapidly evolving - new frameworks, tools, and applications are emerging all the time. Weave aims to be a one-stop-shop for all your GenAI monitoring and evaluation needs. This also means that sometimes it is necessary to integrate with existing platforms or extend Weave to fit the specific needs of your project or organization.\n", + "\n", + "In this cookbook, we'll demonstrate how to leverage Weave's powerful APIs and functions to create a custom dashboard for production monitoring as an extension to the Traces view in Weave. We'll focus on:\n", + "* Fetching traces, costs, feedback, and other metrics from Weave\n", + "* Creating aggregate views for user feedback and cost distribution\n", + "* Creating visualizations for token usage and latency over time\n", + "\n", + "You can try out the dashboard with your own Weave project by installing streamlit and running [this production dashboard script](https://github.com/NiWaRe/agent-dev-collection)!" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "\"Example" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 1. Setup\n", + "To follow along this tutorial you'll only need to install the following packages:" + ] + }, + { + "cell_type": "code", + "execution_count": null, + "metadata": {}, + "outputs": [], + "source": [ + "!pip install streamlit pandas plotly weave" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# 2. Implementation" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.1 Initializing Weave Client and Defining Costs\n", + "First, we'll set up a function to initialize the Weave client and add costs for each model. \n", + "\n", + "* We have included the standard costs for many standard models but we also make it easy to add your own custom costs and custom models. In the following we'll show how to add custom costs for a few models and use the standard costs for the rest.\n", + "* The costs are calculate based on the tracked tokens for each call in Weave. For many LLM vendor libraries, we will automatically track the token usage, but it is also possible to return custom token counts for any call. See this cookbook on how to define the token count and cost calculation for a custom model - [custom cost cookbook](https://weave-docs.wandb.ai/reference/gen_notebooks/custom_model_cost#setting-up-a-model-with-weave)." + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [], + "source": [ + "PROJECT_NAME = \"wandb-smle/weave-cookboook-demo\"" + ] + }, + { + "cell_type": "code", + "execution_count": 3, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Logged in as Weights & Biases user: nicolas-remerscheid.\n", + "View Weave data at https://wandb.ai/wandb-smle/weave-cookboook-demo/weave\n" + ] + } + ], + "source": [ + "import weave\n", + "\n", + "MODEL_NAMES = [\n", + " # model name, prompt cost, completion cost\n", + " (\"gpt-4o-2024-05-13\", 0.03, 0.06),\n", + " (\"gpt-4o-mini-2024-07-18\", 0.03, 0.06),\n", + " (\"gemini/gemini-1.5-flash\", 0.00025, 0.0005),\n", + " (\"gpt-4o-mini\", 0.03, 0.06),\n", + " (\"gpt-4-turbo\", 0.03, 0.06),\n", + " (\"claude-3-haiku-20240307\", 0.01, 0.03),\n", + " (\"gpt-4o\", 0.03, 0.06),\n", + "]\n", + "\n", + "\n", + "def init_weave_client(project_name):\n", + " try:\n", + " client = weave.init(project_name)\n", + " for model, prompt_cost, completion_cost in MODEL_NAMES:\n", + " client.add_cost(\n", + " llm_id=model,\n", + " prompt_token_cost=prompt_cost,\n", + " completion_token_cost=completion_cost,\n", + " )\n", + " return client\n", + " except Exception as e:\n", + " print(f\"Failed to initialize Weave client for project '{project_name}': {e}\")\n", + " return None\n", + "\n", + "\n", + "client = init_weave_client(PROJECT_NAME)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.2 Fetching Calls Data from Weave\n", + "In order to fetch call data from Weave, we have two options:\n", + "1. Fetching Data call-by-call\n", + "2. Using high-level APIs\n", + "\n", + "### 2.2.1 Fetching Data call-by-call\n", + "The first option to access data from Weave is to retrieve a list of filtered calls and extract the wanted data call-by-call. For that we can use the `calls_query_stream` API to fetch the calls data from Weave:\n", + "\n", + "* `calls_query_stream` API: This API allows us to fetch the calls data from Weave.\n", + "* `filter` dictionary: This dictionary contains the filter parameters to fetch the calls data - see [here](https://weave-docs.wandb.ai/reference/python-sdk/weave/trace_server/weave.trace_server.trace_server_interface/#class-callschema) for more details.\n", + "* `expand_columns` list: This list contains the columns to expand in the calls data.\n", + "* `sort_by` list: This list contains the sorting parameters for the calls data.\n", + "* `include_costs` boolean: This boolean indicates whether to include the costs in the calls data.\n", + "* `include_feedback` boolean: This boolean indicates whether to include the feedback in the calls data." + ] + }, + { + "cell_type": "code", + "execution_count": 4, + "metadata": {}, + "outputs": [ + { + "name": "stdout", + "output_type": "stream", + "text": [ + "Fetched 24 calls.\n" + ] + } + ], + "source": [ + "import itertools\n", + "from datetime import datetime, timedelta\n", + "\n", + "import pandas as pd\n", + "\n", + "\n", + "def fetch_calls(client, project_id, start_time, trace_roots_only, limit):\n", + " filter_params = {\n", + " \"project_id\": project_id,\n", + " \"filter\": {\"started_at\": start_time, \"trace_roots_only\": trace_roots_only},\n", + " \"expand_columns\": [\"inputs.example\", \"inputs.model\"],\n", + " \"sort_by\": [{\"field\": \"started_at\", \"direction\": \"desc\"}],\n", + " \"include_costs\": True,\n", + " \"include_feedback\": True,\n", + " }\n", + " try:\n", + " calls_stream = client.server.calls_query_stream(filter_params)\n", + " calls = list(\n", + " itertools.islice(calls_stream, limit)\n", + " ) # limit the number of calls to fetch if too many\n", + " print(f\"Fetched {len(calls)} calls.\")\n", + " return calls\n", + " except Exception as e:\n", + " print(f\"Error fetching calls: {e}\")\n", + " return []\n", + "\n", + "\n", + "calls = fetch_calls(client, PROJECT_NAME, datetime.now() - timedelta(days=1), True, 100)" + ] + }, + { + "cell_type": "code", + "execution_count": 5, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idproject_idop_namedisplay_nametrace_idparent_idstarted_atattributesinputsended_atexceptionoutputsummarywb_user_idwb_run_iddeleted_at
001917eac-1b2f-7ef3-90cb-760f85c2f6a7wandb-smle/weave-cookboook-demoweave:///wandb-smle/weave-cookboook-demo/op/pr...None01917eac-1b30-76b3-bf54-819facc7c0f8None2024-08-23 09:58:14.064000+00:00{'weave': {'client_version': '0.50.13', 'sourc...{'model_url': 'weave:///wandb-smle/weave-rag-e...2024-08-23 09:58:36.377000+00:00None[The provided text states that the global uppe...{'weave': {'status': 'TraceStatus.SUCCESS', 't...VXNlcjoxNjkyOTM2NoneNone
101917716-40b5-7e22-babc-6c9aa9e136f8wandb-smle/weave-cookboook-demoweave:///wandb-smle/weave-cookboook-demo/op/pr...None01917716-40b5-7e22-babc-6ca075aacf73None2024-08-21 22:37:12.757000+00:00{'weave': {'client_version': '0.50.14', 'sourc...{'model_url': 'weave:///wandb-smle/weave-rag-e...2024-08-21 22:37:15.698000+00:00{\"type\": \"AttributeError\", \"message\": \"'Object...None{'weave': {'status': 'TraceStatus.ERROR', 'tra...VXNlcjo2MjYwNDI=NoneNone
201916b37-6f53-7e21-ad51-575f5db55c21wandb-smle/weave-cookboook-demoweave:///wandb-smle/weave-cookboook-demo/op/pr...None01916b37-6f53-7e21-ad51-5761dff73093None2024-08-19 15:18:00.789000+00:00{'weave': {'client_version': '0.50.13', 'sourc...{'model_url': 'weave:///wandb-smle/weave-rag-e...2024-08-19 15:18:32.781000+00:00None[The provided context focuses on the observed ...{'weave': {'status': 'TraceStatus.SUCCESS', 't...VXNlcjoxNjkyOTM2NoneNone
\n", + "
" + ], + "text/plain": [ + " id project_id \\\n", + "0 01917eac-1b2f-7ef3-90cb-760f85c2f6a7 wandb-smle/weave-cookboook-demo \n", + "1 01917716-40b5-7e22-babc-6c9aa9e136f8 wandb-smle/weave-cookboook-demo \n", + "2 01916b37-6f53-7e21-ad51-575f5db55c21 wandb-smle/weave-cookboook-demo \n", + "\n", + " op_name display_name \\\n", + "0 weave:///wandb-smle/weave-cookboook-demo/op/pr... None \n", + "1 weave:///wandb-smle/weave-cookboook-demo/op/pr... None \n", + "2 weave:///wandb-smle/weave-cookboook-demo/op/pr... None \n", + "\n", + " trace_id parent_id \\\n", + "0 01917eac-1b30-76b3-bf54-819facc7c0f8 None \n", + "1 01917716-40b5-7e22-babc-6ca075aacf73 None \n", + "2 01916b37-6f53-7e21-ad51-5761dff73093 None \n", + "\n", + " started_at \\\n", + "0 2024-08-23 09:58:14.064000+00:00 \n", + "1 2024-08-21 22:37:12.757000+00:00 \n", + "2 2024-08-19 15:18:00.789000+00:00 \n", + "\n", + " attributes \\\n", + "0 {'weave': {'client_version': '0.50.13', 'sourc... \n", + "1 {'weave': {'client_version': '0.50.14', 'sourc... \n", + "2 {'weave': {'client_version': '0.50.13', 'sourc... \n", + "\n", + " inputs \\\n", + "0 {'model_url': 'weave:///wandb-smle/weave-rag-e... \n", + "1 {'model_url': 'weave:///wandb-smle/weave-rag-e... \n", + "2 {'model_url': 'weave:///wandb-smle/weave-rag-e... \n", + "\n", + " ended_at \\\n", + "0 2024-08-23 09:58:36.377000+00:00 \n", + "1 2024-08-21 22:37:15.698000+00:00 \n", + "2 2024-08-19 15:18:32.781000+00:00 \n", + "\n", + " exception \\\n", + "0 None \n", + "1 {\"type\": \"AttributeError\", \"message\": \"'Object... \n", + "2 None \n", + "\n", + " output \\\n", + "0 [The provided text states that the global uppe... \n", + "1 None \n", + "2 [The provided context focuses on the observed ... \n", + "\n", + " summary wb_user_id \\\n", + "0 {'weave': {'status': 'TraceStatus.SUCCESS', 't... VXNlcjoxNjkyOTM2 \n", + "1 {'weave': {'status': 'TraceStatus.ERROR', 'tra... VXNlcjo2MjYwNDI= \n", + "2 {'weave': {'status': 'TraceStatus.SUCCESS', 't... VXNlcjoxNjkyOTM2 \n", + "\n", + " wb_run_id deleted_at \n", + "0 None None \n", + "1 None None \n", + "2 None None " + ] + }, + "execution_count": 5, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# the raw data is a list of Call objects\n", + "pd.DataFrame([call.dict() for call in calls]).head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "Processing the calls is very easy with the return from Weave - we'll extract the relevant information and store it in a list of dictionaries. We'll then convert the list of dictionaries to a pandas DataFrame and return it. " + ] + }, + { + "cell_type": "code", + "execution_count": 6, + "metadata": {}, + "outputs": [], + "source": [ + "import json\n", + "from datetime import datetime\n", + "\n", + "import pandas as pd\n", + "\n", + "\n", + "def process_calls(calls):\n", + " records = []\n", + " for call in calls:\n", + " feedback = call.summary.get(\"weave\", {}).get(\"feedback\", [])\n", + " thumbs_up = sum(\n", + " 1\n", + " for item in feedback\n", + " if isinstance(item, dict) and item.get(\"payload\", {}).get(\"emoji\") == \"👍\"\n", + " )\n", + " thumbs_down = sum(\n", + " 1\n", + " for item in feedback\n", + " if isinstance(item, dict) and item.get(\"payload\", {}).get(\"emoji\") == \"👎\"\n", + " )\n", + " latency = call.summary.get(\"weave\", {}).get(\"latency_ms\", 0)\n", + "\n", + " records.append(\n", + " {\n", + " \"Call ID\": call.id,\n", + " \"Trace ID\": call.trace_id, # this is a unique ID for the trace that can be used to retrieve it\n", + " \"Display Name\": call.display_name, # this is an optional name you can set in the UI or programatically\n", + " \"Latency (ms)\": latency,\n", + " \"Thumbs Up\": thumbs_up,\n", + " \"Thumbs Down\": thumbs_down,\n", + " \"Started At\": pd.to_datetime(getattr(call, \"started_at\", datetime.min)),\n", + " \"Inputs\": json.dumps(call.inputs, default=str),\n", + " \"Outputs\": json.dumps(call.output, default=str),\n", + " }\n", + " )\n", + " return pd.DataFrame(records)" + ] + }, + { + "cell_type": "code", + "execution_count": 7, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
Call IDTrace IDDisplay NameLatency (ms)Thumbs UpThumbs DownStarted AtInputsOutputs
001917eac-1b2f-7ef3-90cb-760f85c2f6a701917eac-1b30-76b3-bf54-819facc7c0f8None22313002024-08-23 09:58:14.064000+00:00{\"model_url\": \"weave:///wandb-smle/weave-rag-e...[\"The provided text states that the global upp...
101917716-40b5-7e22-babc-6c9aa9e136f801917716-40b5-7e22-babc-6ca075aacf73None2941002024-08-21 22:37:12.757000+00:00{\"model_url\": \"weave:///wandb-smle/weave-rag-e...null
201916b37-6f53-7e21-ad51-575f5db55c2101916b37-6f53-7e21-ad51-5761dff73093None31992012024-08-19 15:18:00.789000+00:00{\"model_url\": \"weave:///wandb-smle/weave-rag-e...[\"The provided context focuses on the observed...
\n", + "
" + ], + "text/plain": [ + " Call ID Trace ID \\\n", + "0 01917eac-1b2f-7ef3-90cb-760f85c2f6a7 01917eac-1b30-76b3-bf54-819facc7c0f8 \n", + "1 01917716-40b5-7e22-babc-6c9aa9e136f8 01917716-40b5-7e22-babc-6ca075aacf73 \n", + "2 01916b37-6f53-7e21-ad51-575f5db55c21 01916b37-6f53-7e21-ad51-5761dff73093 \n", + "\n", + " Display Name Latency (ms) Thumbs Up Thumbs Down \\\n", + "0 None 22313 0 0 \n", + "1 None 2941 0 0 \n", + "2 None 31992 0 1 \n", + "\n", + " Started At \\\n", + "0 2024-08-23 09:58:14.064000+00:00 \n", + "1 2024-08-21 22:37:12.757000+00:00 \n", + "2 2024-08-19 15:18:00.789000+00:00 \n", + "\n", + " Inputs \\\n", + "0 {\"model_url\": \"weave:///wandb-smle/weave-rag-e... \n", + "1 {\"model_url\": \"weave:///wandb-smle/weave-rag-e... \n", + "2 {\"model_url\": \"weave:///wandb-smle/weave-rag-e... \n", + "\n", + " Outputs \n", + "0 [\"The provided text states that the global upp... \n", + "1 null \n", + "2 [\"The provided context focuses on the observed... " + ] + }, + "execution_count": 7, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "df_calls = process_calls(calls)\n", + "df_calls.head(3)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "### 2.2.2 Using high-level APIs\n", + "Instead of goin through every call Weave also provides high-level APIs to directly access model costs, feedback, and other metrics. \n", + "For example, for the cost, we'll use the `query_costs` API to fetch the costs of all used LLMs using in project:" + ] + }, + { + "cell_type": "code", + "execution_count": 8, + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "
\n", + "\n", + "\n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + " \n", + "
idllm_idprompt_token_costcompletion_token_costprompt_token_cost_unitcompletion_token_cost_uniteffective_dateprovider_idtotal_cost
001921f0f-d012-7fe1-9989-7176fbf04627gpt-4o0.030000.0600USDUSD2024-09-23 13:26:15.579default0.09000
101920e9c-e983-70c3-9a27-03843491f772claude-3-haiku-202403070.010000.0300USDUSD2024-09-18 20:00:31.111default0.04000
201920e9c-e4ac-7df2-b27c-fe274e1b041fgemini/gemini-1.5-flash0.000250.0005USDUSD2024-09-18 20:00:31.111default0.00075
301920e9c-e7fb-7390-8e90-f27a74592f0cgpt-4-turbo0.030000.0600USDUSD2024-09-18 20:00:31.111default0.09000
401920e9c-e124-7d12-af9d-e32bb4d63a91gpt-4o-2024-05-130.030000.0600USDUSD2024-09-18 20:00:31.111default0.09000
501920e9c-e664-7a53-b1d9-61c6944b6fb0gpt-4o-mini0.030000.0600USDUSD2024-09-18 20:00:31.111default0.09000
601920e9c-e2e4-7da3-b77f-3163b4d36fedgpt-4o-mini-2024-07-180.030000.0600USDUSD2024-09-18 20:00:31.111default0.09000
70191e842-17d6-7b52-8111-106a55c54fdayour_model_name0.100000.2000USDUSD2024-09-12 22:02:11.286default0.30000
\n", + "
" + ], + "text/plain": [ + " id llm_id \\\n", + "0 01921f0f-d012-7fe1-9989-7176fbf04627 gpt-4o \n", + "1 01920e9c-e983-70c3-9a27-03843491f772 claude-3-haiku-20240307 \n", + "2 01920e9c-e4ac-7df2-b27c-fe274e1b041f gemini/gemini-1.5-flash \n", + "3 01920e9c-e7fb-7390-8e90-f27a74592f0c gpt-4-turbo \n", + "4 01920e9c-e124-7d12-af9d-e32bb4d63a91 gpt-4o-2024-05-13 \n", + "5 01920e9c-e664-7a53-b1d9-61c6944b6fb0 gpt-4o-mini \n", + "6 01920e9c-e2e4-7da3-b77f-3163b4d36fed gpt-4o-mini-2024-07-18 \n", + "7 0191e842-17d6-7b52-8111-106a55c54fda your_model_name \n", + "\n", + " prompt_token_cost completion_token_cost prompt_token_cost_unit \\\n", + "0 0.03000 0.0600 USD \n", + "1 0.01000 0.0300 USD \n", + "2 0.00025 0.0005 USD \n", + "3 0.03000 0.0600 USD \n", + "4 0.03000 0.0600 USD \n", + "5 0.03000 0.0600 USD \n", + "6 0.03000 0.0600 USD \n", + "7 0.10000 0.2000 USD \n", + "\n", + " completion_token_cost_unit effective_date provider_id total_cost \n", + "0 USD 2024-09-23 13:26:15.579 default 0.09000 \n", + "1 USD 2024-09-18 20:00:31.111 default 0.04000 \n", + "2 USD 2024-09-18 20:00:31.111 default 0.00075 \n", + "3 USD 2024-09-18 20:00:31.111 default 0.09000 \n", + "4 USD 2024-09-18 20:00:31.111 default 0.09000 \n", + "5 USD 2024-09-18 20:00:31.111 default 0.09000 \n", + "6 USD 2024-09-18 20:00:31.111 default 0.09000 \n", + "7 USD 2024-09-12 22:02:11.286 default 0.30000 " + ] + }, + "execution_count": 8, + "metadata": {}, + "output_type": "execute_result" + } + ], + "source": [ + "# Use cost API to get costs\n", + "costs = client.query_costs()\n", + "df_costs = pd.DataFrame([cost.dict() for cost in costs])\n", + "df_costs[\"total_cost\"] = (\n", + " df_costs[\"prompt_token_cost\"] + df_costs[\"completion_token_cost\"]\n", + ")\n", + "\n", + "# only show the first row for every unqiue llm_id\n", + "df_costs" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "## 2.4 Gathering inputs and generating visualizations\n", + "Next, we can generate the visualizations using plotly. This is the most basic dashboard, but you can customize it as you like! For a more complex example, check out a Streamlit example [here](https://github.com/NiWaRe/knowledge-worker-weave/blob/master/prod_dashboard.py)." + ] + }, + { + "cell_type": "code", + "execution_count": 9, + "metadata": {}, + "outputs": [], + "source": [ + "import plotly.express as px\n", + "import plotly.graph_objects as go\n", + "\n", + "\n", + "def plot_feedback_pie_chart(thumbs_up, thumbs_down):\n", + " fig = go.Figure(\n", + " data=[\n", + " go.Pie(\n", + " labels=[\"Thumbs Up\", \"Thumbs Down\"],\n", + " values=[thumbs_up, thumbs_down],\n", + " marker=dict(colors=[\"#66b3ff\", \"#ff9999\"]),\n", + " hole=0.3,\n", + " )\n", + " ]\n", + " )\n", + " fig.update_traces(textinfo=\"percent+label\", hoverinfo=\"label+percent\")\n", + " fig.update_layout(showlegend=False, title=\"Feedback Summary\")\n", + " return fig\n", + "\n", + "\n", + "def plot_model_cost_distribution(df):\n", + " fig = px.bar(\n", + " df,\n", + " x=\"llm_id\",\n", + " y=\"total_cost\",\n", + " color=\"llm_id\",\n", + " title=\"Cost Distribution by Model\",\n", + " )\n", + " fig.update_layout(xaxis_title=\"Model\", yaxis_title=\"Cost (USD)\")\n", + " return fig\n", + "\n", + "\n", + "# See the source code for all the plots" + ] + }, + { + "cell_type": "code", + "execution_count": 10, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "hole": 0.3, + "hoverinfo": "label+percent", + "labels": [ + "Thumbs Up", + "Thumbs Down" + ], + "marker": { + "colors": [ + "#66b3ff", + "#ff9999" + ] + }, + "textinfo": "percent+label", + "type": "pie", + "values": [ + 5, + 4 + ] + } + ], + "layout": { + "showlegend": false, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Feedback Summary" + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_feedback_pie_chart(df_calls[\"Thumbs Up\"].sum(), df_calls[\"Thumbs Down\"].sum())" + ] + }, + { + "cell_type": "code", + "execution_count": 11, + "metadata": {}, + "outputs": [ + { + "data": { + "application/vnd.plotly.v1+json": { + "config": { + "plotlyServerURL": "https://plot.ly" + }, + "data": [ + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gpt-4o", + "marker": { + "color": "#636efa", + "pattern": { + "shape": "" + } + }, + "name": "gpt-4o", + "offsetgroup": "gpt-4o", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gpt-4o" + ], + "xaxis": "x", + "y": [ + 0.08999999798834324 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "claude-3-haiku-20240307", + "marker": { + "color": "#EF553B", + "pattern": { + "shape": "" + } + }, + "name": "claude-3-haiku-20240307", + "offsetgroup": "claude-3-haiku-20240307", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "claude-3-haiku-20240307" + ], + "xaxis": "x", + "y": [ + 0.03999999910593033 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gemini/gemini-1.5-flash", + "marker": { + "color": "#00cc96", + "pattern": { + "shape": "" + } + }, + "name": "gemini/gemini-1.5-flash", + "offsetgroup": "gemini/gemini-1.5-flash", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gemini/gemini-1.5-flash" + ], + "xaxis": "x", + "y": [ + 0.0007500000356230885 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gpt-4-turbo", + "marker": { + "color": "#ab63fa", + "pattern": { + "shape": "" + } + }, + "name": "gpt-4-turbo", + "offsetgroup": "gpt-4-turbo", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gpt-4-turbo" + ], + "xaxis": "x", + "y": [ + 0.08999999798834324 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gpt-4o-2024-05-13", + "marker": { + "color": "#FFA15A", + "pattern": { + "shape": "" + } + }, + "name": "gpt-4o-2024-05-13", + "offsetgroup": "gpt-4o-2024-05-13", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gpt-4o-2024-05-13" + ], + "xaxis": "x", + "y": [ + 0.08999999798834324 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gpt-4o-mini", + "marker": { + "color": "#19d3f3", + "pattern": { + "shape": "" + } + }, + "name": "gpt-4o-mini", + "offsetgroup": "gpt-4o-mini", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gpt-4o-mini" + ], + "xaxis": "x", + "y": [ + 0.08999999798834324 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "gpt-4o-mini-2024-07-18", + "marker": { + "color": "#FF6692", + "pattern": { + "shape": "" + } + }, + "name": "gpt-4o-mini-2024-07-18", + "offsetgroup": "gpt-4o-mini-2024-07-18", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "gpt-4o-mini-2024-07-18" + ], + "xaxis": "x", + "y": [ + 0.08999999798834324 + ], + "yaxis": "y" + }, + { + "alignmentgroup": "True", + "hovertemplate": "llm_id=%{x}
total_cost=%{y}", + "legendgroup": "your_model_name", + "marker": { + "color": "#B6E880", + "pattern": { + "shape": "" + } + }, + "name": "your_model_name", + "offsetgroup": "your_model_name", + "orientation": "v", + "showlegend": true, + "textposition": "auto", + "type": "bar", + "x": [ + "your_model_name" + ], + "xaxis": "x", + "y": [ + 0.30000000447034836 + ], + "yaxis": "y" + } + ], + "layout": { + "barmode": "relative", + "legend": { + "title": { + "text": "llm_id" + }, + "tracegroupgap": 0 + }, + "template": { + "data": { + "bar": [ + { + "error_x": { + "color": "#2a3f5f" + }, + "error_y": { + "color": "#2a3f5f" + }, + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "bar" + } + ], + "barpolar": [ + { + "marker": { + "line": { + "color": "#E5ECF6", + "width": 0.5 + }, + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "barpolar" + } + ], + "carpet": [ + { + "aaxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "baxis": { + "endlinecolor": "#2a3f5f", + "gridcolor": "white", + "linecolor": "white", + "minorgridcolor": "white", + "startlinecolor": "#2a3f5f" + }, + "type": "carpet" + } + ], + "choropleth": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "choropleth" + } + ], + "contour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "contour" + } + ], + "contourcarpet": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "contourcarpet" + } + ], + "heatmap": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmap" + } + ], + "heatmapgl": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "heatmapgl" + } + ], + "histogram": [ + { + "marker": { + "pattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + } + }, + "type": "histogram" + } + ], + "histogram2d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2d" + } + ], + "histogram2dcontour": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "histogram2dcontour" + } + ], + "mesh3d": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "type": "mesh3d" + } + ], + "parcoords": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "parcoords" + } + ], + "pie": [ + { + "automargin": true, + "type": "pie" + } + ], + "scatter": [ + { + "fillpattern": { + "fillmode": "overlay", + "size": 10, + "solidity": 0.2 + }, + "type": "scatter" + } + ], + "scatter3d": [ + { + "line": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatter3d" + } + ], + "scattercarpet": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattercarpet" + } + ], + "scattergeo": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergeo" + } + ], + "scattergl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattergl" + } + ], + "scattermapbox": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scattermapbox" + } + ], + "scatterpolar": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolar" + } + ], + "scatterpolargl": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterpolargl" + } + ], + "scatterternary": [ + { + "marker": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "type": "scatterternary" + } + ], + "surface": [ + { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + }, + "colorscale": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "type": "surface" + } + ], + "table": [ + { + "cells": { + "fill": { + "color": "#EBF0F8" + }, + "line": { + "color": "white" + } + }, + "header": { + "fill": { + "color": "#C8D4E3" + }, + "line": { + "color": "white" + } + }, + "type": "table" + } + ] + }, + "layout": { + "annotationdefaults": { + "arrowcolor": "#2a3f5f", + "arrowhead": 0, + "arrowwidth": 1 + }, + "autotypenumbers": "strict", + "coloraxis": { + "colorbar": { + "outlinewidth": 0, + "ticks": "" + } + }, + "colorscale": { + "diverging": [ + [ + 0, + "#8e0152" + ], + [ + 0.1, + "#c51b7d" + ], + [ + 0.2, + "#de77ae" + ], + [ + 0.3, + "#f1b6da" + ], + [ + 0.4, + "#fde0ef" + ], + [ + 0.5, + "#f7f7f7" + ], + [ + 0.6, + "#e6f5d0" + ], + [ + 0.7, + "#b8e186" + ], + [ + 0.8, + "#7fbc41" + ], + [ + 0.9, + "#4d9221" + ], + [ + 1, + "#276419" + ] + ], + "sequential": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ], + "sequentialminus": [ + [ + 0, + "#0d0887" + ], + [ + 0.1111111111111111, + "#46039f" + ], + [ + 0.2222222222222222, + "#7201a8" + ], + [ + 0.3333333333333333, + "#9c179e" + ], + [ + 0.4444444444444444, + "#bd3786" + ], + [ + 0.5555555555555556, + "#d8576b" + ], + [ + 0.6666666666666666, + "#ed7953" + ], + [ + 0.7777777777777778, + "#fb9f3a" + ], + [ + 0.8888888888888888, + "#fdca26" + ], + [ + 1, + "#f0f921" + ] + ] + }, + "colorway": [ + "#636efa", + "#EF553B", + "#00cc96", + "#ab63fa", + "#FFA15A", + "#19d3f3", + "#FF6692", + "#B6E880", + "#FF97FF", + "#FECB52" + ], + "font": { + "color": "#2a3f5f" + }, + "geo": { + "bgcolor": "white", + "lakecolor": "white", + "landcolor": "#E5ECF6", + "showlakes": true, + "showland": true, + "subunitcolor": "white" + }, + "hoverlabel": { + "align": "left" + }, + "hovermode": "closest", + "mapbox": { + "style": "light" + }, + "paper_bgcolor": "white", + "plot_bgcolor": "#E5ECF6", + "polar": { + "angularaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "radialaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "scene": { + "xaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "yaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + }, + "zaxis": { + "backgroundcolor": "#E5ECF6", + "gridcolor": "white", + "gridwidth": 2, + "linecolor": "white", + "showbackground": true, + "ticks": "", + "zerolinecolor": "white" + } + }, + "shapedefaults": { + "line": { + "color": "#2a3f5f" + } + }, + "ternary": { + "aaxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "baxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + }, + "bgcolor": "#E5ECF6", + "caxis": { + "gridcolor": "white", + "linecolor": "white", + "ticks": "" + } + }, + "title": { + "x": 0.05 + }, + "xaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + }, + "yaxis": { + "automargin": true, + "gridcolor": "white", + "linecolor": "white", + "ticks": "", + "title": { + "standoff": 15 + }, + "zerolinecolor": "white", + "zerolinewidth": 2 + } + } + }, + "title": { + "text": "Cost Distribution by Model" + }, + "xaxis": { + "anchor": "y", + "categoryarray": [ + "gpt-4o", + "claude-3-haiku-20240307", + "gemini/gemini-1.5-flash", + "gpt-4-turbo", + "gpt-4o-2024-05-13", + "gpt-4o-mini", + "gpt-4o-mini-2024-07-18", + "your_model_name" + ], + "categoryorder": "array", + "domain": [ + 0, + 1 + ], + "title": { + "text": "Model" + } + }, + "yaxis": { + "anchor": "x", + "domain": [ + 0, + 1 + ], + "title": { + "text": "Cost (USD)" + } + } + } + } + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "plot_model_cost_distribution(df_costs)" + ] + }, + { + "cell_type": "markdown", + "metadata": {}, + "source": [ + "# Conclusion\n", + "In this cookbook, we demonstrated how to create a custom production monitoring dashboard using Weave's APIs and functions. Weave currently focuses on fast integrations for easy input of data as well as extraction of the data for custom processes.\n", + "\n", + "* **Data Input:** \n", + " * Framework-agnostic tracing with [@weave-op()](https://weave-docs.wandb.ai/quickstart#2-log-a-trace-to-a-new-project) decorator and the possibility to import calls from CSV (see related [import cookbook](https://weave-docs.wandb.ai/reference/gen_notebooks/import_from_csv))\n", + " * Service API endpoints to log to Weave from for various programming frameworks and languages, see [here](https://weave-docs.wandb.ai/reference/service-api/call-start-call-start-post) for more details.\n", + "* **Data Output:**\n", + " * Easy download of the data in CSV, TSV, JSONL, JSON formats - see [here](https://weave-docs.wandb.ai/guides/tracking/tracing#querying--exporting-calls) for more details.\n", + " * Easy export using programmatic access to the data - see \"Use Python\" section in the export panel as described in this cookbook. See [here](https://weave-docs.wandb.ai/guides/tracking/tracing#querying--exporting-calls) for more details.\n", + "\n", + "This custom dashboard extends Weave's native Traces view, allowing for tailored monitoring of LLM applications in production. If you're interested in viewing a more complex dashboard, check out a Streamlit example where you can add your own Weave project URL [in this repo](https://github.com/NiWaRe/agent-dev-collection)." + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.10.7" + } + }, + "nbformat": 4, + "nbformat_minor": 4 +} From 0f00e79958e94aecd8a6110bcd6ccb41a09fb486 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:43:23 -0500 Subject: [PATCH 012/179] feat: autoscroll chat view to output (#2453) --- .../Home/Browse3/pages/ChatView/ChatView.tsx | 15 +++++++++++---- 1 file changed, 11 insertions(+), 4 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx index 8cc7d482733..ca74c42da3f 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx @@ -1,4 +1,4 @@ -import React from 'react'; +import React, {useEffect, useRef} from 'react'; import {ChoicesView} from './ChoicesView'; import {HorizontalRuleWithLabel} from './HorizontalRuleWithLabel'; @@ -10,19 +10,26 @@ type ChatViewProps = { }; export const ChatView = ({chat}: ChatViewProps) => { + const outputRef = useRef(null); + + useEffect(() => { + if (outputRef.current && chat.result && chat.result.choices) { + outputRef.current.scrollIntoView(); + } + }, [chat.result]); + return (
{chat.result && chat.result.choices && ( - <> -
+
- +
)}
); From 8bd43a43d34ba47a3d85a551d5d076d001c3957a Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 16:47:42 +0000 Subject: [PATCH 013/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 4c64e621ff9..228f0f4133d 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index a4dfc884f22..579abf410bc 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -007fd0cac46711a563ca36d618fe3002c6aec960 +bb0ffc14739daa2b85a00b54e726a7292fc9856b From 85857dce474b04ac8330072f793332d943b84c5e Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:26:11 -0500 Subject: [PATCH 014/179] chore: remove unused code (#2458) --- .../common/SimpleFilterableDataTable.tsx | 233 +----------------- 1 file changed, 1 insertion(+), 232 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimpleFilterableDataTable.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimpleFilterableDataTable.tsx index f6c807c07e6..5356333a4ca 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimpleFilterableDataTable.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimpleFilterableDataTable.tsx @@ -1,234 +1,5 @@ import {Box, SxProps} from '@mui/material'; -import { - GridColDef, - GridRowSelectionModel, - GridValidRowModel, -} from '@mui/x-data-grid-pro'; -import _ from 'lodash'; -import React, {useEffect, useMemo, useState} from 'react'; - -import {StyledDataGrid} from '../../StyledDataGrid'; -import {useControllableState, useURLSearchParamsDict} from '../util'; - -type FilterableTablePropsType< - DataRowType extends GridValidRowModel, - CompositeFilterType extends {[key: string]: any} = {[key: string]: any} -> = { - getInitialData: () => DataRowType[]; - columns: WFHighLevelDataColumnDictType; - getFilterPopoutTargetUrl?: (filter: CompositeFilterType) => string; - frozenFilter?: Partial; - initialFilter?: Partial; - // Setting this will make the component a controlled component. The parent - // is responsible for updating the filter. - onFilterUpdate?: (filter: CompositeFilterType) => void; -}; - -export type WFHighLevelDataColumnDictType< - DataRowType extends GridValidRowModel, - CompositeFilterType extends {[key: string]: any} = {[key: string]: any} -> = { - [columnIdKey: string]: WFHighLevelDataColumn< - DataRowType, - any, - any, - string, - CompositeFilterType - >; -}; - -export type WFHighLevelDataColumn< - DataRowType extends GridValidRowModel, - FilterType, - ValueType extends string | number | boolean | null, - ColumnIdType extends string, - CompositeFilterType = {[key: string]: any} & { - [key in ColumnIdType]: FilterType; - } -> = { - columnId: ColumnIdType; - // If present, this column is displayed in the grid - gridDisplay?: { - columnLabel: string; - // Value used by datagrid for sorting, filtering, etc... - columnValue: (obj: DataRowType) => ValueType; - gridColDefOptions?: Partial>; - }; - // If present, filtering for this column is enabled - filterControls?: { - filterKeys: string[]; - filterPredicate: ( - obj: DataRowType, - filter: Partial - ) => boolean; - filterControlListItem: React.FC<{ - filter: Partial; - updateFilter: (update: Partial) => void; - frozenData: DataRowType[]; - }>; - }; -}; - -export const FilterableTable = < - DataRowType extends GridValidRowModel, - CompositeFilterType extends {[key: string]: any} = {[key: string]: any} ->( - props: FilterableTablePropsType -) => { - const [filter, setFilter] = useControllableState( - (props.initialFilter ?? {}) as CompositeFilterType, - props.onFilterUpdate - ); - - // Combine the frozen filter with the filter - const effectiveFilter = useMemo(() => { - return {...filter, ...props.frozenFilter} as CompositeFilterType; - }, [filter, props.frozenFilter]); - - // Get the initial data from the caller - const initialPreFilteredData = useMemo(() => props.getInitialData(), [props]); - const {filteredData: frozenData} = useMemo(() => { - let data = initialPreFilteredData; - const ff = props.frozenFilter; - if (ff != null) { - Object.values(props.columns).forEach(column => { - if (column.filterControls) { - data = data.filter(obj => - column.filterControls!.filterPredicate(obj, ff) - ); - } - }); - } - return {filteredData: data}; - }, [initialPreFilteredData, props.columns, props.frozenFilter]); - - // Apply the filter controls - const {filteredData, filteredColData} = useMemo(() => { - let data = frozenData; - const colData = _.mapValues(props.columns, () => frozenData); - Object.entries(props.columns).forEach(([key, column]) => { - if (column.filterControls) { - data = data.filter(obj => - column.filterControls!.filterPredicate(obj, filter) - ); - // UG, nasty n^2 loop - Object.entries(props.columns).forEach(([innerKey, innerColumn]) => { - if (innerKey === key || !innerColumn.filterControls) { - return; - } - colData[key] = colData[key].filter(obj => - innerColumn.filterControls!.filterPredicate( - obj, - _.omit( - filter, - column.filterControls!.filterKeys - ) as Partial - ) - ); - }); - } - }); - return {filteredData: data, filteredColData: colData}; - }, [filter, frozenData, props.columns]); - - // Apply the data transformations - const dataGridRowData = useMemo(() => { - return filteredData.map(obj => { - const rowData: {[columnId: string]: any} = {...obj}; - Object.values(props.columns).forEach(column => { - if (column.gridDisplay) { - rowData[column.columnId] = column.gridDisplay.columnValue(obj); - } - }); - return rowData as DataRowType; - }); - }, [filteredData, props.columns]); - - // Create the columns - const dataGridColumns = useMemo(() => { - return Object.values(props.columns) - .filter(column => column.gridDisplay) - .map(column => { - return { - field: column.columnId, - headerName: column.gridDisplay!.columnLabel, - flex: column.gridDisplay!.gridColDefOptions?.width ? 0 : 1, - ...column.gridDisplay!.gridColDefOptions, - }; - }); - }, [props.columns]); - - // Create the filter UI elements - const filterListItems = useMemo(() => { - const filterCurr: {[key: string]: any} = {}; - return ( - <> - {Object.entries(props.columns).map(([key, column]) => { - filterCurr[key] = effectiveFilter[key]; - let col = null; - if (column.filterControls) { - col = column.filterControls.filterControlListItem({ - filter: filterCurr as Partial, - updateFilter: update => { - setFilter({...filter, ...update} as CompositeFilterType); - }, - frozenData: filteredColData[key], - }); - } - return {col}; - })} - - ); - }, [effectiveFilter, filter, filteredColData, props.columns, setFilter]); - - // Highlight table row if it matches peek drawer. - const query = useURLSearchParamsDict(); - const {peekPath} = query; - const peekId = peekPath ? peekPath.split('/').pop() : null; - const rowIds = useMemo(() => { - return dataGridRowData.map(row => row.id); - }, [dataGridRowData]); - const [rowSelectionModel, setRowSelectionModel] = - useState([]); - useEffect(() => { - if (rowIds.length === 0) { - // Data may have not loaded - return; - } - if (peekId == null) { - // No peek drawer, clear any selection - setRowSelectionModel([]); - } else { - // If peek drawer matches a row, select it. - // If not, don't modify selection. - if (rowIds.includes(peekId)) { - setRowSelectionModel([peekId]); - } - } - }, [rowIds, peekId]); - - return ( - 0} - showPopoutButton={Object.keys(props.frozenFilter ?? {}).length > 0} - filterListItems={filterListItems}> - - - ); -}; +import React from 'react'; export const FilterLayoutTemplate: React.FC<{ filterPopoutTargetUrl?: string; @@ -237,8 +8,6 @@ export const FilterLayoutTemplate: React.FC<{ filterListItems?: React.ReactNode; filterListSx?: SxProps; }> = props => { - // const [isOpen, setIsOpen] = useState(false); - // const history = useHistory(); return ( Date: Tue, 24 Sep 2024 17:30:43 +0000 Subject: [PATCH 015/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/sha1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 579abf410bc..328c83c9e2c 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -bb0ffc14739daa2b85a00b54e726a7292fc9856b +9aca96f9c359534ad2969bd09e6a4e42d919dc10 From aa03dea9b633bd04df7713be4265e148e4af9f92 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 12:41:19 -0500 Subject: [PATCH 016/179] chore: add icon from design team (#2459) --- weave-js/src/assets/icons/icon-baseline-alt.svg | 5 +++++ weave-js/src/components/Icon/Icon.tsx | 5 +++++ weave-js/src/components/Icon/index.ts | 1 + weave-js/src/components/Icon/types.ts | 1 + 4 files changed, 12 insertions(+) create mode 100644 weave-js/src/assets/icons/icon-baseline-alt.svg diff --git a/weave-js/src/assets/icons/icon-baseline-alt.svg b/weave-js/src/assets/icons/icon-baseline-alt.svg new file mode 100644 index 00000000000..13d66a35820 --- /dev/null +++ b/weave-js/src/assets/icons/icon-baseline-alt.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/weave-js/src/components/Icon/Icon.tsx b/weave-js/src/components/Icon/Icon.tsx index 0915490706b..b58c9ec540b 100644 --- a/weave-js/src/components/Icon/Icon.tsx +++ b/weave-js/src/components/Icon/Icon.tsx @@ -9,6 +9,7 @@ import {ReactComponent as ImportArtifactTypeAlt} from '../../assets/icons/icon-a import {ReactComponent as ImportAudioVolume} from '../../assets/icons/icon-audio-volume.svg'; import {ReactComponent as ImportAutomationRobotArm} from '../../assets/icons/icon-automation-robot-arm.svg'; import {ReactComponent as ImportBack} from '../../assets/icons/icon-back.svg'; +import {ReactComponent as ImportBaselineAlt} from '../../assets/icons/icon-baseline-alt.svg'; import {ReactComponent as ImportBellNotifications} from '../../assets/icons/icon-bell-notifications.svg'; import {ReactComponent as ImportBenchmarkSquare} from '../../assets/icons/icon-benchmark-square.svg'; import {ReactComponent as ImportBlogReport} from '../../assets/icons/icon-blog-report.svg'; @@ -286,6 +287,9 @@ export const IconAutomationRobotArm = (props: SVGIconProps) => ( export const IconBack = (props: SVGIconProps) => ( ); +export const IconBaselineAlt = (props: SVGIconProps) => ( + +); export const IconBellNotifications = (props: SVGIconProps) => ( ); @@ -1005,6 +1009,7 @@ const ICON_NAME_TO_ICON: Record = { 'audio-volume': IconAudioVolume, 'automation-robot-arm': IconAutomationRobotArm, back: IconBack, + 'baseline-alt': IconBaselineAlt, 'bell-notifications': IconBellNotifications, 'benchmark-square': IconBenchmarkSquare, 'blog-report': IconBlogReport, diff --git a/weave-js/src/components/Icon/index.ts b/weave-js/src/components/Icon/index.ts index 44a42b0f988..925afd692c4 100644 --- a/weave-js/src/components/Icon/index.ts +++ b/weave-js/src/components/Icon/index.ts @@ -9,6 +9,7 @@ export { IconAudioVolume, IconAutomationRobotArm, IconBack, + IconBaselineAlt, IconBellNotifications, IconBenchmarkSquare, IconBlogReport, diff --git a/weave-js/src/components/Icon/types.ts b/weave-js/src/components/Icon/types.ts index d69090092b9..dc18268ee2f 100644 --- a/weave-js/src/components/Icon/types.ts +++ b/weave-js/src/components/Icon/types.ts @@ -8,6 +8,7 @@ export const IconNames = { AudioVolume: 'audio-volume', AutomationRobotArm: 'automation-robot-arm', Back: 'back', + BaselineAlt: 'baseline-alt', BellNotifications: 'bell-notifications', BenchmarkSquare: 'benchmark-square', BlogReport: 'blog-report', From a8d1e3d056600d6c63a65ad9701ccaa6f15f5605 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 17:45:38 +0000 Subject: [PATCH 017/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 228f0f4133d..0055172ce9d 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 328c83c9e2c..4183794560f 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -9aca96f9c359534ad2969bd09e6a4e42d919dc10 +b254ffa490f29dc5b85f4331f5977f6e95df319e From e716446c9778299d759ecc64135a3b673b344db3 Mon Sep 17 00:00:00 2001 From: Marie Barr-Ramsey <126013019+mbarrramsey@users.noreply.github.com> Date: Tue, 24 Sep 2024 11:32:59 -0700 Subject: [PATCH 018/179] chore(weave): autocomplete followups (#2343) --- weave-js/src/common/util/fuzzyMatch.tsx | 17 +++- weave-js/src/components/Form/AutoComplete.tsx | 84 +++++++++++++------ 2 files changed, 70 insertions(+), 31 deletions(-) diff --git a/weave-js/src/common/util/fuzzyMatch.tsx b/weave-js/src/common/util/fuzzyMatch.tsx index b252a02f35a..542f78b4212 100644 --- a/weave-js/src/common/util/fuzzyMatch.tsx +++ b/weave-js/src/common/util/fuzzyMatch.tsx @@ -196,7 +196,8 @@ export function fuzzyComponentSplit( export function fuzzyMatchHighlightPieces( strPieces: string[], - matchStyle: {[key: string]: string} = {fontWeight: 'bold'} + matchStyle: {[key: string]: string} = {fontWeight: 'bold'}, + noHighlight: boolean = false ): React.ReactFragment { if (strPieces.length === 1) { return strPieces[0]; @@ -206,7 +207,10 @@ export function fuzzyMatchHighlightPieces( {strPieces.map((s, i) => { if (i % 2) { return ( - + {s} ); @@ -227,9 +231,14 @@ export function fuzzyMatchHighlightPieces( export function fuzzyMatchHighlight( str: string, query: string, - matchStyle: {[key: string]: string} = {fontWeight: 'bold'} + matchStyle: {[key: string]: string} = {fontWeight: 'bold'}, + noHighlight: boolean = false ): React.ReactFragment { - return fuzzyMatchHighlightPieces(fuzzyMatchSplit(str, query), matchStyle); + return fuzzyMatchHighlightPieces( + fuzzyMatchSplit(str, query), + matchStyle, + noHighlight + ); } export function regexMatchHighlight( diff --git a/weave-js/src/components/Form/AutoComplete.tsx b/weave-js/src/components/Form/AutoComplete.tsx index 1378e295aa2..06bac480aef 100644 --- a/weave-js/src/components/Form/AutoComplete.tsx +++ b/weave-js/src/components/Form/AutoComplete.tsx @@ -8,7 +8,8 @@ import { MOON_500, MOON_800, TEAL_300, - TEAL_500, + TEAL_350, + TEAL_400, TEAL_600, } from '../../common/css/color.styles'; import {hexToRGB} from '../../common/css/globals.styles'; @@ -27,13 +28,6 @@ const FONT_SIZES = { variable: '14px', }; -const PADDING = { - small: '2px 8px', - medium: '4px 12px', - large: '8px 12px', - variable: '2px 8px', -}; - const getStyles = (props: AdditionalProps) => { const size = props.size ?? 'medium'; const customTheme = createTheme({ @@ -42,48 +36,53 @@ const getStyles = (props: AdditionalProps) => { styleOverrides: { root: { '& .MuiOutlinedInput-root': { - height: HEIGHTS[size], - padding: PADDING[size], + paddingTop: '0px !important', + paddingBottom: '0px !important', fontSize: FONT_SIZES[size], fontFamily: 'Source Sans Pro', + minWidth: '100px', color: MOON_800, - '&& fieldset': { + maxWidth: props.maxWidth ? `${props.maxWidth}px` : '100%', + '& fieldset': { borderColor: MOON_250, }, - '&&:hover fieldset': { - borderColor: hexToRGB(TEAL_500, 0.4), - borderWidth: '2px', - }, - '&&.Mui-focused fieldset': { - borderColor: hexToRGB(TEAL_500, 0.64), - borderWidth: '2px', - }, - borderColor: MOON_250, - '&:hover fieldset': { - borderColor: hexToRGB(TEAL_500, 0.4), + '&.Mui-focused fieldset': { + borderColor: TEAL_400, borderWidth: '2px', }, - '&.Mui-focused fieldset': { - borderColor: hexToRGB(TEAL_500, 0.64), + '&:hover:not(.Mui-focused) fieldset': { + borderColor: TEAL_350, borderWidth: '2px', }, - '& input::placeholder': { + '& .MuiInputBase-input::placeholder': { color: MOON_500, opacity: 1, }, + '& .MuiInputBase-input': { + padding: '0px', // Adjust padding as needed + minHeight: `${HEIGHTS[size]} !important`, + }, }, + '&.MuiAutocomplete-hasPopupIcon .MuiOutlinedInput-root, &.MuiAutocomplete-hasClearIcon .MuiOutlinedInput-root': + { + paddingRight: props.hasInputValue ? '28px' : '0px', // Apply padding only if input exists + }, }, option: { - padding: '6px 10px', + borderColor: MOON_250, + borderWidth: '1px', + paddingLeft: '10px !important', margin: '0 6px', borderRadius: '4px', cursor: 'pointer', backgroundColor: 'transparent', + color: MOON_800, + fontSize: FONT_SIZES[size], '&[aria-selected="true"]': { backgroundColor: `${hexToRGB(TEAL_300, 0.32)} !important`, color: TEAL_600, }, - '&.Mui-focused[aria-selected="true"]': { + '&:focus-within[aria-selected="true"]': { backgroundColor: `${hexToRGB(TEAL_300, 0.32)} !important`, color: TEAL_600, }, @@ -92,6 +91,7 @@ const getStyles = (props: AdditionalProps) => { }, }, clearIndicator: { + overflow: 'hidden', borderRadius: '4px', width: '24px', height: '24px', @@ -99,6 +99,33 @@ const getStyles = (props: AdditionalProps) => { backgroundColor: '#f5f5f5', }, }, + endAdornment: { + display: 'flex', + alignItems: 'center', + justifyContent: 'center', + }, + inputRoot: { + '& .MuiInputBase-inputMultiline': { + overflow: 'hidden', + whiteSpace: 'pre-wrap', + overflowY: 'auto', + scrollbarWidth: 'none', // For Firefox (hides the scrollbar) + msOverflowStyle: 'none', // For IE and Edge (hides the scrollbar) + '&::-webkit-scrollbar': { + display: 'none', // For Chrome, Safari, and WebKit-based browsers (hides the scrollbar) + }, + }, + }, + // menu dropdown + paper: { + boxShadow: '0 12px 24px rgba(0, 0, 0, 0.16)', + // MOON_100 is inverted to MOON_900 in dark mode automatically + // this is a nice hack that lets us avoid setting night-aware and + // attempting to override individual styles + backgroundColor: props.isDarkMode ? MOON_100 : 'white', + border: `1px solid ${MOON_250}`, + borderRadius: '4px', + }, }, }, }, @@ -116,6 +143,9 @@ type SelectSize = (typeof SelectSizes)[keyof typeof SelectSizes]; type AdditionalProps = { size?: SelectSize; + isDarkMode?: boolean; + maxWidth?: number; + hasInputValue?: boolean; }; export const AutoComplete = ( From ce58f862bb27d2f7955c0e4badd1982506c1bd9a Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 18:37:37 +0000 Subject: [PATCH 019/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 0055172ce9d..b8c94b30d7d 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 4183794560f..4f27fc231cd 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -b254ffa490f29dc5b85f4331f5977f6e95df319e +acdec2e66dda2eb86209a782679567f8496db77c From c4ac0717e463ca051abb4b402af5570f82cfb232 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 13:45:41 -0500 Subject: [PATCH 020/179] chore: nav bar design tweaks (#2460) --- weave-js/src/components/FancyPage/useProjectSidebar.ts | 6 +++--- 1 file changed, 3 insertions(+), 3 deletions(-) diff --git a/weave-js/src/components/FancyPage/useProjectSidebar.ts b/weave-js/src/components/FancyPage/useProjectSidebar.ts index 68c48e0adac..48a1d58f9c5 100644 --- a/weave-js/src/components/FancyPage/useProjectSidebar.ts +++ b/weave-js/src/components/FancyPage/useProjectSidebar.ts @@ -123,10 +123,10 @@ export const useProjectSidebar = ( }, { type: 'button' as const, - name: 'Evaluations', + name: 'Evals', slug: 'weave/evaluations', isShown: showWeaveSidebarItems || isShowAll, - iconName: IconNames.TypeBoolean, + iconName: IconNames.BaselineAlt, // path: baseRouter.callsUIUrl(entity, project, evaluationsFilter), }, { @@ -160,7 +160,7 @@ export const useProjectSidebar = ( }, { type: 'button' as const, - name: 'Operations', + name: 'Ops', slug: 'weave/operations', additionalSlugs: ['weave/op-versions'], isShown: isWeaveOnly, From 1b97181654a4c7741b81e5c6ff891a1d19ef0a19 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 18:49:46 +0000 Subject: [PATCH 021/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index b8c94b30d7d..4d42b63b392 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 4f27fc231cd..eacf4f78217 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -acdec2e66dda2eb86209a782679567f8496db77c +c52967103194f8cba1bd16d3e2fd7bb1e583cf84 From 32271dc7b2ed17e9f87da2c1dbec6eddb2e827e5 Mon Sep 17 00:00:00 2001 From: Connie Lee Date: Tue, 24 Sep 2024 12:13:30 -0700 Subject: [PATCH 022/179] chore(dev): Update isMediaCardType return type (#2463) --- weave-js/src/common/types/media.ts | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave-js/src/common/types/media.ts b/weave-js/src/common/types/media.ts index 44aa417fada..304988404df 100644 --- a/weave-js/src/common/types/media.ts +++ b/weave-js/src/common/types/media.ts @@ -222,7 +222,7 @@ export const mediaCardStrings = [ 'plotly', ] as MediaCardType[]; -export const isMediaCardType = (type: string) => { +export const isMediaCardType = (type: string): type is MediaCardType => { return _.includes(mediaCardStrings, type); }; From 798846f3d302b9c845adfabc060f3a6d454c2d33 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 19:17:37 +0000 Subject: [PATCH 023/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 4d42b63b392..b8c94b30d7d 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index eacf4f78217..fa0bcf744cf 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -c52967103194f8cba1bd16d3e2fd7bb1e583cf84 +e7dc1d61b2c5880f6af034048256f55865a6e980 From 707144646ca71d9c2caad66a13645becf96974b4 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:44:58 -0500 Subject: [PATCH 024/179] chore: remove feedback from pinned cols (#2462) --- .../Home/Browse3/pages/CallsPage/CallsTable.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx index 420a1425c14..46cf6fc0c11 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx @@ -97,7 +97,7 @@ export const DEFAULT_COLUMN_VISIBILITY_CALLS = { export const ALWAYS_PIN_LEFT_CALLS = ['CustomCheckbox']; export const DEFAULT_PIN_CALLS: GridPinnedColumns = { - left: ['CustomCheckbox', 'op_name', 'feedback'], + left: ['CustomCheckbox', 'op_name'], }; export const DEFAULT_SORT_CALLS: GridSortModel = [ From d634e3883c8c8cd85be2125d1a2a2f2e4e3f0d56 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 14:46:59 -0500 Subject: [PATCH 025/179] chore: change id display from four digits to three (#2461) --- .../PagePanelComponents/Home/Browse3/pages/common/Id.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx index e038eb372bd..512b9f79b81 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx @@ -48,7 +48,7 @@ type IdProps = { }; export const Id = ({id, type, className}: IdProps) => { - const truncatedId = id.slice(-4); + const truncatedId = id.slice(-3); const trigger = {truncatedId}; const prefix = type ? `${type} ID` : 'ID'; const content = ( @@ -61,7 +61,7 @@ export const Id = ({id, type, className}: IdProps) => { export const CopyableId = ({id, type, className}: IdProps) => { const [isClicked, setIsClicked] = useState(false); - const truncatedId = id.slice(-4); + const truncatedId = id.slice(-3); const onClick = useCallback(() => { copyToClipboard(id); setIsClicked(true); From 0fe83aa0d04fdc70168abb203f83459d1219ea3d Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 19:52:10 +0000 Subject: [PATCH 026/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index b8c94b30d7d..7cd12d4bf23 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index fa0bcf744cf..45388ebfc60 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -e7dc1d61b2c5880f6af034048256f55865a6e980 +4089f3381241b8671e168dbbb3cfc653ad903c7a From 89e3dae6c48d84af3e85659fc7f142af5030897d Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 15:03:34 -0500 Subject: [PATCH 027/179] chore: reorder nav bar, traces to top (#2466) --- .../components/FancyPage/useProjectSidebar.ts | 18 +++++++----------- 1 file changed, 7 insertions(+), 11 deletions(-) diff --git a/weave-js/src/components/FancyPage/useProjectSidebar.ts b/weave-js/src/components/FancyPage/useProjectSidebar.ts index 48a1d58f9c5..cdd5aa1e246 100644 --- a/weave-js/src/components/FancyPage/useProjectSidebar.ts +++ b/weave-js/src/components/FancyPage/useProjectSidebar.ts @@ -121,13 +121,19 @@ export const useProjectSidebar = ( label: 'Weave', isShown: isShowAll, }, + { + type: 'button' as const, + name: 'Traces', + slug: 'weave/traces', + isShown: showWeaveSidebarItems || isShowAll, + iconName: IconNames.LayoutTabs, + }, { type: 'button' as const, name: 'Evals', slug: 'weave/evaluations', isShown: showWeaveSidebarItems || isShowAll, iconName: IconNames.BaselineAlt, - // path: baseRouter.callsUIUrl(entity, project, evaluationsFilter), }, { type: 'button' as const, @@ -148,16 +154,6 @@ export const useProjectSidebar = ( key: 'dividerWithinWeave', isShown: isWeaveOnly, }, - { - type: 'button' as const, - name: 'Traces', - slug: 'weave/traces', - isShown: showWeaveSidebarItems || isShowAll, - iconName: IconNames.LayoutTabs, - // path: baseRouter.callsUIUrl(entity, project, { - // traceRootsOnly: true, - // }), - }, { type: 'button' as const, name: 'Ops', From fae817da8cf9f38125dcfe489615784c204aac1c Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 20:07:41 +0000 Subject: [PATCH 028/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 7cd12d4bf23..e2c967ad070 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 45388ebfc60..06c003052a4 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -4089f3381241b8671e168dbbb3cfc653ad903c7a +d1b0e3987c6f40e5d62bdd1ea6b434e582229ced From 1947bf534cc87abf45bb50ed8d41cfd9a0bc779d Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Tue, 24 Sep 2024 13:43:23 -0700 Subject: [PATCH 029/179] perf: use objs_query param `metadata_only` to get objects without their values (#2418) --- weave/tests/trace/test_objs_query.py | 27 ++++++++++++++++++ .../clickhouse_trace_server_batched.py | 21 ++++++++++++-- weave/trace_server/sqlite_trace_server.py | 28 +++++++++++++++---- weave/trace_server/trace_server_interface.py | 5 ++++ 4 files changed, 73 insertions(+), 8 deletions(-) diff --git a/weave/tests/trace/test_objs_query.py b/weave/tests/trace/test_objs_query.py index aa62655e5e4..032e440883f 100644 --- a/weave/tests/trace/test_objs_query.py +++ b/weave/tests/trace/test_objs_query.py @@ -142,3 +142,30 @@ def test_objs_query_filter_limit_offset_sort_by_object_id(client: WeaveClient): assert res.objs[1].val["i"] == 6 assert res.objs[2].val["j"] == 9 assert res.objs[2].val["i"] == 7 + + +def test_objs_query_filter_metadata_only(client: WeaveClient): + generate_objects(client, 10, 10) + + res = client.server.objs_query( + tsi.ObjQueryReq( + project_id=client._project_id(), + filter=tsi.ObjectVersionFilter(latest_only=True), + metadata_only=True, + ) + ) + assert len(res.objs) == 10 + for obj in res.objs: + assert obj.val == {} + + # sanity check that we get the full object when we don't ask for metadata only + res = client.server.objs_query( + tsi.ObjQueryReq( + project_id=client._project_id(), + filter=tsi.ObjectVersionFilter(latest_only=True), + metadata_only=False, + ) + ) + assert len(res.objs) == 10 + for obj in res.objs: + assert obj.val diff --git a/weave/trace_server/clickhouse_trace_server_batched.py b/weave/trace_server/clickhouse_trace_server_batched.py index 83e1102b1f8..bfae010693e 100644 --- a/weave/trace_server/clickhouse_trace_server_batched.py +++ b/weave/trace_server/clickhouse_trace_server_batched.py @@ -635,6 +635,7 @@ def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: object_id_conditions=object_id_conditions, parameters=parameters, is_latest=is_latest, + metadata_only=req.metadata_only, limit=req.limit, offset=req.offset, sort_by=req.sort_by, @@ -1422,6 +1423,7 @@ def _select_objs_query( object_id_conditions: Optional[list[str]] = None, parameters: Optional[Dict[str, Any]] = None, is_latest: bool = False, + metadata_only: Optional[bool] = False, limit: Optional[int] = None, offset: Optional[int] = None, sort_by: Optional[list[tsi.SortBy]] = None, @@ -1439,8 +1441,12 @@ def _select_objs_query( parameters to be passed to the query. Must include all parameters for both conditions and object_id_conditions. is_latest: - if is_latest is True, then we add the condition "is_latest = 1" to the outter + if is_latest is True, then we add the condition "is_latest = 1" to the outer query, and only return the most recent version of each object. + metadata_only: + if metadata_only is True, then we exclude the val_dump field in the select query. + generally, "queries" should not include the val_dump, but "reads" should, as + the val_dump is the most expensive part of the query. """ if not conditions: conditions = ["1 = 1"] @@ -1473,6 +1479,10 @@ def _select_objs_query( if parameters is None: parameters = {} + + # When metadata_only is false, dont actually read from the field + val_dump_field = "'{}' AS val_dump" if metadata_only else "val_dump" + # The subquery is for deduplication of object versions by digest select_query = f""" SELECT @@ -1507,7 +1517,14 @@ def _select_objs_query( count(*) OVER (PARTITION BY project_id, kind, object_id) as version_count, if(version_index + 1 = version_count, 1, 0) AS is_latest FROM ( - SELECT *, + SELECT project_id, + object_id, + created_at, + kind, + base_object_class, + refs, + {val_dump_field}, + digest, if (kind = 'op', 1, 0) AS is_op, row_number() OVER ( PARTITION BY project_id, diff --git a/weave/trace_server/sqlite_trace_server.py b/weave/trace_server/sqlite_trace_server.py index f398d44715e..1ead84123b7 100644 --- a/weave/trace_server/sqlite_trace_server.py +++ b/weave/trace_server/sqlite_trace_server.py @@ -700,6 +700,7 @@ def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: req.project_id, conditions=conds, parameters=parameters, + metadata_only=req.metadata_only, limit=req.limit, offset=req.offset, sort_by=req.sort_by, @@ -1079,14 +1080,29 @@ def _select_objs_query( project_id: str, conditions: Optional[list[str]] = None, parameters: Optional[Dict[str, Any]] = None, + metadata_only: Optional[bool] = False, limit: Optional[int] = None, offset: Optional[int] = None, sort_by: Optional[list[tsi.SortBy]] = None, ) -> list[tsi.ObjSchema]: conn, cursor = get_conn_cursor(self.db_path) pred = " AND ".join(conditions or ["1 = 1"]) - query = f"""SELECT * FROM objects - WHERE deleted_at IS NULL AND project_id = ? AND {pred}""" + val_dump_part = "'{}' as val_dump" if metadata_only else "val_dump" + query = f""" + SELECT + project_id, + object_id, + created_at, + kind, + base_object_class, + {val_dump_part}, + digest, + version_index, + is_latest + FROM objects + WHERE deleted_at IS NULL AND + project_id = ? AND {pred} + """ if sort_by: valid_sort_fields = {"object_id", "created_at"} @@ -1123,10 +1139,10 @@ def _select_objs_query( created_at=row[2], kind=row[3], base_object_class=row[4], - val=json.loads(row[6]), - digest=row[7], - version_index=row[8], - is_latest=row[9], + val=json.loads(row[5]), + digest=row[6], + version_index=row[7], + is_latest=row[8], ) ) return result diff --git a/weave/trace_server/trace_server_interface.py b/weave/trace_server/trace_server_interface.py index 5f6169d8bff..9891b584ab6 100644 --- a/weave/trace_server/trace_server_interface.py +++ b/weave/trace_server/trace_server_interface.py @@ -414,6 +414,11 @@ class ObjQueryReq(BaseModel): description="Sorting criteria for the query results. Currently only supports 'object_id' and 'created_at'.", examples=[[SortBy(field="created_at", direction="desc")]], ) + metadata_only: Optional[bool] = Field( + default=False, + description="If true, the `val` column is not read from the database and is empty." + "All other fields are returned.", + ) class ObjQueryRes(BaseModel): From 783602bc295c92e64b6139798ba962f01f17c815 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:03:20 -0500 Subject: [PATCH 030/179] chore: upgrade Material grid to v7.18.0 (#2455) --- weave-js/package.json | 2 +- .../PagePanelComponents/Home/Browse2.tsx | 2 +- .../PagePanelComponents/Home/Browse3.tsx | 6 +- .../Home/Browse3/StyledDataGrid.tsx | 7 +- .../Browse3/feedback/FeedbackGridInner.tsx | 3 + .../Home/Browse3/grid/pin.ts | 16 ++-- .../Browse3/pages/CallPage/CallTraceView.tsx | 1 + .../Browse3/pages/CallPage/DataTableView.tsx | 5 +- .../Browse3/pages/CallPage/ObjectViewer.tsx | 1 + .../Browse3/pages/CallsPage/CallsPage.tsx | 6 +- .../Browse3/pages/CallsPage/CallsTable.tsx | 15 ++-- .../pages/CallsPage/callsTableColumns.tsx | 27 ++++--- .../Home/Browse3/pages/ObjectVersionsPage.tsx | 10 +-- .../Home/Browse3/pages/OpVersionsPage.tsx | 1 - .../common/tabularListViews/columnBuilder.tsx | 5 +- weave-js/yarn.lock | 80 +++++++++++-------- 16 files changed, 100 insertions(+), 87 deletions(-) diff --git a/weave-js/package.json b/weave-js/package.json index de50d5b8235..a112610f807 100644 --- a/weave-js/package.json +++ b/weave-js/package.json @@ -37,7 +37,7 @@ "@monaco-editor/react": "^4.3.1", "@mui/icons-material": "^5.14.12", "@mui/material": "^6.0.2", - "@mui/x-data-grid-pro": "^6.16.0", + "@mui/x-data-grid-pro": "^7.18.0", "@mui/x-date-pickers": "^6.16.0", "@radix-ui/react-checkbox": "^1.0.4", "@radix-ui/react-dialog": "^1.0.5", diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse2.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse2.tsx index c8b8a0a3e05..c9449614f5a 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse2.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse2.tsx @@ -8,7 +8,7 @@ import { Toolbar, Typography, } from '@mui/material'; -import {LicenseInfo} from '@mui/x-license-pro'; +import {LicenseInfo} from '@mui/x-license'; import React, {FC} from 'react'; import { BrowserRouter as Router, diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx index 34ce4668c8f..fa62a622fed 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx @@ -14,10 +14,10 @@ import { GridColumnVisibilityModel, GridFilterModel, GridPaginationModel, - GridPinnedColumns, + GridPinnedColumnFields, GridSortModel, } from '@mui/x-data-grid-pro'; -import {LicenseInfo} from '@mui/x-license-pro'; +import {LicenseInfo} from '@mui/x-license'; import {makeGorillaApolloClient} from '@wandb/weave/apollo'; import {EVALUATE_OP_NAME_POST_PYDANTIC} from '@wandb/weave/components/PagePanelComponents/Home/Browse3/pages/common/heuristics'; import {opVersionKeyToRefUri} from '@wandb/weave/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/utilities'; @@ -727,7 +727,7 @@ const CallsPageBinding = () => { () => getValidPinModel(query.pin, DEFAULT_PIN_CALLS, ALWAYS_PIN_LEFT_CALLS), [query.pin] ); - const setPinModel = (newModel: GridPinnedColumns) => { + const setPinModel = (newModel: GridPinnedColumnFields) => { const newQuery = new URLSearchParams(location.search); newQuery.set( 'pin', diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx index 7bdbdbe886d..c29cf64b846 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx @@ -46,12 +46,7 @@ export const StyledDataGrid = styled( fontFamily: 'Source Sans Pro', - '& .MuiDataGrid-columnHeaders': { - backgroundColor: MOON_50, - color: MOON_500, - }, - - '& .MuiDataGrid-pinnedColumnHeaders': { + '& .MuiDataGrid-columnHeader': { backgroundColor: MOON_50, color: MOON_500, }, diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGridInner.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGridInner.tsx index d58246f2b62..fb5b0574564 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGridInner.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGridInner.tsx @@ -23,6 +23,7 @@ export const FeedbackGridInner = ({ { field: 'feedback_type', headerName: 'Type', + display: 'flex', renderCell: params => (
@@ -57,6 +58,7 @@ export const FeedbackGridInner = ({ field: 'id', headerName: 'ID', width: 50, + display: 'flex', renderCell: params => , }, { @@ -88,6 +90,7 @@ export const FeedbackGridInner = ({ sortable: false, resizable: false, disableColumnMenu: true, + display: 'flex', renderCell: params => { const projectId = params.row.project_id; const feedbackId = params.row.id; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/grid/pin.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/grid/pin.ts index 8338214af2a..6caba9435e7 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/grid/pin.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/grid/pin.ts @@ -1,4 +1,4 @@ -import {GridPinnedColumns} from '@mui/x-data-grid-pro'; +import {GridPinnedColumnFields} from '@mui/x-data-grid-pro'; import _ from 'lodash'; const isValidPinValue = (value: any): boolean => { @@ -7,9 +7,9 @@ const isValidPinValue = (value: any): boolean => { // Columns that are always pinned left don't need to be present in serialized state. export const removeAlwaysLeft = ( - pinModel: GridPinnedColumns, + pinModel: GridPinnedColumnFields, alwaysLeft: string[] -): GridPinnedColumns => { +): GridPinnedColumnFields => { if (!pinModel.left) { return pinModel; } @@ -22,9 +22,9 @@ export const removeAlwaysLeft = ( // Ensure specified columns are always pinned left. const ensureAlwaysLeft = ( - pinModel: GridPinnedColumns, + pinModel: GridPinnedColumnFields, alwaysLeft: string[] -): GridPinnedColumns => { +): GridPinnedColumnFields => { let left = pinModel.left ?? []; left = left.filter(col => !alwaysLeft.includes(col)); left = alwaysLeft.concat(left); @@ -36,9 +36,9 @@ const ensureAlwaysLeft = ( export const getValidPinModel = ( jsonString: string, - def: GridPinnedColumns | null = null, + def: GridPinnedColumnFields | null = null, alwaysLeft?: string[] -): GridPinnedColumns => { +): GridPinnedColumnFields => { def = def ?? {}; try { const parsed = JSON.parse(jsonString); @@ -49,7 +49,7 @@ export const getValidPinModel = ( key => ['left', 'right'].includes(key) && isValidPinValue(parsed[key]) ) ) { - const pinModel = parsed as GridPinnedColumns; + const pinModel = parsed as GridPinnedColumnFields; if (alwaysLeft) { return ensureAlwaysLeft(pinModel, alwaysLeft); } diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx index 6ed1b4e114b..b378a218b09 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx @@ -51,6 +51,7 @@ export const CallTraceView: FC<{ headerName: 'Call Tree', headerAlign: 'center', flex: 1, + display: 'flex', renderCell: params => ( { if (row.isCode) { diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsPage.tsx index 4bd4164a123..365f339bc55 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsPage.tsx @@ -2,7 +2,7 @@ import { GridColumnVisibilityModel, GridFilterModel, GridPaginationModel, - GridPinnedColumns, + GridPinnedColumnFields, GridSortModel, } from '@mui/x-data-grid-pro'; import React, {FC, useMemo} from 'react'; @@ -35,8 +35,8 @@ export const CallsPage: FC<{ columnVisibilityModel: GridColumnVisibilityModel; setColumnVisibilityModel: (newModel: GridColumnVisibilityModel) => void; - pinModel: GridPinnedColumns; - setPinModel: (newModel: GridPinnedColumns) => void; + pinModel: GridPinnedColumnFields; + setPinModel: (newModel: GridPinnedColumnFields) => void; filterModel: GridFilterModel; setFilterModel: (newModel: GridFilterModel) => void; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx index 46cf6fc0c11..1bb9e4b307e 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx @@ -15,11 +15,12 @@ import { } from '@mui/material'; import {Box, Typography} from '@mui/material'; import { + GridColDef, GridColumnVisibilityModel, GridFilterModel, GridLogicOperator, GridPaginationModel, - GridPinnedColumns, + GridPinnedColumnFields, GridRowSelectionModel, GridSortModel, useGridApiRef, @@ -96,7 +97,7 @@ export const DEFAULT_COLUMN_VISIBILITY_CALLS = { export const ALWAYS_PIN_LEFT_CALLS = ['CustomCheckbox']; -export const DEFAULT_PIN_CALLS: GridPinnedColumns = { +export const DEFAULT_PIN_CALLS: GridPinnedColumnFields = { left: ['CustomCheckbox', 'op_name'], }; @@ -128,8 +129,8 @@ export const CallsTable: FC<{ columnVisibilityModel?: GridColumnVisibilityModel; setColumnVisibilityModel?: (newModel: GridColumnVisibilityModel) => void; - pinModel?: GridPinnedColumns; - setPinModel?: (newModel: GridPinnedColumns) => void; + pinModel?: GridPinnedColumnFields; + setPinModel?: (newModel: GridPinnedColumnFields) => void; filterModel?: GridFilterModel; setFilterModel?: (newModel: GridFilterModel) => void; @@ -418,7 +419,7 @@ export const CallsTable: FC<{ setSelectedCalls([]); }, [setSelectedCalls]); const muiColumns = useMemo(() => { - const cols = [ + const cols: GridColDef[] = [ { minWidth: 30, width: 38, @@ -427,6 +428,7 @@ export const CallsTable: FC<{ disableColumnMenu: true, resizable: false, disableExport: true, + display: 'flex', renderHeader: (params: any) => { return ( { + (newModel: GridPinnedColumnFields) => { if (!setPinModel || callsLoading) { return; } @@ -781,7 +783,6 @@ export const CallsTable: FC<{ // PAGINATION SECTION END rowHeight={38} columns={muiColumns} - experimentalFeatures={{columnGrouping: true}} disableRowSelectionOnClick rowSelectionModel={rowSelectionModel} // columnGroupingModel={groupingModel} diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx index 162f45cd168..e200337f92b 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx @@ -184,8 +184,9 @@ function buildCallsTableColumns( minWidth: 100, width: 250, hideable: false, - valueGetter: rowParams => { - const op_name = rowParams.row.op_name; + display: 'flex', + valueGetter: (unused: any, row: any) => { + const op_name = row.op_name; if (!isWeaveRef(op_name)) { return op_name; } @@ -237,7 +238,7 @@ function buildCallsTableColumns( { field: 'derived.op_version', headerName: 'Op Version', - type: 'number', + type: 'number' as const, align: 'right' as const, disableColumnMenu: true, sortable: false, @@ -269,8 +270,9 @@ function buildCallsTableColumns( // disableColumnMenu: true, resizable: false, width: 59, - valueGetter: cellParams => { - return traceCallStatusCode(cellParams.row); + display: 'flex', + valueGetter: (unused: any, row: any) => { + return traceCallStatusCode(row); }, renderCell: cellParams => { return ( @@ -309,6 +311,7 @@ function buildCallsTableColumns( align: 'center', sortable: false, resizable: false, + display: 'flex', renderCell: cellParams => { const userId = cellParams.row.wb_user_id; if (userId == null) { @@ -363,8 +366,8 @@ function buildCallsTableColumns( // Should probably have a custom filter here. filterable: false, sortable: false, - valueGetter: cellParams => { - const usage = getUsageFromCellParams(cellParams.row); + valueGetter: (unused: any, row: any) => { + const usage = getUsageFromCellParams(row); const {tokensNum} = getTokensAndCostFromUsage(usage); return tokensNum; }, @@ -384,8 +387,8 @@ function buildCallsTableColumns( // Should probably have a custom filter here. filterable: false, sortable: false, - valueGetter: cellParams => { - const usage = getUsageFromCellParams(cellParams.row); + valueGetter: (unused: any, row: any) => { + const usage = getUsageFromCellParams(row); const {costNum} = getTokensAndCostFromUsage(usage); return costNum; }, @@ -405,13 +408,13 @@ function buildCallsTableColumns( // Should probably have a custom filter here. filterable: false, sortable: false, - valueGetter: cellParams => { - if (traceCallStatusCode(cellParams.row) === 'UNSET') { + valueGetter: (unused: any, row: any) => { + if (traceCallStatusCode(row) === 'UNSET') { // Call is still in progress, latency will be 0. // Displaying nothing seems preferable to being misleading. return null; } - return traceCallLatencyS(cellParams.row); + return traceCallLatencyS(row); }, renderCell: cellParams => { if (traceCallStatusCode(cellParams.row) === 'UNSET') { diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx index 72e39cd1d38..e9ea490709b 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx @@ -274,8 +274,9 @@ const ObjectVersionsTable: React.FC<{ cols.push( basicField('baseObjectClass', 'Category', { width: 100, - valueGetter: cellParams => { - return cellParams.row.obj.baseObjectClass; + display: 'flex', + valueGetter: (unused: any, row: any) => { + return row.obj.baseObjectClass; }, renderCell: cellParams => { const category = cellParams.value; @@ -290,8 +291,8 @@ const ObjectVersionsTable: React.FC<{ cols.push( basicField('createdAtMs', 'Created', { width: 100, - valueGetter: cellParams => { - return cellParams.row.obj.createdAtMs; + valueGetter: (unused: any, row: any) => { + return row.obj.createdAtMs; }, renderCell: cellParams => { const createdAtMs = cellParams.value; @@ -371,7 +372,6 @@ const ObjectVersionsTable: React.FC<{ columnHeaderHeight={40} rowHeight={38} columns={columns} - experimentalFeatures={{columnGrouping: true}} disableRowSelectionOnClick rowSelectionModel={rowSelectionModel} columnGroupingModel={columnGroupingModel} diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx index b6879cc18f0..29c0a8a0bdc 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx @@ -223,7 +223,6 @@ export const FilterableOpVersionsTable: React.FC<{ columnHeaderHeight={40} rowHeight={38} columns={columns} - experimentalFeatures={{columnGrouping: true}} disableRowSelectionOnClick rowSelectionModel={rowSelectionModel} columnGroupingModel={columnGroupingModel} diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx index 533964dbb5c..e9a273491b0 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx @@ -262,6 +262,7 @@ export const buildDynamicColumns = ( field: key, sortable: columnIsSortable && columnIsSortable(key), headerName: key, + display: 'flex', renderHeader: () => { return (
(
); }, - valueGetter: cellParams => { - const val = valueForKey(cellParams.row, key); + valueGetter: (unused: any, row: any) => { + const val = valueForKey(row, key); if (Array.isArray(val) || typeof val === 'object') { try { return JSON.stringify(val); diff --git a/weave-js/yarn.lock b/weave-js/yarn.lock index 45708e8a8df..a47e318e3fe 100644 --- a/weave-js/yarn.lock +++ b/weave-js/yarn.lock @@ -1380,7 +1380,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.22.6", "@babel/runtime@^7.23.2": +"@babel/runtime@^7.23.2": version "7.23.2" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.23.2.tgz#062b0ac103261d68a966c4c7baf2ae3e62ec3885" integrity sha512-mM8eg4yl5D6i3lu2QKPuPH4FArvJ8KhTofbE7jwMUv9KX5mBvwPAqnV3MlyBNqdp9RyRKP6Yck8TrfYrPvX3bg== @@ -1394,7 +1394,7 @@ dependencies: regenerator-runtime "^0.14.0" -"@babel/runtime@^7.25.0": +"@babel/runtime@^7.25.0", "@babel/runtime@^7.25.6": version "7.25.6" resolved "https://registry.yarnpkg.com/@babel/runtime/-/runtime-7.25.6.tgz#9afc3289f7184d8d7f98b099884c26317b9264d2" integrity sha512-VBj9MYyDb9tuLq7yzqjgzt6Q+IBQLrGZfdjOekyEirZPHxXWoTSGUTMrpsfi58Up73d13NfYLv8HT9vmznjzhQ== @@ -2949,7 +2949,7 @@ resolved "https://registry.yarnpkg.com/@mui/types/-/types-7.2.16.tgz#66710c691b51cd4fca95322100cd74ec230cfe30" integrity sha512-qI8TV3M7ShITEEc8Ih15A2vLzZGLhD+/UPNwck/hcls2gwg7dyRjNGXcQYHKLB5Q7PuTRfrTkAoPa2VV1s67Ag== -"@mui/utils@^5.13.7", "@mui/utils@^5.14.16": +"@mui/utils@^5.14.16": version "5.14.18" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.14.18.tgz#d2a46df9b06230423ba6b6317748b27185a56ac3" integrity sha512-HZDRsJtEZ7WMSnrHV9uwScGze4wM/Y+u6pDVo+grUjt5yXzn+wI8QX/JwTHh9YSw/WpnUL80mJJjgCnWj2VrzQ== @@ -2959,7 +2959,7 @@ prop-types "^15.8.1" react-is "^18.2.0" -"@mui/utils@^5.15.14": +"@mui/utils@^5.15.14", "@mui/utils@^5.16.6": version "5.16.6" resolved "https://registry.yarnpkg.com/@mui/utils/-/utils-5.16.6.tgz#905875bbc58d3dcc24531c3314a6807aba22a711" integrity sha512-tWiQqlhxAt3KENNiSRL+DIn9H5xNVK6Jjf70x3PnfQPz1MPBdh7yyIcAyVBT9xiw7hP3SomRhPR7hzBMBCjqEA== @@ -2983,30 +2983,32 @@ prop-types "^15.8.1" react-is "^18.3.1" -"@mui/x-data-grid-pro@^6.16.0": - version "6.18.1" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid-pro/-/x-data-grid-pro-6.18.1.tgz#24ac7bb281729ce84f52f8048d222c572c3ff434" - integrity sha512-UP5SE3fwWHgGZ9l4+4TPkbAw5gE4jzGo3raU47+0OOTrqhYbnu9msGLIRX5oV7SzEeEkLd4HeMlv8ns2lBkVjg== - dependencies: - "@babel/runtime" "^7.23.2" - "@mui/utils" "^5.14.16" - "@mui/x-data-grid" "6.18.1" - "@mui/x-license-pro" "6.10.2" - "@types/format-util" "^1.0.3" - clsx "^2.0.0" +"@mui/x-data-grid-pro@^7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid-pro/-/x-data-grid-pro-7.18.0.tgz#2099c00d837f04cf681674ecbac4e4c294925164" + integrity sha512-g6Ot1s69bfjBRlp6/vwjZgn4CPwX90zt7nx1d28srFD14koet+r/45vg69Bjn7+/REThZMO7g4kcOW2nFkeS8w== + dependencies: + "@babel/runtime" "^7.25.6" + "@mui/utils" "^5.16.6" + "@mui/x-data-grid" "7.18.0" + "@mui/x-internals" "7.18.0" + "@mui/x-license" "7.18.0" + "@types/format-util" "^1.0.4" + clsx "^2.1.1" prop-types "^15.8.1" - reselect "^4.1.8" + reselect "^5.1.1" -"@mui/x-data-grid@6.18.1": - version "6.18.1" - resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-6.18.1.tgz#0b34d7aebd5d8319524f78c9078dcc57becf06f0" - integrity sha512-ibsrWwzM2lRRWB1xs/eop63kaxlXH/qar1S1rQx3fycJiYvK6fsM72jsScBNRlRZQQwRVSGI0ZPBsOZ+/tg7Qw== +"@mui/x-data-grid@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@mui/x-data-grid/-/x-data-grid-7.18.0.tgz#9be96110e0334eb347b09eef68f1d61d3720bb13" + integrity sha512-41UjJbRxWk+Yk/lfvaO55Pwo5p+F5s3rOTiHLl53ikCT5GuJ5OCCvik0Bi3c6DzTuUBdrEucae2618rydc2DGw== dependencies: - "@babel/runtime" "^7.23.2" - "@mui/utils" "^5.14.16" - clsx "^2.0.0" + "@babel/runtime" "^7.25.6" + "@mui/utils" "^5.16.6" + "@mui/x-internals" "7.18.0" + clsx "^2.1.1" prop-types "^15.8.1" - reselect "^4.1.8" + reselect "^5.1.1" "@mui/x-date-pickers@^6.16.0": version "6.20.2" @@ -3021,13 +3023,21 @@ prop-types "^15.8.1" react-transition-group "^4.4.5" -"@mui/x-license-pro@6.10.2": - version "6.10.2" - resolved "https://registry.yarnpkg.com/@mui/x-license-pro/-/x-license-pro-6.10.2.tgz#68b069214efb085f7f8c34b73d450743857e0aea" - integrity sha512-Baw3shilU+eHgU+QYKNPFUKvfS5rSyNJ98pQx02E0gKA22hWp/XAt88K1qUfUMPlkPpvg/uci6gviQSSLZkuKw== +"@mui/x-internals@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@mui/x-internals/-/x-internals-7.18.0.tgz#f079968d4f7ea93e63be9faf6ba8558d6f12923b" + integrity sha512-lzCHOWIR0cAIY1bGrWSprYerahbnH5C31ql/2OWCEjcngL2NAV1M6oKI2Vp4HheqzJ822c60UyWyapvyjSzY/A== + dependencies: + "@babel/runtime" "^7.25.6" + "@mui/utils" "^5.16.6" + +"@mui/x-license@7.18.0": + version "7.18.0" + resolved "https://registry.yarnpkg.com/@mui/x-license/-/x-license-7.18.0.tgz#0f4d8feadc44a309926b03445874d31a70a2b015" + integrity sha512-/UJp4NSQ5iURLQ7Si0oyGhiOqb3rg/HO4LcIxmKICO7Xn9VcupoX9+uDko+UwbCrybkpkC/3lyJEmD+4pbLqbA== dependencies: - "@babel/runtime" "^7.22.6" - "@mui/utils" "^5.13.7" + "@babel/runtime" "^7.25.6" + "@mui/utils" "^5.16.6" "@ndhoule/after@^1.0.0": version "1.0.0" @@ -4232,7 +4242,7 @@ resolved "https://registry.yarnpkg.com/@types/estree/-/estree-1.0.1.tgz#aa22750962f3bf0e79d753d3cc067f010c95f194" integrity sha512-LG4opVs2ANWZ1TJoKc937iMmNstM/d0ae1vNbnBvBhqCSezgVUOzcLCqbI5elV8Vy6WKwKjaqR+zO9VKirBBCA== -"@types/format-util@^1.0.3": +"@types/format-util@^1.0.4": version "1.0.4" resolved "https://registry.yarnpkg.com/@types/format-util/-/format-util-1.0.4.tgz#c4e3b556735149fdf047898a5b9c04650491509b" integrity sha512-xrCYOdHh5zA3LUrn6CvspYwlzSWxPso11Lx32WnAG6KvLCRecKZ/Rh21PLXUkzUFsQmrGcx/traJAFjR6dVS5Q== @@ -12731,10 +12741,10 @@ requires-port@^1.0.0: resolved "https://registry.yarnpkg.com/requires-port/-/requires-port-1.0.0.tgz#925d2601d39ac485e091cf0da5c6e694dc3dcaff" integrity sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ== -reselect@^4.1.8: - version "4.1.8" - resolved "https://registry.yarnpkg.com/reselect/-/reselect-4.1.8.tgz#3f5dc671ea168dccdeb3e141236f69f02eaec524" - integrity sha512-ab9EmR80F/zQTMNeneUr4cv+jSwPJgIlvEmVwLerwrWVbpLlBuls9XHzIeTFy4cegU2NHBp3va0LKOzU5qFEYQ== +reselect@^5.1.1: + version "5.1.1" + resolved "https://registry.yarnpkg.com/reselect/-/reselect-5.1.1.tgz#c766b1eb5d558291e5e550298adb0becc24bb72e" + integrity sha512-K/BG6eIky/SBpzfHZv/dd+9JBFiS4SWV7FIujVyJRux6e45+73RaUHXLmIR1f7WOMaQ0U1km6qwklRQxpJJY0w== resize-observer-polyfill@^1.5.0: version "1.5.1" From ae26b15b65264bb609a4531255bedac5e427e989 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:04:20 -0500 Subject: [PATCH 031/179] fix: was autoscrolling when content hadn't actually changed (#2465) --- .../Home/Browse3/pages/ChatView/ChatView.tsx | 11 +++++++---- 1 file changed, 7 insertions(+), 4 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx index ca74c42da3f..9109a88fc92 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ChatView/ChatView.tsx @@ -1,5 +1,6 @@ import React, {useEffect, useRef} from 'react'; +import {useDeepMemo} from '../../../../../../hookUtils'; import {ChoicesView} from './ChoicesView'; import {HorizontalRuleWithLabel} from './HorizontalRuleWithLabel'; import {MessageList} from './MessageList'; @@ -12,22 +13,24 @@ type ChatViewProps = { export const ChatView = ({chat}: ChatViewProps) => { const outputRef = useRef(null); + const chatResult = useDeepMemo(chat.result); + useEffect(() => { - if (outputRef.current && chat.result && chat.result.choices) { + if (outputRef.current && chatResult && chatResult.choices) { outputRef.current.scrollIntoView(); } - }, [chat.result]); + }, [chatResult]); return (
- {chat.result && chat.result.choices && ( + {chatResult && chatResult.choices && (
)} From fa7f5b85d732ecc3c74692b10948f746b485bc1b Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 21:09:34 +0000 Subject: [PATCH 032/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index e2c967ad070..97f61380faf 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 06c003052a4..b82687ab5e0 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -d1b0e3987c6f40e5d62bdd1ea6b434e582229ced +760f3b7f8e8dd0a852d19de34f36d62be4d2b3d5 From a37b48e2c4134db022def929880902b9a744c876 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Tue, 24 Sep 2024 16:47:47 -0500 Subject: [PATCH 033/179] chore: update page header styling (#2467) --- .../Home/Browse3/pages/common/SimplePageLayout.tsx | 3 +-- 1 file changed, 1 insertion(+), 2 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx index 233c21f23a7..19635eb404f 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx @@ -69,7 +69,6 @@ export const SimplePageLayout: FC<{ pb: 0, height: 55, // manual to match sidebar - borderBottom: '1px solid #e0e0e0', display: 'flex', flexDirection: 'row', alignItems: 'center', @@ -92,7 +91,7 @@ export const SimplePageLayout: FC<{ sx={{ pb: 2, fontWeight: 600, - fontSize: '1.5rem', + fontSize: '1.25rem', flex: '1 1 auto', overflow: 'hidden', textOverflow: 'ellipsis', From d73f271a404d436cb532acf80ab3262352aa1a42 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Tue, 24 Sep 2024 21:52:35 +0000 Subject: [PATCH 034/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 97f61380faf..6672fbfbaef 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index b82687ab5e0..37b02d44ebd 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -760f3b7f8e8dd0a852d19de34f36d62be4d2b3d5 +c82c4e62913fa4f752f81d2f36f7b9a5a3908345 From 9660326d6a99fa873e5a39e8b0ed99aeb8b110f7 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Tue, 24 Sep 2024 20:25:44 -0700 Subject: [PATCH 035/179] chore: Fix image zoom in docs #2469 --- docs/docusaurus.config.ts | 4 ++-- docs/src/components/DesktopImage/index.tsx | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/docs/docusaurus.config.ts b/docs/docusaurus.config.ts index b5593d6949a..81ecbc46047 100644 --- a/docs/docusaurus.config.ts +++ b/docs/docusaurus.config.ts @@ -238,8 +238,8 @@ const config: Config = { ], }, imageZoom: { - // CSS selector to apply the plugin to, defaults to '.markdown img' - selector: '.markdown img', + // CSS selector to apply the plugin to + selector: 'img.zoomable', // Optional medium-zoom options // see: https://www.npmjs.com/package/medium-zoom#options options: {}, diff --git a/docs/src/components/DesktopImage/index.tsx b/docs/src/components/DesktopImage/index.tsx index a1adaebfa97..f7cde6b4a2e 100644 --- a/docs/src/components/DesktopImage/index.tsx +++ b/docs/src/components/DesktopImage/index.tsx @@ -46,7 +46,7 @@ export const DesktopWindow = ({ images, alt }) => { {`${alt}
))} From 0658afcf8b6083fc3b374562de06b7c59067a31d Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Wed, 25 Sep 2024 16:42:19 +0000 Subject: [PATCH 036/179] =?UTF-8?q?Release=20version:=200.51.9-dev0=20?= =?UTF-8?q?=E2=86=92=200.51.9?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- weave/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index cd64a09ed2d..236a1afd5dc 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -115,7 +115,7 @@ exclude = [ ] [tool.bumpversion] -current_version = "0.51.9-dev0" +current_version = "0.51.9" parse = """(?x) (?P0|[1-9]\\d*)\\. (?P0|[1-9]\\d*)\\. diff --git a/weave/version.py b/weave/version.py index 6c12423b0f6..60bae67c266 100644 --- a/weave/version.py +++ b/weave/version.py @@ -44,4 +44,4 @@ """ -VERSION = "0.51.9-dev0" +VERSION = "0.51.9" From 21c940a1552856aefba66cb12d48a6f93ed73c7f Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Wed, 25 Sep 2024 16:42:20 +0000 Subject: [PATCH 037/179] =?UTF-8?q?Release=20version:=200.51.9=20=E2=86=92?= =?UTF-8?q?=200.51.10-dev0?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- pyproject.toml | 2 +- weave/version.py | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/pyproject.toml b/pyproject.toml index 236a1afd5dc..58061c8c38e 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -115,7 +115,7 @@ exclude = [ ] [tool.bumpversion] -current_version = "0.51.9" +current_version = "0.51.10-dev0" parse = """(?x) (?P0|[1-9]\\d*)\\. (?P0|[1-9]\\d*)\\. diff --git a/weave/version.py b/weave/version.py index 60bae67c266..d9eef314416 100644 --- a/weave/version.py +++ b/weave/version.py @@ -44,4 +44,4 @@ """ -VERSION = "0.51.9" +VERSION = "0.51.10-dev0" From bf07f704423d2b1ca8fccef96bc78e43954f48fd Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Wed, 25 Sep 2024 11:23:51 -0700 Subject: [PATCH 038/179] chore: Attempt to fix Langchain CI #2477 --- .../langchain_test/test_agent_run_with_function_call.yaml | 2 +- .../cassettes/langchain_test/test_agent_run_with_tools.yaml | 2 +- .../cassettes/langchain_test/test_simple_chain_astream.yaml | 2 +- .../cassettes/langchain_test/test_simple_chain_batch.yaml | 4 ++-- .../langchain_test/test_simple_chain_batch_inside_op.yaml | 4 ++-- .../cassettes/langchain_test/test_simple_chain_invoke.yaml | 2 +- .../cassettes/langchain_test/test_simple_chain_stream.yaml | 2 +- .../cassettes/langchain_test/test_simple_rag_chain.yaml | 6 +++--- 8 files changed, 12 insertions(+), 12 deletions(-) diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_function_call.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_function_call.yaml index a3fa7586c13..940257873e3 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_function_call.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_function_call.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_tools.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_tools.yaml index 3c16b29df19..3235cd94f03 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_tools.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_agent_run_with_tools.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_astream.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_astream.yaml index 44032dc43f9..20371e65d0b 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_astream.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_astream.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch.yaml index 1fa576468dc..93ec7fe15ec 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: @@ -117,7 +117,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch_inside_op.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch_inside_op.yaml index 4e037ba469c..cf8a3bab232 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch_inside_op.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_batch_inside_op.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: @@ -117,7 +117,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_invoke.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_invoke.yaml index d0a9d023d0e..757b382bb21 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_invoke.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_invoke.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_stream.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_stream.yaml index 59950c8b170..5499342e3a8 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_stream.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_chain_stream.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: diff --git a/weave/integrations/langchain/cassettes/langchain_test/test_simple_rag_chain.yaml b/weave/integrations/langchain/cassettes/langchain_test/test_simple_rag_chain.yaml index d95c2955e67..89b310978b6 100644 --- a/weave/integrations/langchain/cassettes/langchain_test/test_simple_rag_chain.yaml +++ b/weave/integrations/langchain/cassettes/langchain_test/test_simple_rag_chain.yaml @@ -25,7 +25,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: @@ -3685,7 +3685,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: @@ -3878,7 +3878,7 @@ interactions: x-stainless-os: - Linux x-stainless-package-version: - - 1.35.13 + - 1.48.0 x-stainless-runtime: - CPython x-stainless-runtime-version: From ca198952e0756f489e7a0b6551d04db1dbff2bc2 Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Wed, 25 Sep 2024 11:39:30 -0700 Subject: [PATCH 039/179] fix: version index on obj/read bug (#2478) --- weave/tests/trace/test_weave_client.py | 37 +++++++++++++++++++ .../clickhouse_trace_server_batched.py | 24 ++++-------- 2 files changed, 44 insertions(+), 17 deletions(-) diff --git a/weave/tests/trace/test_weave_client.py b/weave/tests/trace/test_weave_client.py index 1d82ab05d10..3f03fc90d49 100644 --- a/weave/tests/trace/test_weave_client.py +++ b/weave/tests/trace/test_weave_client.py @@ -1402,3 +1402,40 @@ def f(a): calls = list(calls) assert len(calls) == 1 assert calls[0].output["table"] == o.table.table_ref.uri() + + +def test_object_version_read(client): + refs = [] + for i in range(10): + refs.append(weave.publish({"a": i})) + + # read all objects, check the version + objs = client.server.objs_query( + tsi.ObjQueryReq( + project_id=client._project_id(), + object_id=refs[0].name, + ) + ).objs + assert len(objs) == 10 + assert objs[0].version_index == 0 + assert objs[1].version_index == 1 + assert objs[2].version_index == 2 + assert objs[3].version_index == 3 + assert objs[4].version_index == 4 + assert objs[5].version_index == 5 + assert objs[6].version_index == 6 + assert objs[7].version_index == 7 + assert objs[8].version_index == 8 + assert objs[9].version_index == 9 + + # read each object one at a time, check the version + for i in range(10): + obj_res = client.server.obj_read( + tsi.ObjReadReq( + project_id=client._project_id(), + object_id=refs[i].name, + digest=refs[i].digest, + ) + ) + assert obj_res.obj.val == {"a": i} + assert obj_res.obj.version_index == i diff --git a/weave/trace_server/clickhouse_trace_server_batched.py b/weave/trace_server/clickhouse_trace_server_batched.py index bfae010693e..3cb3f9a3033 100644 --- a/weave/trace_server/clickhouse_trace_server_batched.py +++ b/weave/trace_server/clickhouse_trace_server_batched.py @@ -542,20 +542,18 @@ def ops_query(self, req: tsi.OpQueryReq) -> tsi.OpQueryRes: parameters = {} conds: list[str] = ["is_op = 1"] object_id_conditions: list[str] = [] - is_latest = False if req.filter: if req.filter.op_names: object_id_conditions.append("object_id IN {op_names: Array(String)}") parameters["op_names"] = req.filter.op_names if req.filter.latest_only: - is_latest = True + conds.append("is_latest = 1") ch_objs = self._select_objs_query( req.project_id, conditions=conds, object_id_conditions=object_id_conditions, parameters=parameters, - is_latest=is_latest, ) objs = [_ch_obj_to_obj_schema(call) for call in ch_objs] return tsi.OpQueryRes(op_objs=objs) @@ -586,8 +584,9 @@ def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: conds: list[str] = [] object_id_conditions = ["object_id = {object_id: String}"] parameters: Dict[str, Union[str, int]] = {"object_id": req.object_id} - is_latest = req.digest == "latest" - if not is_latest: + if req.digest == "latest": + conds.append("is_latest = 1") + else: (is_version, version_index) = _digest_is_version_like(req.digest) if is_version: conds.append("version_index = {version_index: UInt64}") @@ -600,7 +599,6 @@ def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: conditions=conds, object_id_conditions=object_id_conditions, parameters=parameters, - is_latest=is_latest, ) if len(objs) == 0: raise NotFoundError(f"Obj {req.object_id}:{req.digest} not found") @@ -611,7 +609,6 @@ def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: conds: list[str] = [] object_id_conditions: list[str] = [] parameters = {} - is_latest = False if req.filter: if req.filter.is_op is not None: if req.filter.is_op: @@ -622,7 +619,7 @@ def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: object_id_conditions.append("object_id IN {object_ids: Array(String)}") parameters["object_ids"] = req.filter.object_ids if req.filter.latest_only: - is_latest = True + conds.append("is_latest = 1") if req.filter.base_object_classes: conds.append( "base_object_class IN {base_object_classes: Array(String)}" @@ -634,7 +631,6 @@ def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: conditions=conds, object_id_conditions=object_id_conditions, parameters=parameters, - is_latest=is_latest, metadata_only=req.metadata_only, limit=req.limit, offset=req.offset, @@ -1422,7 +1418,6 @@ def _select_objs_query( conditions: Optional[list[str]] = None, object_id_conditions: Optional[list[str]] = None, parameters: Optional[Dict[str, Any]] = None, - is_latest: bool = False, metadata_only: Optional[bool] = False, limit: Optional[int] = None, offset: Optional[int] = None, @@ -1440,9 +1435,6 @@ def _select_objs_query( parameters: parameters to be passed to the query. Must include all parameters for both conditions and object_id_conditions. - is_latest: - if is_latest is True, then we add the condition "is_latest = 1" to the outer - query, and only return the most recent version of each object. metadata_only: if metadata_only is True, then we exclude the val_dump field in the select query. generally, "queries" should not include the val_dump, but "reads" should, as @@ -1455,7 +1447,6 @@ def _select_objs_query( conditions_part = combine_conditions(conditions, "AND") object_id_conditions_part = combine_conditions(object_id_conditions, "AND") - is_latest_part = "is_latest = 1" if is_latest else "1 = 1" limit_part = "" offset_part = "" @@ -1537,10 +1528,9 @@ def _select_objs_query( WHERE project_id = {{project_id: String}} AND {object_id_conditions_part} ) - WHERE rn = 1 AND - {conditions_part} + WHERE rn = 1 ) - WHERE {is_latest_part} + WHERE {conditions_part} {sort_part} {limit_part} {offset_part} From d581262e677faec401d228e1b69577328e1b4014 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:20:56 -0500 Subject: [PATCH 040/179] chore: remove horizontal lines from trace tree (#2472) --- .../Home/Browse3/pages/CallPage/CallTraceView.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx index b378a218b09..558020e460a 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx @@ -177,7 +177,7 @@ export const CallTraceView: FC<{ fontFamily: 'Source Sans Pro', '&>.MuiDataGrid-main': { '& div div div div >.MuiDataGrid-cell': { - borderBottom: 'none', + borderTop: 'none', }, '& div div div div >.MuiDataGrid-cell:focus': { outline: 'none', From ee93f344a757a76dd4a0169bd62f73918bd374e5 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 14:24:20 -0500 Subject: [PATCH 041/179] chore: remove semibold styling from table headers (#2468) --- .../Home/Browse2/CollapseGroupHeader.tsx | 1 - .../PagePanelComponents/Home/Browse2/ExpandHeader.tsx | 1 - .../PagePanelComponents/Home/Browse3/StyledDataGrid.tsx | 2 +- .../pages/common/tabularListViews/columnBuilder.tsx | 9 +-------- 4 files changed, 2 insertions(+), 11 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse2/CollapseGroupHeader.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse2/CollapseGroupHeader.tsx index a0afabfaeda..13d603fc1ef 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse2/CollapseGroupHeader.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse2/CollapseGroupHeader.tsx @@ -16,7 +16,6 @@ type CollapseGroupHeaderProps = { export const Header = styled.div` display: flex; align-items: center; - font-weight: 600; `; Header.displayName = 'S.Header'; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse2/ExpandHeader.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse2/ExpandHeader.tsx index 2dbac1561b3..f2139fd819b 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse2/ExpandHeader.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse2/ExpandHeader.tsx @@ -17,7 +17,6 @@ type ExpandHeaderProps = { export const Header = styled.div` display: flex; align-items: center; - font-weight: 600; `; Header.displayName = 'S.Header'; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx index c29cf64b846..905e05e3587 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/StyledDataGrid.tsx @@ -52,7 +52,7 @@ export const StyledDataGrid = styled( }, '& .MuiDataGrid-columnHeaderTitle': { - fontWeight: 600, + fontWeight: 400, }, '& .MuiDataGrid-columnHeader:focus, .MuiDataGrid-cell:focus': { diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx index e9a273491b0..a7392c0e875 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/tabularListViews/columnBuilder.tsx @@ -264,14 +264,7 @@ export const buildDynamicColumns = ( headerName: key, display: 'flex', renderHeader: () => { - return ( -
- {key.split('.').slice(-1)[0]} -
- ); + return
{key.split('.').slice(-1)[0]}
; }, valueGetter: (unused: any, row: any) => { const val = valueForKey(row, key); From a617d5d76c8f316ee927caeb2dbef12e9374ffe5 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Wed, 25 Sep 2024 19:28:34 +0000 Subject: [PATCH 042/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 6672fbfbaef..16713fa4b01 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 37b02d44ebd..95899a3bf27 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -c82c4e62913fa4f752f81d2f36f7b9a5a3908345 +d5579923600f0288d8e2e0f68023e81fdeb69fb1 From a00ac569949d11e0dcd834b2a6a8ed31d77ba95c Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:05:05 -0500 Subject: [PATCH 043/179] fix: object viewer height not updating correctly (#2480) --- .../Home/Browse3/pages/CallPage/ObjectViewer.tsx | 1 + 1 file changed, 1 insertion(+) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewer.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewer.tsx index 231805cbe37..a3b999296a8 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewer.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewer.tsx @@ -428,6 +428,7 @@ export const ObjectViewer = ({ isGroupExpandedByDefault={node => { return expandedIds.includes(node.id); }} + autoHeight columnHeaderHeight={38} getRowHeight={(params: GridRowHeightParams) => { const isNonRefString = From b3d7d18d9c8097a95dae112d48668cd73de574d5 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:08:36 -0500 Subject: [PATCH 044/179] chore: use smaller checkbox in call grid (#2473) --- .../Home/Browse3/pages/CallsPage/CallsTable.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx index 1bb9e4b307e..bbe9d5c230c 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTable.tsx @@ -422,7 +422,7 @@ export const CallsTable: FC<{ const cols: GridColDef[] = [ { minWidth: 30, - width: 38, + width: 34, field: 'CustomCheckbox', sortable: false, disableColumnMenu: true, @@ -432,6 +432,7 @@ export const CallsTable: FC<{ renderHeader: (params: any) => { return ( { From a8f75ff874a9cf60aa6633aec0cdbbeaf98802a0 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Wed, 25 Sep 2024 20:12:38 +0000 Subject: [PATCH 045/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 16713fa4b01..71e905b4a9d 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 95899a3bf27..cd64e56bea3 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -d5579923600f0288d8e2e0f68023e81fdeb69fb1 +ddaf0951f63d528c85f7950c32b8c5b9abb15126 From 7b7bfbcbf8855f379615509d7482ab777cb616af Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:14:52 -0500 Subject: [PATCH 046/179] chore: add miller columns icon (#2481) --- weave-js/src/assets/icons/icon-miller-columns.svg | 3 +++ weave-js/src/components/Icon/Icon.tsx | 5 +++++ weave-js/src/components/Icon/index.ts | 1 + weave-js/src/components/Icon/types.ts | 1 + 4 files changed, 10 insertions(+) create mode 100644 weave-js/src/assets/icons/icon-miller-columns.svg diff --git a/weave-js/src/assets/icons/icon-miller-columns.svg b/weave-js/src/assets/icons/icon-miller-columns.svg new file mode 100644 index 00000000000..0ac1bce344b --- /dev/null +++ b/weave-js/src/assets/icons/icon-miller-columns.svg @@ -0,0 +1,3 @@ + + + diff --git a/weave-js/src/components/Icon/Icon.tsx b/weave-js/src/components/Icon/Icon.tsx index b58c9ec540b..862f50bef2d 100644 --- a/weave-js/src/components/Icon/Icon.tsx +++ b/weave-js/src/components/Icon/Icon.tsx @@ -125,6 +125,7 @@ import {ReactComponent as ImportMagicWandStar} from '../../assets/icons/icon-mag import {ReactComponent as ImportMagicWandStick} from '../../assets/icons/icon-magic-wand-stick.svg'; import {ReactComponent as ImportMenu} from '../../assets/icons/icon-menu.svg'; import {ReactComponent as ImportMicrophoneAudio} from '../../assets/icons/icon-microphone-audio.svg'; +import {ReactComponent as ImportMillerColumns} from '../../assets/icons/icon-miller-columns.svg'; import {ReactComponent as ImportMinimizeMode} from '../../assets/icons/icon-minimize-mode.svg'; import {ReactComponent as ImportModel} from '../../assets/icons/icon-model.svg'; import {ReactComponent as ImportModelOnDark} from '../../assets/icons/icon-model-on-dark.svg'; @@ -635,6 +636,9 @@ export const IconMenu = (props: SVGIconProps) => ( export const IconMicrophoneAudio = (props: SVGIconProps) => ( ); +export const IconMillerColumns = (props: SVGIconProps) => ( + +); export const IconMinimizeMode = (props: SVGIconProps) => ( ); @@ -1125,6 +1129,7 @@ const ICON_NAME_TO_ICON: Record = { 'magic-wand-stick': IconMagicWandStick, menu: IconMenu, 'microphone-audio': IconMicrophoneAudio, + 'miller-columns': IconMillerColumns, 'minimize-mode': IconMinimizeMode, model: IconModel, 'model-on-dark': IconModelOnDark, diff --git a/weave-js/src/components/Icon/index.ts b/weave-js/src/components/Icon/index.ts index 925afd692c4..08a4d6c6bef 100644 --- a/weave-js/src/components/Icon/index.ts +++ b/weave-js/src/components/Icon/index.ts @@ -125,6 +125,7 @@ export { IconMagicWandStick, IconMenu, IconMicrophoneAudio, + IconMillerColumns, IconMinimizeMode, IconModel, IconModelOnDark, diff --git a/weave-js/src/components/Icon/types.ts b/weave-js/src/components/Icon/types.ts index dc18268ee2f..f47bd5ae09f 100644 --- a/weave-js/src/components/Icon/types.ts +++ b/weave-js/src/components/Icon/types.ts @@ -124,6 +124,7 @@ export const IconNames = { MagicWandStick: 'magic-wand-stick', Menu: 'menu', MicrophoneAudio: 'microphone-audio', + MillerColumns: 'miller-columns', MinimizeMode: 'minimize-mode', Model: 'model', ModelOnDark: 'model-on-dark', From 6eac6848357a239ae88da1e9ed41955443714e69 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 15:15:37 -0500 Subject: [PATCH 047/179] chore: make trace links teal colored (#2474) --- .../Home/Browse3/pages/CallsPage/callsTableColumns.tsx | 2 ++ 1 file changed, 2 insertions(+) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx index e200337f92b..8c2c84ecb48 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableColumns.tsx @@ -12,6 +12,7 @@ import {Tooltip} from '@wandb/weave/components/Tooltip'; import {UserLink} from '@wandb/weave/components/UserLink'; import React, {useCallback, useEffect, useMemo, useState} from 'react'; +import {TEAL_600} from '../../../../../../common/css/color.styles'; import {monthRoundedTime} from '../../../../../../common/util/time'; import {isWeaveObjectRef, parseRef} from '../../../../../../react'; import {makeRefCall} from '../../../../../../util/refs'; @@ -205,6 +206,7 @@ function buildCallsTableColumns( callId={rowParams.row.id} fullWidth={true} preservePath={preservePath} + color={TEAL_600} /> ); }, From 05e81b0120350c104ac056e51a2ab2fbddcbf849 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Wed, 25 Sep 2024 20:19:39 +0000 Subject: [PATCH 048/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 71e905b4a9d..befb802c919 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index cd64e56bea3..ac08bbb51cc 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -ddaf0951f63d528c85f7950c32b8c5b9abb15126 +1162d216e69436dca16efb3385ddc6ad9de560dd From a4ee3ae63c9665cefa1831792e29f1c285df7f03 Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Wed, 25 Sep 2024 13:20:08 -0700 Subject: [PATCH 049/179] test: add test for string version object read (#2479) --- weave/tests/trace/test_client_trace.py | 5 +--- weave/tests/trace/test_weave_client.py | 32 +++++++++++++++++++++++++- weave/tests/trace/util.py | 6 +++++ 3 files changed, 38 insertions(+), 5 deletions(-) diff --git a/weave/tests/trace/test_client_trace.py b/weave/tests/trace/test_client_trace.py index 6e3aefc36a7..90f15b14066 100644 --- a/weave/tests/trace/test_client_trace.py +++ b/weave/tests/trace/test_client_trace.py @@ -20,6 +20,7 @@ DatetimeMatcher, FuzzyDateTimeMatcher, MaybeStringMatcher, + client_is_sqlite, ) from weave.trace import weave_client from weave.trace.object_record import ObjectRecord @@ -791,10 +792,6 @@ def basic_op(in_val: dict) -> dict: assert call.inputs["in_val"].get("prim") == seq[i] -def client_is_sqlite(client): - return isinstance(client.server._internal_trace_server, SqliteTraceServer) - - def test_trace_call_filter(client): is_sqlite = client_is_sqlite(client) diff --git a/weave/tests/trace/test_weave_client.py b/weave/tests/trace/test_weave_client.py index 3f03fc90d49..cd2ff4c7633 100644 --- a/weave/tests/trace/test_weave_client.py +++ b/weave/tests/trace/test_weave_client.py @@ -12,7 +12,12 @@ import weave.trace_server.trace_server_interface as tsi from weave import Evaluation from weave.legacy.weave import op_def -from weave.tests.trace.util import AnyIntMatcher, DatetimeMatcher, RegexStringMatcher +from weave.tests.trace.util import ( + AnyIntMatcher, + DatetimeMatcher, + RegexStringMatcher, + client_is_sqlite, +) from weave.trace import refs, weave_client from weave.trace.isinstance import weave_isinstance from weave.trace.op import Op, is_op @@ -1405,6 +1410,9 @@ def f(a): def test_object_version_read(client): + if client_is_sqlite(client): + return + refs = [] for i in range(10): refs.append(weave.publish({"a": i})) @@ -1439,3 +1447,25 @@ def test_object_version_read(client): ) assert obj_res.obj.val == {"a": i} assert obj_res.obj.version_index == i + + # now grab the latest version of the object + obj_res = client.server.obj_read( + tsi.ObjReadReq( + project_id=client._project_id(), + object_id=refs[0].name, + digest="latest", + ) + ) + assert obj_res.obj.val == {"a": 9} + assert obj_res.obj.version_index == 9 + + # now grab version 5 + obj_res = client.server.obj_read( + tsi.ObjReadReq( + project_id=client._project_id(), + object_id=refs[0].name, + digest="v5", + ) + ) + assert obj_res.obj.val == {"a": 5} + assert obj_res.obj.version_index == 5 diff --git a/weave/tests/trace/util.py b/weave/tests/trace/util.py index abc3fe45840..69a3de1b6e6 100644 --- a/weave/tests/trace/util.py +++ b/weave/tests/trace/util.py @@ -1,6 +1,12 @@ import datetime import re +from weave.trace_server.sqlite_trace_server import SqliteTraceServer + + +def client_is_sqlite(client): + return isinstance(client.server._internal_trace_server, SqliteTraceServer) + class AnyIntMatcher: """Matches any integer.""" From 651adf863f51e5273991233a62e7b5f04acd72e8 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Wed, 25 Sep 2024 13:57:50 -0700 Subject: [PATCH 050/179] chore: Disable inputs auto expand #2482 --- .../Home/Browse3/pages/CallPage/CallDetails.tsx | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallDetails.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallDetails.tsx index 2b3eb38ec44..b9e4201e410 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallDetails.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallDetails.tsx @@ -129,7 +129,7 @@ export const CallDetails: FC<{ }}> - + Date: Wed, 25 Sep 2024 21:02:08 +0000 Subject: [PATCH 051/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index befb802c919..e0038b23627 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index ac08bbb51cc..3c4e3c03eaf 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -1162d216e69436dca16efb3385ddc6ad9de560dd +8a7ed2ced027435c44be054fbc92af1cd4512081 From 31201792752ce0f4652375075c832ff5a2a0e360 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Wed, 25 Sep 2024 21:19:40 -0500 Subject: [PATCH 052/179] chore: update empty feedback styling (#2483) --- weave-js/src/common/util/links.tsx | 3 ++ .../Home/Browse3/feedback/FeedbackGrid.tsx | 21 ++++++++-- .../Home/Browse3/pages/common/Empty.tsx | 38 ++++++++++--------- 3 files changed, 41 insertions(+), 21 deletions(-) diff --git a/weave-js/src/common/util/links.tsx b/weave-js/src/common/util/links.tsx index 61c62d1090e..bb875cdefc0 100644 --- a/weave-js/src/common/util/links.tsx +++ b/weave-js/src/common/util/links.tsx @@ -102,11 +102,14 @@ export const TargetBlank: FCWithRef< ) { passthroughProps.href = getConfig().urlPrefixed(passthroughProps.href); } + // Tailwind default styling overrides styled components, need to specify here too. + const className = 'font-semibold text-teal-600 hover:text-teal-500'; return ( // eslint-disable-next-line wandb/no-a-tags {children} diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGrid.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGrid.tsx index aa86af6062d..d4330e51575 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGrid.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/feedback/FeedbackGrid.tsx @@ -3,9 +3,11 @@ import _ from 'lodash'; import React, {useEffect} from 'react'; import {useViewerInfo} from '../../../../../common/hooks/useViewerInfo'; +import {TargetBlank} from '../../../../../common/util/links'; import {Alert} from '../../../../Alert'; import {Loading} from '../../../../Loading'; import {Tailwind} from '../../../../Tailwind'; +import {Empty} from '../pages/common/Empty'; import {useWFHooks} from '../pages/wfReactInterface/context'; import {useGetTraceServerClientContext} from '../pages/wfReactInterface/traceServerClientContext'; import {FeedbackGridInner} from './FeedbackGridInner'; @@ -60,11 +62,22 @@ export const FeedbackGrid = ({ } if (!query.result || !query.result.length) { - const obj = objectType ?? 'object'; return ( -
- No feedback added to this {obj}. -
+ + Learn how to{' '} + + add feedback + + . + + } + /> ); } diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Empty.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Empty.tsx index 85d9f562a39..b9b8e75cf5e 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Empty.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Empty.tsx @@ -9,11 +9,14 @@ import * as Colors from '../../../../../../common/css/color.styles'; import {hexToRGB} from '../../../../../../common/css/utils'; import {Icon, IconName} from '../../../../../Icon'; +type EmptySize = 'small' | 'medium'; + export type EmptyProps = { icon: IconName; heading: string; description: string; moreInformation: React.ReactNode; + size?: EmptySize; }; const Container = styled.div` @@ -32,10 +35,10 @@ const Content = styled.div` `; Content.displayName = 'S.Content'; -const Circle = styled.div` +const Circle = styled.div<{size: EmptySize}>` border-radius: 50%; - width: 80px; - height: 80px; + width: ${props => (props.size === 'small' ? '60px' : '80px')}; + height: ${props => (props.size === 'small' ? '60px' : '80px')}; background-color: ${hexToRGB(Colors.TEAL_300, 0.48)}; display: flex; align-items: center; @@ -44,16 +47,16 @@ const Circle = styled.div` `; Circle.displayName = 'S.Circle'; -const CircleIcon = styled(Icon)` - width: 33px; - height: 33px; +const CircleIcon = styled(Icon)<{size: EmptySize}>` + width: ${props => (props.size === 'small' ? '25px' : '33px')}; + height: ${props => (props.size === 'small' ? '25px' : '33px')}; color: ${Colors.TEAL_600}; `; CircleIcon.displayName = 'S.CircleIcon'; -const Heading = styled.div` +const Heading = styled.div<{size: EmptySize}>` font-family: Source Sans Pro; - font-size: 24px; + font-size: ${props => (props.size === 'small' ? '20px' : '24px')}; font-weight: 600; line-height: 32px; text-align: left; @@ -62,9 +65,9 @@ const Heading = styled.div` `; Heading.displayName = 'S.Heading'; -const Description = styled.div` +const Description = styled.div<{size: EmptySize}>` font-family: Source Sans Pro; - font-size: 18px; + font-size: ${props => (props.size === 'small' ? '14px' : '18px')}; font-weight: 400; line-height: 25.2px; text-align: center; @@ -73,9 +76,9 @@ const Description = styled.div` `; Description.displayName = 'S.Description'; -const MoreInformation = styled.div` +const MoreInformation = styled.div<{size: EmptySize}>` font-family: Source Sans Pro; - font-size: 16px; + font-size: ${props => (props.size === 'small' ? '14px' : '16px')}; font-weight: 400; line-height: 22.4px; text-align: center; @@ -88,16 +91,17 @@ export const Empty = ({ heading, description, moreInformation, + size = 'medium', }: EmptyProps) => { return ( - - + + - {heading} - {description} - {moreInformation} + {heading} + {description} + {moreInformation} ); From 7e3c4e6ec09c695991fc5f6a21b2fa6a42dd816a Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 02:23:22 +0000 Subject: [PATCH 053/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 4 ++-- weave/frontend/sha1.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index e0038b23627..1d8a3480d88 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,8 +91,8 @@ - - + + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 3c4e3c03eaf..e10452f20ca 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -8a7ed2ced027435c44be054fbc92af1cd4512081 +4b1fe03e0643e2ad771b26b3244aab1872f786a8 From b325cac4c707bc6cbce8b96c4a9373666f1e8649 Mon Sep 17 00:00:00 2001 From: Soumik Rakshit <19soumik.rakshit96@gmail.com> Date: Thu, 26 Sep 2024 08:30:20 +0530 Subject: [PATCH 054/179] feat(integration): Add Instructor integration (#2402) * add: instructor integration * fix: lint * update: test dependencies * add: integration docs * add: tox shard for instructor integration * add: instructor autopatch * chore: adress feedback * refactor: unit tests * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback * chore: adress feedback --- .github/workflows/test.yaml | 1 + .../imgs/instructor/instructor_lm_trace.gif | Bin 0 -> 3086547 bytes .../imgs/instructor/instructor_op_trace.png | Bin 0 -> 377822 bytes .../imgs/instructor/instructor_serve.png | Bin 0 -> 359422 bytes .../instructor/instructor_weave_model.png | Bin 0 -> 204362 bytes docs/docs/guides/integrations/instructor.md | 164 +++++ docs/sidebars.ts | 1 + requirements.test.txt | 2 +- tox.ini | 4 +- weave/integrations/instructor/__init__.py | 0 .../test_instructor_iterable.yaml | 114 ++++ ...test_instructor_iterable_async_stream.yaml | 268 ++++++++ .../test_instructor_iterable_sync_stream.yaml | 268 ++++++++ .../test_instructor_openai.yaml | 104 +++ .../test_instructor_openai_async.yaml | 104 +++ .../test_instructor_partial_stream.yaml | 629 ++++++++++++++++++ .../test_instructor_partial_stream_async.yaml | 623 +++++++++++++++++ .../instructor/instructor_iterable_utils.py | 61 ++ .../instructor/instructor_partial_utils.py | 27 + .../integrations/instructor/instructor_sdk.py | 31 + .../instructor/instructor_test.py | 422 ++++++++++++ weave/trace/autopatch.py | 4 + 22 files changed, 2825 insertions(+), 2 deletions(-) create mode 100644 docs/docs/guides/integrations/imgs/instructor/instructor_lm_trace.gif create mode 100644 docs/docs/guides/integrations/imgs/instructor/instructor_op_trace.png create mode 100644 docs/docs/guides/integrations/imgs/instructor/instructor_serve.png create mode 100644 docs/docs/guides/integrations/imgs/instructor/instructor_weave_model.png create mode 100644 docs/docs/guides/integrations/instructor.md create mode 100644 weave/integrations/instructor/__init__.py create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_async_stream.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_sync_stream.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai_async.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream.yaml create mode 100644 weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream_async.yaml create mode 100644 weave/integrations/instructor/instructor_iterable_utils.py create mode 100644 weave/integrations/instructor/instructor_partial_utils.py create mode 100644 weave/integrations/instructor/instructor_sdk.py create mode 100644 weave/integrations/instructor/instructor_test.py diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index a37bcf9e120..24fd4386c7f 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -170,6 +170,7 @@ jobs: 'cohere', 'dspy', 'groq', + 'instructor', 'langchain', 'litellm', 'llamaindex', diff --git a/docs/docs/guides/integrations/imgs/instructor/instructor_lm_trace.gif b/docs/docs/guides/integrations/imgs/instructor/instructor_lm_trace.gif new file mode 100644 index 0000000000000000000000000000000000000000..c86b9b8c9ab8a9baa33389e4f9852c21d4c7f955 GIT binary patch literal 3086547 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�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

#W=D?Jp9<%j@h8FRRTi%GzCU{-{vW^*;iVSlKI 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 z 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%0A7h&FsZa&CU+Z(VpznzU+@|=F(2=*$(a6 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 d(mDl^Ij@ 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

%Pc|KB~!;{F##iWdA7UL%@=0ssp4x2mC&k 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�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 z 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%0DLt#!&H_Z-c2 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¬&mIID@$x4?DcdH++&ooC}|P%hBb)qb|KS6s%jE#mU?a7i%sIWx-S5mPJ=8@Vau)p{Bs0Km+|E&*MR#1) zJ#*Ay-Bp6TFSz{4mNTr=3o;@NAkAq2~4o0D@7{V4oroh=eiK?$$Q14FEW; zmSS|IHDD8BNMkjV7BHIeR_p^;HKCQ<*NIdId))_jz4IoI>n$SiNFf2Dpbb{H@!);&{ekLDXWFfLBhotdSM}Pn zpOj^p;1^>0Wu9@gU3OL4)Y};FB3fZ(=b~HwAgEpn3RVJ)ccB2nmwlB zW=)J97vco@Fy}~_LWdSLige?^pb%?H9Jv#z)TvafTD^)jtJbYtyL$Z!HmumOWXqa8 zi#Dy=wQSqEeG50P+_`k?+P#a{Ez`Vw%l_*NII!TsgbN!!j5u*zd$#tDrAX1%ugH^s zNv4e1a^=glq)132Va(>qZ4yLCqNUa7%$GH@UhO(|>)Eg+%cT7}x9r+Vxw>YPKmw`1 z1ZRsRB_RPB#UMMsBo2}c0x7J##!;JLTj0$|JB>mfIfW%YUa z&|2u#JCuFjHb>1w-7^PUSyGYxM__>l9*AIq3NFZCgAP6j|6zm@PFPn)6b1&}g&J8m`iK#b zbqt9liUI^V*eEn2oWka!QZ^4S<7{XzG!0ae zaFYqZ%4uZaS*R3;j)W&vKsJ`8J$0~xs+l0}K0>Rkd_ z(0XM~a@vX|vR$n>DV_@5DN(TrB|259K3OXOPD&~Z|6;e^ehY56;*Lvhx#pgWZo2BO z%Wk{wz6-BcjIsIHXp+%(uf4L_;+Ym&MA1q{zqA;|7O1J#$_5CGk*{RuAwWjHl#L;* zFUTQ~005d&2BeJuB!EB!Tlmsi!U?d^$`}|U5SnFeBmwe`l~zVkEo3B+G0tpA%%5d! zuv}eGFM|xS23%&zlFtGNSEfvQ;{5T#wQM>Nd`XbmW<8MSYC6r{8UsL2h>CEm)9cvx`70 zcw!HgB_IhmI?YQ+#2A-&CS)xn1sPyw65i?L7xmZz#-y-?y(J+=L%dRhzK?{Ezn*gM6kjaECjuP0F0A?ttYgx=tG8rL8I)i{CN&pEnWP=lh z1;*JWU=yuCqyQoyHZbi)f|m40D|SVSnb7DZjcFi#5TKse)j|sb*hDQ&^g}XwWS4i7 zfEF|WvrR;#77F9z-T-hC5|Jc0$bn|w>`@W~EO8U4lt4QWwUhHaG6^n901}K=A~u+W z6kep!h0)b!~8<;JId?a=bp_Z{8xRfUHglje#VN)QOD1;icS$P~%PIlB3 zfjabn6s@R5FN)EOYILIjq!&g7$kC9BbpNClwTDU10-4?D1~;zZmjp(^iu6Fn7g`Y6 z&%!gAS4LnIv7y*@SV{&P4yz-q0|3KFL<$X%f=<7nkH%i;F!Y3xRThf?G?B2lrj9{l zD1i(axOyMtBq3nC5rA|6N1p8%qz%Iv%5TKh*2#QTWY@dc2E>CqwdpEgoNC?T{vjDQ zhHN_>83iiGpb*^r<8-5-)kDbU8bRHS40^KJ(ojMx`M{)4Qr!edZ*$XFQYLABo0|Z- z!>@`Ngbj5RKvr!A&83;p9<6{`@0hYuLWNOC1KX;7B12PQh2*Byxs5>hCKL4l3^J{t zCUID&8hiZXVOgb!)lM@iv>lQ=OaE%C*={q}t^K2#Fwu-y$&k{~rKgPKNe@)G7dY*W z7K`aCUqg&zJqyh@zT3-8d<()Jkc@`3*R$M4@C!Nek#xZfZm@$N4B-e%SimFw?1V3j z;S4`WL}kIDls;@FU$iI*WB?QtDbk7?wIWnG^2IHgc#-oY0kJwkkp@SJqLy$jRx(-< zD`xnqne1{ptvJzlW?YkBbc)0#lA>s3`5k38DI%d-)4-BLhQB}tDP9UA8_c+?O<+*T zko<@gaWtMy5ZNL>^U=7xBl_4#9$+L_i#Vu^g)^W@-reIl_T4+FH^~kYH9_N#6A~6Qa-wp40%bPDAy{LufjqiNx z`!W9$%R@NEzJLR~Qa0l07U=4?1PDqxsR`?DA@j10^-MBPj0wrKnx3h(CL=}Km9S-U z9;3dwl3$g;9oy!dk9Vy+9M9lOG~P1-ut8(RO>5=;J(S4I9B?aN?gCTWyQ--Ty&Tzj zR|$2RB71MEWb7Nsp8uj_E#PE1TWAGz_~qKBB07#r4@xbfuxB<+1~|g`$D1v55bePy z0jvnh&rIH(TkUNNaUVzr=Z1FjLFVnlahMh$#t>WhqDHi;+~C3E#h+C@Az#*lo`OQC zL(=!>g2(yzYt@tr`FDzu>z zmFU2b`Kceqh(>mtWO!=QhP|R+AxYFf{eyF#3e#Q&p?2( zFf^eu8&D68VgC!YU<;#zBLzieVZXJUS0sUm6iWy3 zL|^6+Z*+3~q-JQ=G!7&qbwCPZfJmlh5QL^y22l?iuxA6I9-1aW;-MUkVt#hQO3{KP ztS|;?Lqj|@5LGsEOR@n=geQIj8mjRu_OuiUAw^9REV@T6P8#MQE`2#sEVt|imm91 zgi&u6b^mX#NQ<>dQS+jGxuuJ)(HSqbBnHz8fI?U|65L9@#8DEte zKeq+W!!kId9w>$$g7Oz~1vK|z4=HDcd$Te`^D#76R%hj1O9C})V-#2{w_HmH0KvmGvtbLYvo<(GSOcLltv4Qs#7m69kgEYYo+V(mKwM@s zUs)3}G?Y3H@iSU*M;U>2ABR0p#9INW6gI~-x0Gm>ad@Q{65;^>$_O6^Ax_4VGp>Vo z4zWvC^*kZNQ`R+fzt%Rjl`||@dk$GK#K%Ua6>0Gi6kipH`cVtMHIWL&VfHmB#Fuw0 zh5uj6h&Z%ok?;i)tv>6WdCb{sW}Z%LPRc`j%v79JL2d&wf; z*Aa!X2|qLjf9XLz)+taFf+j~IJQ7UN#S^38elj9OQ7{HCglbImjeDa^Cvtafa3Yz5 zSVUw*&=WnS89k&BD<;wqPn3Z~v4Cm=WJb|ts?<~);9jc+OqNyM6B{f2%u>Op&mDQE9#*hM5Kc;fP6$pn(Lt6M6EA}%?B_wM z*&?o`5Kn1oqqr>vF-s(2EVDFf7eOO5Xl~OIDtsmYZkP})aY$RB1*RE2lvRobN&i`# z;weqGD?f=Sbdo%fgj=$rFdKk~Gx2Dq4xrn(Pay}GE}nUah1V(m-BWX8ICv95jEmP=VLzk zbfz4^5vgT3MsY7jCr#ktjn_kXK&c#w;B$AdDBLfk4DdkG0A#6d>ToE8}-7t;BaP?}I%9XM864t+SV495a^OlY7SDKH!Q)mm#G2 zs;~RXulXGsyHY)s}5sKavRM^?a8g$ARHnrNZHA%6`- zf8=SX4@5xwt*SSEy3M*nWKwt?nWTdLQD zhVo_#aUNKOiH%u`mDCfEb7Y^QE!!!!(*hq+ARk#sYXYG%CH5JfnGl3B9dv_7ctSBl zb%aidp%-Ls_#_Z@pqYVNh%2j`SMo4Acx=)1W|9^r14T@l;CT+DXDTs?^h8ji8*SY8 zYm_*NWs;sdJGu{*wl7+VAW-P&Qq>L2FImPIAGZqEZ;k^9FTU-hN(dakb$QdS~9#Lgf`E^!z z1if?Dx9|~@9l@0YhK?dJmFX)wC8ilpHJy^NJ3%H8!K!-xoBtg6xLVYdU>y_ztvMN6 z6_u$ffz;Fx9T8`!GLW1zJ#@m5z9~7%xK=nLk@w1XpZIJO5owJxs>DS#K$ogo3ahrU zIvEo&sTvuWY9GcZrSZyseFTV8V-ZAojmMV}zEwS?!K9V(zpHevx8hs>#yz_enrjs@ z2O+A@f~itxAuZxwWrAQ@SzrKGUxR`fiG;5JYn5TFV8UZy>LVhMH(!+Zu1b-{$V` zOQLq2tU0zNEo#=(KYeFPpD=H`kJ&1E-G)t48VgG;_(Plr{6QR5#FB6%Tj3y*l zs3y3w!7-dI*Obkv*=L9M?gwWFqEGDj0_hGcQFXr38~1PDzdXoz*hPKnI7 zw-Pp6pqgg2o+F2ws=7pX`)_&#P1Qj{qjaJ$N+&h7Ms2)D>z5Fk>Q`rb1`P8 zPcd4ewjypg3W*<`Zhp+t&$qlS4bwmR(gsw#F>TZRYOrPD#NdNI;>tctDjKRYH5tKh z*y}quvmCK;IlrK#*>V|ON;0X%GB(0OH{>++G5>Nt12h1p!B%aCE-}?lN;+@mdotIJ z>i9gz^f3py5Y>b;s8k+p!xCWKN3aQ;_mRX!hrkr!HDd*Ni29F4eJ_J202=cmgT-

K1gb(0Y=6>U9L$w-Yk(|@KZgqeWc==J>kvMh%?hS zE#LD^-}PnXapC(KZq?*0#LbDq}ztpTi zR%(Lc5#&*_JP|7IR}ag!9C)#O(LK*0xL^Ij_77q_vqbHnK@{2$Hdr}5+p7&dLvgeP-xP#3TV*9~U2qMa z-w{ifdq~tAojyAxh-ztx^vvTZ;_<{}wX~e^v{@n%PH}|fL7@|Dus1k^1j12gQiL&P zRYXjNp_a=L^r7Mu9ij<)N*KdQ1N{?{M!C^BM;N0CD@IFdYvq@SP*b53Sdxh@Sc(kp zf{u78op|Zd7P=91idb0c3AJwe&Hw7H?&_}|A@NN>H4W>vzKTSu)7?A2ySS`pgByp3 z#k$_TMk->#IBcYyQu)P_tnom<&I+w?Ma?^3p!+Hd7~>-$VtSGx|8pv*CFfv?5P$_> z>f_#6TI^i%S>xUmmXZ=WDc1&JVfwL312S^D<9P=m?zU}*!vn}jQ+G`xK-u0V^rfV8 zCqS%P3&B_<2hnUnQV%7`s(UCBx@uJb>yZ+ICNg1n-Hj3TTw6G^`l zCt@{j8)8$|;MdtCW9GizL5!u!toG*D|RiJhzvTGkt6{|o?^yAoH(5K=+yV~Fir>-Hl$_XM%`0wyDFFO*L~qZLtSeQUL=9{5LLh~Xjeny&8T zoD{MtiIZ{^4e^BHbDv!Q^_!2Pbe8$mLehAj_?k}ojj#Ayp)HhuqCc_qK=1nTBI~a& z`?F8`wf~m5ZWfrm-Mdd4;Of)KF0Q^M*kyHbqea?T-Mq>!Ft*{Q16EeN&pvWWFVl}S znDnIkc6zkI{Ctv+p>E^+Qb0@m~$d}GZW2?R481Rj*X*coM z^Dy#3FY=}S+z$}`1pn9*AW*am; zPNiDa>Q$^+wQl9w)$3QVVa1LmTh{DZv}u2;Woz|cTexxM&ZS$|?p?fj$J*;D^;b!M zz5omM6?m|{!h(MpPJFoWV#S6b54J@nNdi)nCpYFSnXzZWpF>9;eRwly$EY6%7O-*X zOQo(K%5EG~Hf-2oaUadt+M;ZW23%h{d@TF<T9s;ovsHBq+ z{0k)o8)Wdo1R-27!UWk!AOQd(*g`Q1C-l(44nh1-LIETc@kA3zEK5ZJ|04qd3?&$4 zzZSn5u|^zo)Nw~1d-U-~AcGWgNFuW`uE?oqL~=e*4`{T1WjA zcwmCr;;UYzibFBP6d87S#D^D#cw&hajFsYsG48Nnjyv}FV~|4@d1R8Y6*by`OICU1 zlBK)~vNdCFb7q-qruk-@b9T*7mV5U3XP|=?dT64HHu`9!lOFP5tz7NY=~r8o`e|RF z{xoW z+y9qMd)M7@2RFQM#KDC(ad8zV-0{O9NBld#E4Q5Nxdn*Zp?;dmT)tH<7kzZn3eW(L7u2^>3Bd%Rz+%3L+_J>*b{deFUdR;GCirPGQ$At6%{QU<{(F5x;YyV8ju&7P@Y7fS_u&IgeSP@j_XzOm2a5XZr@Q7F z|NHm%KY#vR4S@ga-vA95wOGkdfeR#>_?{9D0YDHc4unYO7u;nk#}2DViG+RL?}j4S>}^s6|H!*lR@i!SL9;Rq!+mDX-|w{B;y!s)(~8tr&TJmyi4l^ddg^mjl37Eq9ZB&5~?Xh^PItdLnV)gB%B$nvy9 zDD`-oUUUdaOlI;fd5hE*HTg+aa)qjNVJaDSE>Ol&mSM?LTvRbj zT;_5;?E{o2b@|IlxsEGMB<2x|xkO~5hhZ7NkvE0VUao}RH74I5;rM&QAKf5n&lGVD_7~!R(>>vt{kaIU-+5% zVN|6nWob*>Nl!i5)1@Jh81g9Y56d_yP+E%!}RjzTR z>s;+xSG?X;uX*LGUQ1M*5|vf30fOmZYgAan;!>lJa%y57yPd@*>K_*6N@E{;STmRhVR=3pZtdn57 zThQv0S-%BtagBRiV;_iCqdtX6C7Qg$IpMDX=UjAOxxs!r!fDK$98dcIM z*FA89G513Uhjp~h@@|AJ9G__xMFJP*F!YxD-ws1nz0U=3h)sNA6a$mNODb`Sqd8y# zyI96;0qcxy{N4}Wn4K{0WR7+GV;~1PiYrD^i-ioz`V!c-M`m)9o!mq74)@6j9kG(9 zd}XPW*vMGsa+ke4uq0dg%VQ>UnJwqvLv7j2UF0#O3cO}G$NyQ*K_haJ)I4V>PPn#9 z#&e(j{O5uBxKMWn^bD)4H$oR$(TisElIl#PL^m3PZFaMyG5Tn!u)@-t2Cbku9YjjM z*3+LRb*W9=A504=(x*;em^;a5R>xY_v$ju^yGv^{9{Sa|{_z-i{cB(c`)syIHIQH} zY-A@}*EaAe9G_sk-7y=G*_qF;0I@T!wqcf=Q`YZ z=w|G~C4O;?XI$eQOnACC{&A4ISlXxyx$pX&=6{!5<^L;}F2Q|dah7we+v|mS%x!*i z!=^l@IJX?dUt4pY2VLk%b$O3~K6HGYJk3aFdeb+qbEkt$>4S!P)UAGXmKL2yN5?vE ziLJ$NcU|mbS1QC~Om;7teb;Dbd)wXq_9u0`;&7*X-S0W_L2=#gX2rYvs=jx?2mXp$ z-;v%0f2f(0*zkvEeB(U~VaI#S=aOA~DBhI&eX}7v@+)G{cOtO9Mdo=m~_TKlyCw}pNE%%=rU-`@DTi@Ns ze3Lo9p1X&B^{ts+1Wds3P`gf2z(F}bXFEU#oInb!z^y94 z;Ilvt+(00azIx(7&-1`Jc{30!K@%Jh_dCHL;XXu@KoxvJ7(9ymgR~eN5(peL7py@Y z+`(N*K_0{r{d>M296}=Gn;9%Zy9mPRLqaBO!m{x}C*%(djKCa>LMuc-2CTFz1dtm< zohsZyFbqR6OqwZ-z%e{SG{gxJ9KkfKwKeptBWy!CoIn7qkuRJ>qF}*SyF)ze!`zF* zAmKwl#ECA#?3Y>`7u#9etq&;N2nNu0zv0Yplq3MGswOT0u*G`>X?kVd4$ zGW5bw>_k&+yDVg^Q_PD(6qK-AMOchQS(KJh^uk%ZMgN0D-@?VY$ixxcL|zO=!TZDj zDMd-tLxmGYWmG?4G`eL}i&k_WV|+%qm_}-(E@A`_YeYm}WW#IxMsOU9W(-H+(M8@H zM{+#8ZB)K&{Ev0?!&-F3S4>BG?7UQ@w|caZd(6Om>_>n6$GV6|c?3v;bUbt9y@J$= zZiK^xY)HUsNB?-oK19ZflSqfWNLfS2&BI8lh{j&BNRAB2PlL$*07*Gq$Ve1Pl_W=v zBuA9Qu9jR$nZ!1du-rYyOG zWU;0MkEgV=n2buRB(<8%kD@$7iu}2)yh^atv8rUmump;sjH$0IOSMF?thA4`48xbi zuC<)YGaSonj7t`?OS;@kGiyr(a0%DLr%1` zPVF=^%%nlv>`qk!&g~q}=>H;4_)yL!EKLI>Pxizz@%&5ZbWR*>Px^E+^L!8VWJ2Hc z&id?6)_c!c+|TgzPXg7k`*e@|L_+M8&gm>r2aPcK1iknK(7{a52fa`X4YCDg&?lKMOrk7tN&-EzZ`AP(yrC8G!437T20c(kew6HjPs}y&yGJk2|eFA|2B_4b**`(@Xr* zmm^d`O;kJD)AQ)l82{{2-g{C-om8Sj)JCmSu%lE>-P9X{)JWx2P=zWnEjSS^(@;HC zq+(R_a8wv{QygSfRE<@?vD8(?)TNYFTvaJmEe}{#K|_7HTn*NYELAO{Rbf3=@7Y!I z=+zVS)FP8qWR2D|HP&UdRSIKPY0Xw`oiwGq)@}V(Xc|>uCDURBS949%6fH|vCB<`X zS6QOg@xay+j84yzS9iTveo@wVC08xNSAXR)cpb!F-MWDNSA#{kbPY>qwKHfvSclyq z8kN5ZwbO^KSc}D{g=N@_-B>6RS7+o`3M*KS9odf2SG}-T4qR75L|Kw;*+UW8yI@%j zq*pI>S(}}-g#QK0f!(^B?OFbU**V!DWEm|Kcx5CWWAt6koZCdDwSXZ>xJ#$*B zty&&Z+NG6QtKHfi@mQV(+1esnt{vM%G1XZCn2k+qq!d38Y!HID1sbm{yul6G&K+Hr(c74{%>t=C(p_DWDcrc=+XSRs7K2^ZtzEG&UAv&&0rXqg zvt8e%Dc2oC-nGNv{axeTrNp&L%`LdbJznR1mdNcTsr9z!tzPS;#crM2>)qaK`P{!X z%;9Ck;{WAd@->*`jY_qZM%^u6_7#fpRg3lQKiPfO_N`xK!QHxuU;YbUvb10Seb>+p z+y5P4M8RLW&|myp-j{1$0&ZaXdSCsRUi)%j3a((n%3kWV;Cn*g@AKZ?1>50*U=1GO zUOC^UOkbTOVTlr96=Y$v;9&ZjUyW5^c7oySGvK%dVJV|w9tI*8c0&Fw#vkrsB3>#J zW=aJ%ItDIcCU%eL{lJOM)Fz%{Dh?YAp5Q9Z;`;F501V&|)?zT84;+>Y8-70&Cdx7n zW5*rhu}I_flVM16V>J%kF@9YgzO^~dX+b@`K~7Rb)w?zAa3V*<4b2_ z!)mJ5)TVCaiEhBI9&7PKYKkW7X8vlh;A-LvYS`;(w4P&}-bH2h*0{cFmv!s6#_L}; z>WDOJH?wNKu2{AH3br1;sIJ$;9_%v}?5kMpKb-5zW$aWgY;z84Eu?JC-Vw+4Rll~$ z&fe^Mwd}5dY~0gpJA`Y|E@H_>$hy|v)sAg&MeWpk73gVW%ls@X^p6>WKZV-&_lC*B>7S`tGX__AH?f=f>)`rU0 z&fxGq?@gs`MtpAceo)-jO5GN<_73CjzUopY=J^I=?S=~W{?GBA;ry=R`o@a>UOnt) z%>aj@{Z7aQx4;9}$_7txN*(aW{_Z_1a0w^R|IWRzcR(OVup%GwE#+~l z@Ns+m=N44*5#DhA1WX)XU@6b?2Nm&RbaE~K%oB&tPBzsqr(h;W?%+Oi{#NZW_uV8% z3NOFBD~IMbZ(uc#ia58tBNubVuBAGMi#Jb7GXL}cy>tGyaBs_VLjTX`KsO3Scf2`o z=sAA$MOQ{H*G5XO^tlXk`p9&~+jG%ubWP7tLw^cSA4cK6@KLW{Q74L154=bh>Q!&w zQg@11e@IRj%~{{|kVtWV<8|__^`^M>y}R_rBz9mAN-AI4a%YG3>dp1q z#BBMd_U9FLra<<(OKd0gc5PS5Rv!v+hr3wcymKFSj^y?l$98;V_eC%F1h)3`q<49* zPIp&|b$2^sFG)7fcdlJ_AJu7!6?lYKc4=R`gkN2IKTlsrxrS%meNT#hN5xc6^od_x zdy6Ksj~BX%hjVzBtdZC9j-NkJAIz3t`OiH0qyH#*vio%P(v+9@q}S(eHcD`>+o6AYVeI)vX?BLUdcdW5M{oM) zqr%SIdimJ!DqjyW4PkW0c_(0TpkCS`6M=?~+vxUF=yeHeGM^KDH z`-kwZU#PIQH=V#&Qo{dx#f|!BYK2zF2;opLD)g?zhl{C?)XaB$PHg;x==>t7g;fv* zb?61l-$MZq{j>=B+V=c`hkRhFhk8(jRnP=h5QwyrXM)&!h+TX-g?;n}{erQFRiKB0 zkTJ8rcj4dKwRiQE5{Q2AhtwyzGjEL}` z#EKR#V$7&@XYC(oWfe*z6E zbSTlHMvo#*s&pySrcR$ijVg62)s^XW6nHQGfmE( zKZ6d#{W)jdpGaid0j4MUDG%5;>M37Pp*79 z^XATLG>aXt?pnwAsSfGIiBA8Zi!X??bql^}%=OK(U;+Uh3JM!40j|6qt+J`?9sbX~=0$8MyOETG{ zlTU7k8+lMtiD88QRhgxhTXNZ@mtTSzW`IW`DW;icqN&=AX|mZIi5|8YCwMgqxu%?V z;+dzOdukaZgM0$2Tz`I=hFYM9BATe8i~m}g8>5fPc4e86Qd+5{mtxu+p{fm;si%?A zDdeZ4l3J=lcAA>1lBlZMYF?qPww|lA(psynw=%V9p}6uo7n#B(*{iU_5?idX4@p_# zvCDELsgRvA8?Cg{Qd_OH*Jk%Cu-J0jt+(H5`KGAgk~^BXv9emOy6dvrZi2ds2CcjE zay00F^3t2HzWee!UAms(+poZ750k8}wwwl=vdb^S9P>^Ek1KP&&Teb7&O7tmv(G>CXN$=IqYSjs zM|$>HtnIh+-n;Lsxn9}s zzi)}T=)@zRyz;HlPWJM8vVQXO(^Fr4oWWZUI_eH%pS}0rgU?m-mkl3&kD)v4xcTd| z-@a6oGwptt#>ZQ}{P*LZzy7|XpZ@;;12BLq*`C7$2&L!&ta}DrAOj6JKFipzfg8#l zup%hI3t|v_3XF^eGgu+|`Tx&@A{=1=A1FK$?g)WcLm>-W=t9SA@P!RhA>v{v!yDod zaweoq2XnZe{(Z(!J{%$uO9wwr6%j=sJXsHu=)@;NF^X9NVi21s#VcabWdxL77BNJ_ z+S#y+VjSbfb~qU;lCe7!OdA^0=*BnFD~ye4BOLv8#QN1Sk9riD86`uBvXos*fCmWPPX@H}z36lbT%C9qqPB_$;xCpByDAOKHl+Sn`sm zTqP@0wZ$N|vOJ4~U?XE`%Ug0ul92f$E?2WgmhrNe!W`y~YDt)267w^mBw8|?=}a@} z@-fJKCT3;{L26<%oBwSyrZzoeO&)Tyo8lbjfuiY{X_E6XsjM9))9KE4YN(S1geP&9 zsY-g{GoSj@<2u>7&wm26K(Ab3Kp8gB8WuF63XP9B=eSVV{IYTAd?-aL8k%qhW}+6A zi#-vi(T##Mq@Z$?NJH~Y9+otvDpeImS1Om2`mv=hoheOUMbesDrk~_%Cr*3nQ^&}Y zi$9f2NBud}qarn_NYm*~mFm=|>gAw_gDNVeN;a8NHLF@R%uTlnn26Tzqh1{=SxbV| zy@<7}Mky-U(yG?C!u28zWsF#VGBEuxgw^nhP??> zg~!vyLN>BA8viU_6f4=4u(hd|-7IH2J4K;M$g`pyEkdm7Jko+Cu+pR~YFkTF#1_V~ zuKfsD( z4o0}vWk_Rr_}J}&*QG&)Wq6SST*sC-z3N>rL_v!s_QF@C)4gVVg`(U!Lbty9H6?Zh zquuz{mWlt}FM$b}-?*O} zOM=(i-7|hS#3~l%cnP{xMP!aIJO`DF_B+5V!o7E zy#cOblK+eBH1f8r7d=~d$wY%R zqbvP6MXQC<(Z%yFHEronTh7sW@pN+$on26)+OwDjFrhiP>Quv;bE2+ntPAqzPLsOU zx^`QO-AK3 zP5$103K#tmj)79i6 zN3P2GrEj{lT(lOy_{wYkPLhXr=19i5&3jI-mm`?nK!=MEeQxx*5qyvaPr7E0?)0a> z(cuV(I@Q58aSQKS=V;}5)w@2ep~ofWp7l68#qRa9mx}9HF*|2bo>;b{J?@wSJJH$A zak=B&kZP~4)*rq1yaV1|90wQzgoaQuHDt+`|N|iNyT4F^a)$~ zot8iR>fg}!p^|>SKHtCZUqAgTH2zF?Us?6vfB4#;?d|)Q|MA}dvdI0V#r)}&^}!wj z5?}-B2lM%u^Fd&aIba1^;KC>%>|G#GFyIDi1_1ik=2?dTdSD4Uhyj{K2g23)1(yn% z;0tmG2{MHXs#W}D6b-^)4l2^!p<3>ZnhpYC=g45cf#AgrVGtrAe4wCM;2>FLp!_vq z5=xim{FA}4|*y7lg;?@=8G8PChb_Fj=*cY-9Gg9LZ9ivb{BU0%i zl4WBxdgC{G1t{hrIFjRgBqNszqi|efIkF>MI3rhd<50n(cg15n+G9|xBL_0xB_`WF z`eT&%p`{(-y8UB8E=xXM)LKt?Z=9pql6;9G*{y-$i{A5+| zS9;~Eh-Bt`^TqUJZ=Wlq4RMeXIN)n;r`qiVXJV5W|40w;^irvLes=DrPQaFQi&K1FU) zRA*L}79wYK0@iWP1am&rZ9b=TYUg&!RahPmce;ypLQ!$<+hNuTc%o-gC}&o<;d(Ab z(WPg63I%n_gm@|xc3zu(%I6@u=M4I$C+(-VXoY@`n|Z2ZfFfv5^yhmXADkuVgEAI< z#sq-|6n^p+g+geCo}F`Mr-piHN|2{f{%7laXo&)uR4$rp;+l!Fs7OdCOJL|fS?IpS zXp8FLf+|Ig7FUP{osAyLfKuO!#uZbBosjw{IpSzi=x9E1=!Gunk#1mRVqLAxD9k-6 zlwv8mHR*+BX_rC-k2a-&s-%~a=|UuF7PhD1mFb!ug#VGI#FfHRl_D6NvMK$YX&sKJ zP}S+4#)g}!6_FC1pYrJ_-lRF^I9Cj*}3aUvgDmlq%Q=aOm^4_Q3VxE#0tIDcnl&YU)s+860tj3|M4#ld9 zQ>Ch^uj;DjIcj3bPnsXZXvL$Dzh#Muj13K5+1C^4YEROv!bY>si?3CYqmlj zwkF20Y9hGqiL@5iwh9`c)}6V!D_@8!Rk5q+#p}D~AiC-!Y2xcmDyzK$XR*c>xpt(# z66}q7Cmt1SfKsdIZED~o?0)X6Pkd`Ob?d)9?Eik&t4B;MHl=FVZS2KTUBup`wfY*! znygu5tW(Xa?WOF=4xq^L#K%69vl3mux~yUXEcZ!Z%W8zp-t5n&9?jM)&}!$x+Frv# z4be&`%*~)|OV+9t78Zt=Ad^*p98(76jRz?IG%b=Ip6K>PYtO;C`OaN}1FWZonC>@wM$$ zCGKbDElwaVF+pw0P445qo84Z-@Ul&?c-b!# zR&WIO+ycL8`AU=q&t&@2+yRFW2%E46v+oIi4v8kf4ZAI}#im)k?FcV#I z7Y7>r)|nA|v5v8D8)~ocK=BxBssFlu@f$X;8sB3YpT^ZE37X&F&5)j8PDkCWy_n9EKFf6C8DpwROJ0dRIa>vOspJ8$eGIB2q zA|#{Z&Xy}ND|4A0YzZ$jF>-P+o-sH*^D>HZvNA8g3vH-9$B)M`JZ!^nbLK}RG=dvum*w8mDkfR*$j z=JQ$ZGuDQjO^`H~pe;ev^g!IS0Oa&eo2^avG*18YO6yQFbFoklqDV*NK_iq=7xO~5 zSwll1QwyR*OS0ffwH%&wM_jZawR0z5b-~UwKy~#qhV@s|SXOhyRu>XIhnql~wF9>F zXi{lhbLm^#wOz4wTi>-9BK6uSH5l!67^3w?s5K!$wIl|17gF^Wi&A21>y+r)SR1rs zLu*;@lVp!HWl!N?TdlsTsb&WuT@&O>*D+|D_D|)tBNp~)+f`o+!cVKdKOnvtSHuvUcbM2P51Mc=*^YV1BchJ&ynqhWQ$2XfIH*JG-+r$qY#%R#+bMvDnQialb6Yr0 z9XPBd_yKZwhrbqvcUgV=HHjZ-f726+za@*SIBK1@MT~gVb@#T#c=lPhi1M~o=lG8w z+l}87kV~J0_vU!J8j(-mj8{aByOD-hq>@YDho@SI3$v8tt%;kokuN8fdnk-IIF~nt zQ+oOAF?sZ+H2;&8d8<-6s#$qGuX&tPl7qvelgoKQiTRjQICb5*d_#7vL3vg7dFr(} zsJ*#fub-X!<(Wr>qK}b_7x$pcCzvB@p1&uhOFCX_`6CN?*=73W?Rby&`0jpssf!Vv zN2H^hx;t4qgCelM}J? zx3LEvusejXXA!CkC4n=$!i9R6V)u|&`?kxFv`;&?%U!GI=$@l7xW}EdHw3g}QJ_br zxucz~TNvT|yd$w)*lPUXzyE|wi`#2r^axQ$r z%VWVing6%59<@Wfw_UrYX1hmSe8)==#aFz?L*2lm>8r1n$UhyrGX%X$5xe6i%cJ}$ z!F#32yL89=(W!h7o4i)uyk9{z|~nf>AC(cOb8*V9$rGyY}2{g07-elGsx zztPh#+S;eO=D%;{?^xXHIq0*bwc(p zy8lt_KDDWSuaY}8|30h-68*2KQ-$A7T}KQ<2k8Hs=WQ|{{ngaCm9 z2^KVX5Me@v3mG_VoD^Xi%X;i54|_6lqeWOPMxxYVp@orvIc?wR#n6R;^pP4*X>= zYFD5x#g;XD7HwL!YuUDS`xb6oxpV2(wQJYj-IY}J_VxQ0aNwi%YzYp@*KlIRi~kun zcKjG}WXY2$SGIiFaahcoId}FPl<;ST|1^s>eHwLY)vH;zcKsT5Y@vBwBbI#|ckaZ5 zX|HZ+TX%5b!-*F+ejIsn<;uan2EH76bm=(1mR3!6dUoyGxp(*e9ejB4m&tJ`|ZIB zExZuJ3^m*kLF=yL5X2CRs!lx-O*|3B6jfZ2#l%^FAB*{1ZANuQL+RLJd6>(L^zf5;ZgxeH66_ z&vX>hN-ez<(@c>g)HF&p{q!+2>jah5QcXP-)yNn<&C^s}txHfCU!9fKT5Y{mL{4$t z6~aD?=uk;t-f(1q;BCbo8|}2!)>LcE&R&~Tp`C`C?z-*P6l~7kzWY+Fk>wlkzy%*Xp|%Of)bET9 zKb-N#9hWih&Gvr$&!#)Qnexmv-`qr>-{m}R&xZz`^wLc~9rX|`zdZHUU4Q*Nsy&AN z(Zm^Eoc7#x-@UcS-R9lUvYVY8_~MN}o-y1hBOduD zge6qr3O8rL%A}Bm0eYb1Vpu~P-Y_mA#G!#^h&>(d5Qsrsn+umGL=+J)Z1OYW5}9Z> z{LQY396DhEqgX{NUJ;99LShoL*hMccZGnIL;)8m4!5@whjcNQB5hnvfHEw5vHgn?} z=~zc>ov|@6fNDp}deUJ(*9o^<6bX{rCGF!rmK`?}@ra@k8? z;t7_q{3Und2)$Ac6Pd}(RVI}g9aQS=n9Y>tG#eDm$3&Bw7u#j`ve`{<9&ME0#Ec}{ z7*27X6P@$1rem;~PQh@}ZL)OdJn1Q*Co-^}xOrwL^Vv_kjKQA)l^Q(bDNutR^gY`Q z8$w+}&O(}#p%InnYSx*@iKeEQmuu%mIoi?2Kr}EL^(b2QS+!Od$nQnyv+=v9#$;dD>I7taLFg^{G?{dO>*(6{$&`%RR-Y)Wwt(dqQ>URH<53 zVinb>R@LfO(V|ejarK>Eb=ywCT2`~licXkJ?&~w8(8eIb}NcyCu3n-+muGuFr&3?&)90V-Ts!aw5^M7flHCl zs zv&Mf~&yEkmV}tm(AV4OFkOx9!ff!i;E6(wf{p^xu#34lWS>~ zA{yDz4j-dw80}eKTH4vxwpyM2>}`LWew+UuVYZ2lVPk_E-9t<(uv48xW~=qx>3-a~ z%@Xh5UOSKWmiNAKrtG=s+qUJ#Fuw`zQ+gj*+>0&v!jb3i2TQx#q=a^V0nYHiQCqOc z#<#aE-f@px*cJ|l%fvrka>6D2n&d`#9uIDEmzzxFBZqizhxc-ugRbRWsW@ym9@L%R z9O&wb`CERzT7j!L=t)m!&NaMpmNH%GQD5V_e;skjl3eOpR~p7&Yi+KJR_kFGdmXKQ z^&A&{>`!w#OI2PQsHYw7;2JubXFm6}P$=$skJ{U_f_BsPT;h5c{L<{s7QdJF=w2TD z;xEZ}?=8%xUAG&Ws;B+#;Us&h=zg<+H#_f%Z!pWl8uPX<{_<<+`{_d7)Xr!A^zC%~ zv;beTs1NDrso(vpO1~-C54Pvu>wWW|zj4~%KKj}JE!W#Q+Rz^^_}gE9Dp?;b;-@U` zJE?#B|G!1(Zz=o_v4k)601yF-1^>>101He0bS(iR(0v3DxE}D|C{O}3a7Gre-Y|~? zb&mTqPy~Yq1CgQugNytoYy?-31vf_h3hV@1PzC|y{Ui(a7Ni7cPzNj;OC3C;iG1I1zq^U4DMtqH5pbcztRrZ6u4!wS0)n0m0)UQoqC z&QTXi*nC2Mk&52cs$#cTpGv;}nA;7|&`IG3*$J zks0rz6SZO)%SsEkuoK&AKe2Su_7A5>KBcwAM;TlnSvXAA|SUa8Rc*w7jj>EanzhjInQo7!9R8*5TYqKg&6E$s9H}3*8 zA#f+%Za0H-sY(;m4)eV@Q#fzZGi?GnXDTvjGC8A@EiCgXnp38{@++lNJ9}g~2Masz zt~(eA+aW?H!KbfL8mkluKWj_OS zDabSY{;;hC6hY&PI4SKphs!(@lpG0kDlqeNAk;!T`BOb6Z4IMFSK)({n{%v?ltK3Mn)&Vbn%p!b6pUL{G{%%WFq()D<^0CVteT8Z<9~ z6iG=UN0aV?NIU8~FE2@>lstsAuAcPzs8mW9a!E}PM13nuztmW;bT6dMNdK)#!4yry zu0@INOw*JOW%S`_6hIlSP2JQiw)80KRHAy6&GdAp;M7jbLrhh|PZ_FAbJOAyAW%~T zPmNGcp=ePfbvOo<+W?j5C{QJ{ZSa($eH?!d86OnZ&inX6o)$rz%TG>-n;qTan)kV9NT!&Fxw^hCZ0stZT1O);B0st%x0000O z3+M#^2>$>D2pmYTpuvL(6DnNDu%W|;5F<*QNU@^Dix@L%+{m$`$B!UGiX2I@q{)*g zQ>t9avZYImwqDA#_;04on>cgo+{v@2&!0ep3LQ$csL`WHlPX=xw5ijlP@_tnO0}xh zt5~yY-I~-M*N!#6iXBU~tl6_@)2dy|wyoQ@aO29IOSi7wyLj{Jtr~N$fUtf83m#0k zu;Igq6DwZKxUu8MkRwZ;Ou4C7zkn-i-pskP=g*)+iylq7wCU5RQ>$LvceU%+uw%=f zO}n=3+qiS<-p#wW(aU=?`yNibxbfr2lPh1&yt(t|&_TA&`%ifE>)5kv-_E_e_wV4t zi~k>g5IFhs=+moT&%V9;_weJ(4?Ugw{QLOx>)+46zyJRL2Dp`Z_6car%$l{AI#wg>AG}dV2 zjqQba7lkEx48M!B7iQdVi@l~`t}<(6FfcO;Ts zhAHNlWR_{>nP_@MC75Zp>E@eo#wq8VFn&oFk96j#=bn7_>F1x=t$8P)gcfS(p@=4` zXk>OS>gc18Mk?u~lpZJOTzFQh>86}^>glJPHX2uwpq6Utsi>x^>X?_V>gubo#{Vko zth9xB4pVu*4Q??6IfW3RkAcHtX!O&_*k5S->tk?X}outL?Vj z>ZEM9;D#&ixa5{wSG8|3Ywo)2w(IV@pnlsHsqofo@4fiu%O|?}_UrGz00-Qyyz>fd z@WBWttZ;|?7QFDo5JxQW#O@Kymbw&YtntPicT8Ku7ke!7$Rw9+vSt>atn$h%x9swH zAg_h-%QV+)^UXNtlyX}1=Iry&KnE@KMlla<^wCHst#nyC^St!aP)9BG#6>$j_0?Es zt#!Liqc!u^V23UC*tAydHQ8vVt@hfdcFp$NaK|n8!)BlL_1t*pt@qwdy8m5P&wK|i z_~3-!Sa;!wC$9M7p8EYa{Qg-mmZe`|!t~k@?@tZ~y)Hr`^6*!RPP) z{{S=^{Q^k90vfP*`{UmM7s$W{c5HxK0iOdWNWlu0D}h;&panO`!45tPf(rDY2uDc5 zX<@L0C`_RWe+I$~uJDC0j3KH{XqEoS@P;_d;h|cn!yfwZhxVdj4gY~i#3CAzOgy}b z29L;b* zaEzmOvM9$o+VPG(Vq+We$j3hVu{U(2$`t=d$U++OF?x*3AP>pNMmkb2ft<=BA4$nd zS~4w(yrd>K$w}u#a*v%1r6@-!mP|UujigMaDpz?tR=V<)ur!V-PZ`Tv+VYkw`J^Io z$;)2)awD^B$|QeD%wn!mmrxm|F_+0qP5z>p(2S-uHCati&Qm1Z3=S&q$^Xx>1(PY)>}PrYsg!>_ zQ=kYm1sWo648#D6lfJaDOxfb zQYju(r7#`ZM=csti;R>yC9SDWRhH7D4b=i)TT}XdzEY1q$vG@EeVPVVK+W(fSv_+wdH5P7(qT6`#c2vGiu5{amndWL!wwJZ;bhlfm<#Kl=&s|n@ze`?92^T2Z z#U^&|blmc~cU9hf?P=rtlj@}Rz4&$0dF$)h{qn@V`3-QY=!@R@>Qlf7HkE%9tdZhQ zsJ#r1Fr)~~-@b-7UE`IohT*i}on+Xg>+S7_H%#I)QMkkuxv*ORjN%p>s>2@cFJ>U@ z;u_QG#67vMG*vvW5!?93Rf4fjbR5kPLzl=vPV$U!{9gkPRmo6}laQlK5C?;n%2+nB z87<7@oUk~{U=GuiZ{p*N8dVW$%V=?e2QhTivtnqNZ^o>teoHW^qQ(uZ2zUfg8Nw2tT;O6V7n!^%~TohWMyMJ@JV9 zW8e-6H>)+y@r`@D;~@XI$Tbdaig4W3DF3(gv-4fWTFWHh4aM_{VNM=j+uYc|_BFF_ zzH?yrT<1CWdC+Zs5mQ@R+tp4w(w83TjHmqRP>;IQFKzOvOP%Fa+&7m0jgWTOq7}Ai zM+T$&YMT4z-~vHA!_$s%wqtzlaF>Xxy(00tQ{3(r2Q@=TE^=t|z2kmgIpF*5ag+bW zzOZ(6;w`;+s$<=VE`PbAFS3OsL?8(gXoXGWZF0`f+tuaKsz*GpCS((P*{2savx_Zk zWf$D_I5$0wDFhg!KU&nc*Ea5#p6zUNn;_n<^u~oBZsH&Q-N%o0x|OeT@D+dg<90Rl z?cMLkt554Tss1myevmClAPG`Pg8$}U(oM{R-y@Ef2+D&R{_hJB^llZtL^kn#DQtn@ zE?Kz#8_xgz`yc-Tz-{nX9u-%BcxQljM{&PL5FyuqBlmy~7=eWs5yfY97PxZO_d}8Q z658iWGPe+wmjIYIek^fNr0{(bAO+~>TkBU4wvYrOm;hNcfIcOE5fOq(aDSvXdO~+| zK<9%)*MmU_ghYsQzE%)4I1oA~X-X$)^*{^szHaA(sLe=+cLX7kUaI z1t_=)ZrBq42ONpWe{KhWYXA3kjh7_AF?XMqfYl~ytgr@Apaof=1)DeutWbBOR&fD1 zZxc9psCbI1_;(Yieuzhhu&8)8*o7KMi}@E5OH_H^mjEQ#61K1jBA9|7VNe(meb!-z z!8nHx0evMW0P%JZJ6I6yB|7&ujnFs{D42r-!7Kq47P0qh+~jDo*KDTNdWi^otM_)! z7=1xCZM&Crv>*y$APQnI3$;KGYp@DofCX#74@{?RsJ4LH*lr*fYpXbN>2_|_NN(%~ z5esQ=32BTG>29|8LtiL)T$T~u2YzRWh{C3e=T{Jy0*F)e50S`rH9-nyI6#Vcc#DU9 zN!W-8L5SdYe;>7oIRDvyI=OI2n1=&_Y6n;ktk8+G&=3633!v5yy}%E%fCXVN3JGX& zdkBG4DS=j5l@C#YTR3$U*+U!H5@sh*AE*#GC;?*Ug57kM0`Uv2Kn9yY24J@kzSat) z;Fhh>4#(9^H0gd`=XF)~O$5;jZ%GP$k(S;BIANEVBT1KAunDcuYnky(ILM2|W(%{Z zhIQ$fV%LHK;Z5yOX|_NLjoAu42Z#GJnAgU*PVjY$SUx0XgIblWI(j&^iO zw+2}t21?m`NdM=ZSuhK|pma@W5L>y0zivq!s5plqn10A3XbT$| zegh!|k11^7*MG~Q9zpahpSt_ZO=poQ6LcNN)XeEo8Km(0}-&6m#}78X>CvtvWj_8Ac6<= zYLh7d2pa*LU?-L~ed-2ICK-+}hy;{Fo#JStFi5QyTcb7ytYkn6ZE$M7RvqE!v85KB z$N$H%>1KONHws~Jlu37<|JVq)_g54CFrWc@5Z{-4=xVxYyLdi|xb@n8JZhsqY7q4or9H`&zs9F#>!xdJlEP*S zA}a;9FbZkU+N}8dmaTxF!sv{zDG-z+0QNVWnh>J~1+14x zq5gTJ2CR7Tss-4Hqn638uJ)~#Cj~7#pwn6l^wPj6nu7Q_e*d6(A8et0d4Id8xQh$0 zDo6^9nXu|g2KH484@^1LI-Cf+2@^Y@F=)eHm%+Ij0cv@>SI2Wf=L_v1f~=5pq>une z@R+R-yvNptzdEk=KnB2?04gYiM`(3SIG)}so<^&5^pFMf0JKdQTI&mSOaHr`@2S34 z$G$PNwWykr7~!`aDiFW7mmE1AS|GOqp=tsEpqO{1X-5WOENllFrRE{Z`KgZ4I?B8z z0QC2_1figz`)UNsfKh4-ftq&q1)=pPb~UPb+1Q{-qM*}CozRPfhj$P5HOnaIpT)<- zUnT`7e11aejjd+312G*nk+4#58TMtiq%07uAh^fJZH&93(7Vj7HXTynXp#t$QXr5^ zYaW5PynI><2(YFFM+RyNYA^@{;T+0vngDN#r&UU=03ZQ(YP`&=o+<|%2Pg_-aEXh0 zcdWn)6;}&bKnvPyai|8$nJRcTD5{#8homaCSvjgG{iH6w@z9e zuZ+i5Rj%eYvMh$k^yU>~-HQ-eud*7XW&Iad+K~nEeU~?&>lVY-ak{=t5N8~@TX1Rr zpamZ+yu@go$BK)zS&c}WcIjx6W-Nl#NpKbVi+C)tX;}*j?3*7+nB|AZjcpziNf3`# zYS;#8S)dAr3~7ce23Y{o0GS1$klNU`*y{F>w!NAXncEb(kS%@Ny6xNchJiCpLX!Nx zoK_KG+X@0%wn=bP+;*avx5{i-p$mboY#5tpTcQV{x3Ju|`TtpE0Sd%P_z&DH07+1$ z;cM3*Ox=|V-BMl4**FG)I=x6+X|K%9;cH*fJEEz)cw>8`S|E^K5yAG?)c_X0LF&4e z`Kh8T0e`*UFAS}{T#7ilw_==rRaT|V+f8rkpTD*RZ`ulLx&{5byvW;dp-Bp5NYER8 z;q-!P)O&XxJqvZW24XO3-Mb3)&<_?D29V0*1vse?XnavOe8@+>L@wM4f#i;yh44Gv zy;IXE5tjWVzX(y5rwqdQt0Q;Z+*O9F6w1`yJl3`wn3+qU+1LgXjK96OhQB(o<9(wM z5F#~!xbkY?J&LR9Eo=`f0gYFMm3FIgjpsXzzof95@BcgyyNVEQj-Z?=oq?Gd3rwpv z2%z&CJUF=LODmT_m~4Gb3ONUiDJliN0IbQjq|_SELD#_X3WUDk;?h>y;TZ<2klKSx zk3<`uNO#()eQl1G*i9bn7!K&duEAJ3K;3O!FfMK9HI^R4}cD-t#Vuxx- z4jeQb!+i>CDyiku`IZLnmS)&$FDU?`iOdR&$^U7fNc?+c$m|Dy@Ov4$*%_uQ*OK}? zq@k>)9&VCk(9cM~O&}i5$IIew2;z_p!fLwVzW;0BmI@elS8bsHo}*Z8s<4l<;IjpY z1*;I!6DQ=HT6{I{lCj2OTIqK%{bek@QmtYqd%4bQ^oM&0lFsJCIr5LCLNXPycR9%Py`5s@y*b!Uy{6_gS|GQJ@D}f8}i5 z0?g?AN!{DcpM3lF-_7jdzwxv97wX5?Z7P6D3Lk_9AWqDKp6ykpo+CY!y?=mVY+? z2|&1IAi)Sao6Z!8R6t3S968#nSyZdNR;0)PNwB4>J$t?cB#`2ZR0064Y`zr$Knhm6 zQUD~d*(w3pw_E=qL`bzN!Fs;x`73;wmKauu4Lh#aFEM0RSb80vTzDhPshy7s1|8b- z%Fm%Ce(r2l^=Q+rU4u@&TJ~((wf}A3#+_UDZr;6p{{|jh_;BLIjUPvzT={b5&7D7o z9$or$>ea1Z$DUpLcJAG|H}oD}_EGWW&7Vh~Uj2IZ?cKk>3Lf~DBnc?~6fdhkmh#3@PkGkfL^eNywJ{(2`BB{kE8ml!_{9WiSEgyAVHu$av5tg#_b>yn!U> z&mjjRASek2SF^96l@gSIs?|#R<-sJZf~}zaA~33|e>_BMi%quBgeN5>F_OZY2trT_ zQc^ri00~4)NJ9IF`lTum9cpr@p)`@=$W6#7(MH+`B+wUo2y_rZBoJ(cKniJmGtV5+ za+6J*tUPc(2K&s@p&k?R#s42)`dPHmQN-w{7e*&-l+u3I$YKpk8{Leh*FFU`R1Ikp zwNw(}Lp4=ZS7o(TS6_uSR#|7IwN_hi#q~NWb1jZMUVjBPSYd}Hw%FTj*|oP#^uzF= zgrvAIiDWm7NrIp5Q4OnB=wsHR6a^A$wR?iPkV4r&ypR-MYZ73SXgw6b!kEmR>QsVk z>M02U?={GvrS4^k+#Mkbvf3yjvgyXZiqfy)j{shXq^h8eiKK+HN-+sCI%OBDPFs3O zik~*aQUG{OmT41>60$JMb=g%Yp>OTAiY|<`s%I~@c5dsfF~E|m9hhs90*JXf{^h{C zhPtaSrwz3cTf!hS%>S@jvREat$F!a-Q+h7j`Z11UMlHyajH-7bw96)KM5@+~EjPi; zMi?}@)h2OTWB2B}Z@>QrJaEAWC%kaO{oeO*#TRG1amOEj)t-i4-i^ch@bfiVAY)cY zsr@GB%&MRg1bt76q7uC+`^KoSBKyer=f%!Iw9i@e@KE-4 zn`&w*-t7U9qTMMkjradzY9mb?6RJpcqq_7os@y}5jl6%*gi>gZ$lp<2huW!qCz50j zip6$crko?*V;?o47t6{M*`f$VR!sod4rBq4E(Roco!S9B&t$| zVMC@i{j`E(6w}Wy#>OoL*@i1J!IC|? zg*u?5Y&Jn*mdajsk(j^>T+9;Dp%ikF7A3Ag&!U$@#3+*tl|(2QS=qhFlD49d;*V14 z2;O{!MF*~gCG=X#v_2*h{e-Vw|8k2%Y7vtN0P-js`4_to;xTrON{-pO8C+~Ov%Uaq zl^siEQDEsbt&ojoNC_Ke48w{{>C%_H)PgD`lS_Z}!yg<&O)@>ROl3Bcna^~lGUa9} zQ!NvU*Z;(3Hnq7;Zg$g~-!xC+7?(eAmeZW)L?><}Cmj0J&U_BhPwl4VuFnBwTI}0T z^`7NAeXT}9P06EG+7YdRtc#wtJK6N)Nyymo2$CgJNX8`a&WNC^J`g#Z>MU}qfl_1> z_xndj5mYjSP0&XGGMk~+QY948kA5ezQqAbY6m|IuTnVsJ?;P@{EvbfPqDd1$*rcbj zIFP7>8Y)urq|`PMwW&jGs`Yg05Ji#jf|tqy7F4l@uhF6ws}MsL#PGFEm5@i&L~E&Z zlUB8+)2(lXYh2|zSGv}tSz~Jo zTt#yCFCFvCw`Lh$^4M%Dt0XUaX_=z4O;swH$z?B85e6(|Aq!fFf)>Oui?2*M+)XQUvs;7>+*b-$*uodaaE3KJIB|}1!yg85h|jamDKeM2 zf{hklRCCaNKC5;^Aw?_N(awu8Vi49l`oko3n;8D8&!|LflY`*&Uh@()h; zs&uCHq(9I|PyiNWlvPFDi&d;)6|~qOr#Q75kh;)DjdnF@S`9;4zdCLVjvto%=Ou!)N7sHs)$vz93-3kabXbynM@8wmH*MT8zvtD zI3=&`UWEu&c<**rJ(6o(i!hQ5bc5GSgr>H6x360Wm&j&BMVIi-a=hzJFL+Uoa=>`X zGzWpNFCo*9|3b#*lerNzbso)~_nhauVXJFy-E5*4-RMV0deQ;cVI?Zv=}+$~iRaU0 z!3r68{%M|o)ZJyS=U6ob=Vt;WtEHW+iN(=68pUj<8YH`}N?!NWK+j@gcbCK#Wj3*# z1+X!}5Qs*g0nda;bay?|eJ5rUGG2OZD8eU1?+7|BQ#it+1dzfPfw~fCaH6AT+50C6 zLSB6cvR$8kDyf@(>QRk)dZ=3Zs7`e~fzJAJTw1k+SH=AXwWzS5_x~QKK=-|xpgw%! z7vK2DM}BjTZMbA7-}%oM;Zk_d_DjZ^OpK-Vxb$w=ZIg?n;y*)$KnD35oMU7?#1eHUhYXhyvF#ii@GD zdWk$M(U@I92>ie^v8ai5LV}v&x0cWk*OC&XKp0y{Kg|)DAlVEmk*&8;xvh|y7j&ic zswI;{xqB%&sd}*Qx|f?HCa&p0v8le`nXm*SLIEqnAzZMvx<3eG!nZjMpMt(9l)@>b z!YceQrnAB<)Iu#>r{=Q_1Op#1eCt2R2}ZhR`8giyg_~L!pul0%-$M2%x|KDey6#8(|O~OG6t&!$q?S z8mdE5IK-h7fI4i2K*Wl+LBvdao-s5a0g5zLd>~f*mQ*aNM{_;tGaeSQpRy3OM)|Z* zQ#D@X#Q-xDTEib z#NP-oVDt@aOpe|mN7=x}QIv|!2*;rbp4nhW-QXBfipNjF4UWObb)+^oWXh+6$|3qj-e||$*bJ%h4VCPTn3N8!lt)y$4N`hQfC)%cuHO;u7W9pRC z1QuQEJK^ic&ZN!Sw9VV(E2j*c(!|Z))WWHRN&j;4P4n9kHRq|V(G&gR&TMqe{PfTN1keB#Pz}>fz$woGMbL6ePr>2J1f34|Y&r*(&gn6g8sBbkP`<(HR}S3pG$0 z#nB$>P!H|T9QDy31=1iT(G&HX78TMXrIi)MP$NasCUw#$g;LzK(Z6BRD7DhNno_>` z&@1KAF7?tcZAl{Sn<@p8TeWy{hxmD9cILdXftImOdF)zdxQ zFfr9qJ_S_kK+_^!&p0RN zjy2hpW!aV`P;+(J8QoZ7QQ4Ta*_*{#w;I`;Jy&maoIB;&pcUGoMJJ10SfUltnZ4MW zMcSry+NUL)o#hp#g3SU+p{eXshwK14bZEF zNr+|JxRu+v4UeyVO}fQTu_alm#oNC1+rRw{wapc>1>DMXTL$IZ!d2YGW!$#((8d){ zy?sr>h1|-uT&@+|%T-jLz%^mP1Eh=-tZM)OLbmc0pIaWKIt{z^F`nGbzeQr-uDes&K;-ZmEZft z-$yOqTVdb)Rl4sZ3&{y!WFZRz7T^LN-~>kC1wP;gHsA+VU@ z4d&oOjbB-z-VPox9p+&b zuHhcGLKl8r7zW}ZHe&evU=TiHE5u=4HQ^hg3 zM&{{6<6ur^$RTBpW#(p<=4lq3U#8}yBxYD4+Iz<5e)ebXux2{`X9W#tR)Ob%M(Bk84uu}h zFg8|5X6T5PX#eym=un<$Y;tEsKIn_)=#CbSdPbFv_UK>H=dm5>lSb*fO=-)_=sXtb zm4<1U2I-KFX(B3Vd4=ej*6E%0qIKr!#%XDTe(9ek>V%$Y_~7TFW{;bm+@x0Or}pNG zHfX4JoS+V8r>5$xmgb|@YGHHehwbXHhH9w}XR$UMtG4H%HtV%MX0C1zwPtJcU~1IG z>bSORPA2QS7BRF=m2KARzs6^`erv!+BEen{pcRjtp3}M>PR1r|u+8hfe(b&B>yU

h3?)P}^Qe^Jp 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

66o_b0|df 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

ahJS9Nc5F@aBNdXKk)FSr5s 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 z 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%0AV8_qM1YqgjaovK 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 pbimsv^q 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 z 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Ⓢ(9k~dbg%}-=FsGko4{H_U-HR9XR$K#`PW7^qo%iouBprNc&;= z`r&o^5uN&x z8%~3C@q-MtgSwPPH%T8dkq)u)4Y6J54zW88amEjE*ADSc5AmN336c&A^9_sYLJvO; zOU4iP)znE(56hnoE0B&T@r|hHj;J|}XvB|b)sE;)kLaC^=#!2b@{Jnnjy`l6eH=e( zT08o5di43(s2S;)1>cyJ?wGaHm~H%+eeIaz^qBM6m<#E+8{fEx?zorJxKI4JU+wto z>G8m`@nF)4P`-&U-H8aNiKzIAnA(ZB>4}81i6l};3Lhj*7n0!w$%==7YazMQko+@9 z0qJBB-(-pIWSP@sMf_w{?PSgLWZl_h1L;%~-&Bk4RIAfed;C;q?Ns;lRPWhTKk4)! z-}JEV^r+MHc>FY^c6w@h8ahpwo+F)E;G0>}omp|3S&N_9sGZrGo_T*ZvqL(&%Qw5P zJA2?X>yIl%=0AHnJ$rsO3m}_=<)4Gsn?rP-Lr$0j*3F^K%%Pvpfym~u_~&u-=JA~8 z2@>Xs>gGvi=E=_I$;lQd`4_157H&8%&?PJ|)GaX0EZjU_U?E#%!)o6eL>`=3f%kTM~C(l1x~Vu3M6wS&~0rQXpGaN>B^qSyppi)<{^^s$15X zS=KvW)+bvr!JMXVS4Kk&g)SL>oIlfaWm@)=j%yi z8!7x7X?hzO&Kp??8{oQ)+?kF1^No9v)dl>UC3>4>&YKkpn^kq2H8Y!a=bH^=TTT31 zEqYt6&RgvXTR~JVCwW`F=Ue?`+k^bu!+P7J&fDV&+mO2LshRDW^X)mZ_Y3c(dIA%_ z8gwuK7yuIi;1&QI)%gn1!Tr?+-5Z88Nz*?!=up*QCdIV$?%PWIQ?>%ikiuCxW>cm

??^*=D^{x+gpOY-=ei0&cy z7lY1=VdJYo_csxp7o_=DgKn#^{l;$%y6w{Ohd&~^h$rvABD%88_kW1!07zE`-8V$X zv9;3-`eM-i7SUZ9bpMCwzBA~Cpj|Bh+T5Ze#W#bF_#h487lY0R?4YpYM!+st`_CG5Y?)9*r?nR|-krf- z4n=hKd$Dt9nVfA>y_gF`-b=6+{4iwR?O7+=8_7V=eGxm~WVtM1D5CS?-cJSvWQo#B5BO<)MRc75f%f~UqoMSM3aZDoV|sC zmx%7V7O=95dFv!d`uJ(PI`^9JeaF$~}41Yuj6#@VR@H|KzC81-&E*Np4M;__*Ik zz9a>|XHA^vcpx~iB#l;XU0VBiFsipCgQI6%-r;yC3B5E+LT*Fp64A+*g4KIA)T)n1 z3Jz$=jebFNrTI2Je;J}HuUVCYBDzWCk=pV)D57(tEB}V*s)>CB+5QuV&R)uy@$VUQ zP((NOw+*`5ilc{8a~JYg1|51m!UFyWF|a?p7r6!Rq8N`?$7Hl`aHEkZ+l!-lSaPO| zR^SrPr9t;QL}%hLH32o~D8hL~t%AN8bRF-G(n^e=2A%Vo_y^F8OzTnSZw)%98!rn_ z>^%AZ$e^P{<%1e@uNFG%FAcguw&Y8LuJrTgSKkaeVf35=^c+Eq(%{%CLXq=+ zDCYsDBmqjZ(xW(i42 zzkrp8cR~s681mIOrH$gu@Fhy}pO?+iNa!r`_8yl)2GNg+9Lk%)I8<&Os4n0V36f6SmmeZg{4 z@`FL=prly+qd~_gtLso^T3z;Zvh4XunHkien-n(T`O%>B=XrTj?#5H$p?zu4`NUTE z@!WN-zB1^DD?@oI!+tU7VyY|Sz8G}GRVh4GX;6dCp(-o33S3>4J6V-~QdK})UBpve zqFr6)P+bvQT~%FOGg)1CQr$pY)5KHLqFvMKP}3e;(^*~9Jz3LxQqxadJIGTztX(_m z09E8_A=R~0leIG^wR0E5bqhRoOWJiS4s~m>bsN=}i0+F)x64z%|IMKL1=0OO2HiJA zN3GLzar@&(Zy{~4l_t{s;B2}C!8`PTTq646CO zWOjnTLv+jxb1a~FGsyQrB@zH0028(6-?Z2|mj2g*O8*cJ((9@E9S*84|1jI&{u>;$ z+MoIZ4yykAVXpblgGxVzgOm}gy4WfdJga~Pl_VpPcc4Kfoge{N z-(VrE-C*M;*sGwD7J@0<$5blXBN}cz>Y&vjSQ-wL8?qMApc0!Ttng(}sfauEI~?Q@ z8H>y+Q(pq>{v7;(>DQnV7>ynpR2sS^#rb_u>9;t@3pI4+KZ}E!tC0RT;GmyfY&{Q& zYL&~kh;&e0V*Olc3P)>|>5%hE;d7P!2#vL(>GbyHVoNvMa-C*+C&tFMp5TKWg{h=e zQ$~&3fXAaUmay9_;e&#?-J#k)E(I)r4 z)1&%ov4vv!{$=&a^iJSc9CR{s*n5S8{`$q%6V&jdVSd2*F8=KE`v&uk3WCpAcR?|&-tvFdbIybPzfWJ`w-!D z|JR_>fR{4>8dS>Smm~+tPyj~N@we4oEOGVYOI^?<@lmoYv29%mqU5onTuHLH@y36P zgBU8@m@2S{$KA-hoLGK`gW4L=wJF^Bku^(ME*D$MOHz{m%wp?T9JE>twE7(ma^v*z z`1?3$<+E$l7aT-K{o=Fl?{QGVfOY;qg@epKyA4Be5VCMg)V~o2Z8ciMVfqpL7cI83 zX;Gpg9l6X3#{Xoo^#cy7yuUmaT{DE9gd+Kf<9~Ls#pN~{^>wlJ&V=a%B?(OhbxRO6 zO64iMv`{?@FqIsbOCE#jCv*UXP|(#;FmPiIW0Er&))*rXx+Q{wClIi>Kbee3u#N>t z00dH3VURF@NTO5VhJnW9Dbz9Or!FaM8v;3I$;^I9d<;T(G0D`@7`M68(2X&`!O#g9 zIte&Q+E4IY9~H{EsDZ$uehew@bTp6TWWkiZerQ=quq7=?vl9c6Liqu=;5}g=9OmUT z>X}w%5N*0O5gr_va}GWQJ{jE(ENIIB;3dlXxOg8P6X@k92)u{^`r8Xm(*WU;GlCcd zoAD4~DKgx(vQbsC;;Q&}cd}FLZTz^w@W$SV^Vu2p{9<&Vz$!3++M@s{Sl0lI(gN=Z zCM=icAQfgJrs?gonSFt-KFZdE;P# z#;Uy2JCcUv00;vJypadN&PKYeH)fhYzn8nkAjrCw^Ff*qLX$@sle4$MFZ~!auAYBH z#J5?Mf6>Wzq~y^F$$>)^xXA#T*Y}Pn2?50xyx+qZz5Dc>p|EjL2Z<5T2?m}D7UK99 zPEzTDlR)5xbaKW5$}ZkgHpzEDARJ6_PCv%Q90tw>Pbwo1-+lw?#t!(EUlDsw5tlY! zi2?{Yrbr}~pNFXAq9LOtqJ+3GvRS#Xp1ee%ix1bKRBO^g!KhTb8l-emdKpy85zy1V z3@ZJAgMJrOB7a%ve8O8q^c@cR7F7Bta1f*4BcAHA91eMh?{Ls2ekt*fI7pkTdGbdb zw8`2R`wa&%a=s$G#6jzowJSg3AY-?>UxP|Nhl6UxWj7EiaL`!Wam$dS8p%#INpwII zr;U-WjnpLa2Gx;Nj=x)MopNzH{PAL|1gB6Ey4Z?)x(oU17F%&xTqIYEt=Hj;4qp~q zvbOG1my4~_GUw15F<+g_#ny9AyK7k;31~)%M;$3o?}hPpHVh&nd~9bmy6+_F4f7v&uMO(JQhKU!?n zRa83t^kR!lbXoVyV#`{(=9k4*0v-qdlK69yEI!r`PD=qgOR`@UTl~u^dVkqsi-b1Y z>t!7lUHsZ>Jqh`lHT;mJVE%PZiuJHRT5Q=Ft*1d3TXmQj311gm1!S8=Ke5>AtlR3I zxm;{v6>TJ*udxt<0AJJQSHmo7s5=?)GsCQbx%$9=EN%XVLHDm9aj@y+e_h&qs$^m1 zI}(SqmRakt7&P6rYE7_|Fjt9S_&Hw%|YxQLZ zG;RJ9!>nIPTnpZle}%+drp^CjByRiv+{r(2CwX^qej;stM%zsDHEmu>>q-wzo8O1P z;{7cW_royj_wFQ;RJ-thEN%W<68HbxVb+ z|5A7IFC%gP;bGPvlQ{IUf?wRp8=BZ(NgRhB`)}OI!1I*JIrQ>N68AfI@-rmut2-&5 zgSSVzdUGK5%P@<7SPt}$xRW~Uf){j>Sn_(t4h7J(`Td+OqhHeIc8d?m014PFtK7e& z&Hs$VeNCH(*!stXIc-(La6?9pw@cqb=AOT0!CKIp55FXFtLc!vKTMl@4juH~{N_&L zan z-w(4M)0|toU6QzeVVG5u;i~fI?&Pl|?hl7qe@x2_*#SMDSsZ5Rz`TOYMHGJ?h!!;l_Yn$Lt;aplj3>qcLMGzPBY`t0!bumP1afL135b6m-o zOG!|UCOwu&1Q9eOhhm}_AS4;iBXUtH1w9S8ViHAXDi|3V|DGOHq=12NJB7JQASWr& zAQ=6lT`HDwD!*2Wkf~rQ2!IQ5+ci;z&cdd+K%Y>8Z45z*S|DX_CFY8T*U$SuW^SF`3k3Y2x5a*)-5m zH1xj||282&t~36WCF^X_*8GAS#0Aa@hM2=ZQbRTbvUk$L!2*t2sW9YO(Z~G0$Jri0 z%m4=PNpUvpfTrA1b_O?psXoR9OJ*K~f7dMXq5)iN%2!l{QRbIZ8N(MZmI~Jx4^Na+ z4#}>E@Siqd@G^il8e+?VWOXsQ<3ltr3G;@e^M>BUhgFf*+UG)u@;^o7Ep%dbsOPW6 zxP1ZA{;Oq-u@sT2Q_HrM9; z6m>bw;@~cO{$tvF7Pj2}TiX2lVb8K~-vOl~-vx zylWL$n<(X^s?{n#X0@uQy0ZMoVOHFaB#w=zru&y+)&We_Fm#y3=-2xziMtwRNmkY_ z{Z+#(Ca*$=%d~lQgayf!J4q95VNKg~gGt}arir0jo~)*6Xb_0d2qxTWg1VFT?Ah%9 zHh1#WxZ3JJ=T1HqyEAp^P9B!LXhOR&s(tBBo`p4a{x`XkaCY4c-w(5XC2@blo&1ww z7HNC^>Bz6{WY06EFC?yqn}!!;eL9+Lu4&~o_Q23a)nhErwaT(*%*Bc373tr0Cu{Kx zbbrpBjE^h4awp-6N6Wr*Cu1!ph}|a}e$t&Z`8jv;kneF;%vX1EQxOc{$9CtNL*$oi za+<>pnFG$ui8aol|IVF!cJ>U^JFmV!UrF$lK3!>n*8s8rEL4l1p-+YX@L|0-H*+)p zrNesv`*vX84(t8h9atdm!5{3ve)_Q9e?SZTKl=2C)DAoCjWR??~*=oD^lfsIjr|H<*vV@1^(e-z3+Bl-wx~j z9DVxJ!+N4)9Dn6uy&ve)&uM}GB7OR~a@RjapZ;(6L`wj{FnSLH5Fwn3Xf z9X2JH9gMTqzzs>UwndBsL7*|n@?(}*E;%sys!aqF9C(B*cEWi{Ymyr-ul->BD5;gJ2XwI6K0`sDbby z!7$K-mx*YtOStBdNGb~=JPeR|B3wo^99Af#gd8L<6(O>ZVXOcGgTkJ!i_%qMSZ0ep zlmY?lA|-JU4LZUdqeTWeFkF2_W642=npfqn?3)%`AeV`#o5Mjc0CX7rkWduS_{AVN z3e=G3=({*T50n^wHl>HrQEBTUX$s*dJJH#d!WRWGaIP_LQAD#9V!7FrUJwE+CSv^} zBkKs`?8_q%gkqZrMP${1&YIDtc5!U`7 zp^NBvnwB75sgPs#z@=zma1wCSPNab_@&jQ^5FucmE0F;{uB0L!p)nDDJ`oNk$;K+t z$TyK@AH&oo>YhmwQy6znLlP%E;yNIijx7OaLpX^%qQ)+Ht0VbNNitG$0$G*NF;@z0 zizPWX=u|)XhM!QG83?R^0llzC7M8*W5n8tmhT%%(s1j|3_5xAI3ET;!)ccdxXr(=h4p9x}MPDFF8V_cYFP|+mm z`w8x}r)@U`!LVT9ccj&`C{aQ(;62`0WCvfkWNbxo=VxcaEv4U=&cbR5JT=LJzc^0x z`EpoqgZ3%+*TZ@Y57J})xx;$jmAl$wayzSXyCJ!~$GQDPdDKeTgIal`_IcwmdC*kX z6eJHCNuMLiU*OJP(#l`4|3~Q4FIph*FQZS;!+J7!agZMm>zyzN{DwZ|Q2&-bX_Ng* zpT6wCPzj*Tu1hWO*Buz-_|M`Y+W2qlEI#i7yZ9EtHqT|HNUve@+YhzjD`~ zmAgoJ-MRnya@P+#Fz>%e3;enR`=#7vagh4_$8whpT!a1Z%U!xcQNiQznBOmh000m` z0Co7^#AftP)Bi1O#_FP{hC|`bN?($QKbc%r$@);1a?X{b*CdNEYDsufx;*d>rWyI0?#Rp^~6+_hSP;@oFfG7l|)BrV_gs#u98i3 z#twsFkCpr>?UmqBw^2+|y|1e355d{ObuC;9;pgO1!F(wev=sDeBOM`N)IxB7Bxd6U zkWu8;DE+2TIZ@aXp<=D@<$N3pO$OnZYch`>F@CCAFY0FB+$x?Q;abg_nLv8-%#J~f zURYgk_(?SE10IEPM1$(!%H;*__f>O<9o&j;jy6#L5pTKRUM#%Au8@&hWu96= z*f9ehM^}8ACTYNWsJZQdPe;J|ICON28=!Hj)Ydit?g_waNL` z@J$h2Y0zCEqXW|HD41MXlW45*yaF-*vc|*NYuB9nJ7cKy6vkU%&n3l*Ot5~8ISvx_9n zysN={Tmx34*eSx|6rp;G8`{?lq>;PWT6|BNJTTBwuaZstY51__Z!+Oid|$hmQ+w~V z*H}Ho$=>og&zpGF%7;>LQAKUSTAD|1<}UxN*-HcJn*|?i7<)X5#2g8;h{_%vcO>jYvGNqqP zSWyFR%7^f^0H>4iQTT=4FqN=7uqDYiBiSq6hv`iwsWLdOl1*Xa8ZOG>r8klbdZe`O zVy;V9h{tI>&!>c?%BVAr0!fl88{~Q5aPinzM=5Nzi@DeDEiGlQ$ zUV`g*v#+Y^O?0S8AH!lHbeZ09Sd?g@cA`kumOYfO)bj8RYSY{6tBy?g9;(+f8wOa#El z-4_UNoysH0i@GV{2ZXnBI_*d)8v#Nt6fGX)$Zg-d{-vtkQTYVmNHHOc44;b#Bf=2u z;pvVR&Ri(hrIl!ym`s?hYp{!E@FWWK&NR)mk+Gctfijnz^)}5->Sw|WkBax+2apey zCaky|hJalC`HLaYQ*tJvr%s}l?!_-&xyoEs)vLHRg&rCRxwQ-97AtrQ9#Vi1x)4H@ zDIPk$Fx2wgTF=8urhaw1NZ=U#HHB`NDQjY);Uu5$Do)OeL_+9C=X>Bz_U_+EMNIPBz@rV4>3OByI8=GLN0{*>6K)k9`D zG`NyN4#6A~yFxp8ALXJR<)Z{M8tk&W$B_Z+!=kHXleT!#ZK_Ojb?(UCcuhJg_h`PX z*PT8%H~n3hBw^D4Iqaz#W{B&z#n>l0rC#7LaKt7)>_f$tnJszf{3Y2m#LGcZXN!qD zh6%Vg;U4GxP`(!wDwCvPL%A_Mwrm@>N(7MrJ|K$WfvM?r4J-H2WJIPe?Z#sR;F0-j$>GqCn69w+zox+g|r+rp}XE z*hUsbI@}(N`?z(mC}rY8O)rdt#>j(#yDH2lsIK`0-5hF?E!fXPxA81}0d2}W$j&3A zd)Pzx7XlxJZ;ZSszKfN^aIbO#k@BPcr3kuVg5&5PWHV^YDII(-+W)GvK z3gXzZ4^A_QqmKG)}s|I|F)vD@qsH4YIgUz}M8Ed|7$|U*z z9TkO_{Bp;c+6%Fq;Wndt_f*fcD-KCu4`Aw%ixCJ#uDdhMJyv#BZvjwuRmBnL*UjILcnyI^aEDbfVVl)VIf~4iefrW7Y(SR$HI@pvk7_HJs$z#&_|# zXz(6#;Lz+U7ld*|q`LGUxY)vqg%u%`;#eXSnya-L;zhaY7I7yUb0vivvhQ=w!`*5~oE% z(6SR6=5tL?<@|I|55C^Xu-a7SJ=8)c#5B;0bj>H_iUmr1d$hK2R+z7LX_ebvB6EO@ zG`xtAJuZ_?Ymb_nL7IXXbOyGJincb%Uh+abWOyb!FYgM7@r3Q_`Ka){Z3e++f|M@$ z>F!Dj!hjG64naBCEOc#NX6if=$e3DLpn!Hz^doyVcFZtJ&AS|+w`H<$l8+=FD*Lng zSzaZZraipXy&Z5^iRamflZ8EQo4Z5~`0^TfimmybP~Upwe)muXB&JN+!l~G9c>O&d zAXiXCa!_3r>D5S?C)|jeq2+5#81eV+AYM0ND`oY4sz3}1%~H_Io`;wS$U)Myugk8g z>i(W0QAxmZ3G5y^EQk*|2pbC_`vIqU@R?e07ZrLe9?+}0mxoT}$?ti1I{=K6|+3{yp zb>A=&k6YLcd+)1bk6k4Wn-@ zXqk3dRR>4iOZCDISU8`|tWTG>K(c7s?)tt>D5tWT}Z=pmxK7vmXBQVQ{V7!~eWVOrS{V9O*U z>-#C3N^{->w*?UFvr~wqKiMTSX@YNnLz#WSnN^9oRp5N09Plx?gdyhuC8yXlC&MqN zTq~#YIHwkzlTDP{P?b|Bo!f4j+XMl>m9l^< zM=!ro{UuLHSZw7tHnZzmnRJzGvZpA|fF_%W$=yzhFUYHMpvfkg$~>r}_bu5(Op-Nu zm28rE-h7p8>Qt<5|6Q_)FS%y)Te7Jux!~fY_BY8UcmLY0le!)4lJ~^FCYw?wtWL5o ztLii-iEi4#SO^V>jtw6P>re}eRlFO}Pa9aglLGh5F_V2Z;pAS}dV*>iyHNoxlZpEw zCF0Zw!6yNGU5#|IRl1#+v^t<8sW&&bR2g;fZ;>?9J4V%4vyg=}bC3|SX(ws;V_8f# zo!Q71u(I>T#mdjro=`WoKXPD(SEi~afg5p~-D^Bi z9je-kCLFD}n-UMSKDf1c=RQg9XeFO#Ri=C3#oN&p-5&RvOd&1=iJ;SY-v{T^-1WF) zj=lp-Lhy*h`X&$y#28_B(Allt3QBHeqi^?U>N0(ar6h=`ECNi9iZ~nYtmx=$XCer2 z#6pl3-Re~BsliIgXnauK9XQZLhJzw3{SF<8>TflF%yKz zut@uZ%=-uoB+S>lt*i#ls!a*$NP@m&?v&keved4%fXQ1 z0wA(bpQ;m4@RP3lR5-^q8j@$&WesCaXY#WsSg>sj6CDFQ*n0aqLk9eDEPo=|?r0?JzvWIM`(1Qp;`2R*3z4=>*D9$65q??ZCA-cK(ZJ zMenEFTjhH2q^AwcUtJ^-8i+{kMW&_iIVYrYvLb^Cog^tNxmi%08Q8ONM-(DyD9(xa zK1usYOU%kfMQ}8BY6mk{>4ak5ro~k;K!c$;XQ5RwnaS!YgNP+#KAlO!lrvZu6{_lM zduAly$rqIIVElo|q%24m?=CARC@sE`c~qK_Q=be*G7S^>F=hSeN?TqHJ@InK=r&w@i65$4@@(_F_bq$TNf{u2Xewdx$erX;k!hPpi7oR^%Ea$E(s6}^C-8l4wJd)8oIwsl@nLXo z{!s|}8OYjM{K2Q8MV@ItxvJ`vL23#XJ?&Yy1l&L;Yxv|fPEC;@(iOe;AS7H##CJ-H z8ccWw50n=@kTK&&n}G*z20GABKYrYa?^-tFr{i%Vf!8+SKbpDpfDGa>&lQFb@gi{f zK@G^fOE7D8GS~U#r+6q9>SsQP%$oq5T|3S_G`Kub+P!j~H6siyl!ZNVDC)u5?O~Ri zE7w{!oaUU&gm4>+F=p-{c1^)GZWv=NWxRoRQgU$-*~Pz@BNqUb>TfLa%s5^|mxXPA zh*EUoklP>`7{9qP&Ehfl5%(@J`v5EHj1AckY_v#S@a#=jcSKA-k!{S}oqn6v)k&E< zDbMz_?&H}Naq~LK#vJVVV{>*NER)QOd>pw+{(Lrad_`WR8+QKAv$y6EhnUt0@Hbl7 zwNrLAwzqpfJx4Uygc0mTy{+eQR@6W|Rx_L{IO7hWd@*(3Rd-7f<;EjB7SQt`z`G!8t)U z1f=6TQ3~^d^spDq9#Q>jF7Sxg#ap5jllcNj`S8Ma6pdTes3>4rOa|5K^*|>yx#}PT z>6p9EW?G_^SLGA5@ z)wVQ>9`q!L#j0&J7{u5uU|R}$SKQLa(saH_x@l5~rt3bUskdToT_BBOwTF=p zsaiQ*Ad=}Enk~Ew_{?;qK|TklxE6}X`SH+dVTY~P1_511CS4h|OPHjEkh)A1r zb5V@su22-U`KXegy6%ME86h?I*H_xVeT?Cf+QVS@?6&{maS%DZG%Tp08xdBP&z&>$ zR`O{CF&*E$0_!@ND-g|v-CY!?o!wJQYfX4p&A3nu|Ng#wGhB5jNSydZ%WVl#o25dD z>#yKhB`NaYFjM+q>9A7#P4|6EspCVpnnR+x&B#G}eg)(M;!Ug_l)5tQ9Ui7(!C_P% zHkf1?v58Wp-CJ;g^3)>xS){K+yVshStd;5D++|5v6@-vzO8WCT7qTuW54PYfiwEJc zuGKMLOD|E9x%G}sS&n15MEPE`MPH9k7W}owRM4mPf!C6rS-48XhA(RYTT5#cC-JpzZ0 zPblx5?S0x>0~uBWMk#FK9K_-QGk&}#tJ{HT;!Ni~Gn-H{%{$lc_=>^(!?hS(D!x}lUB-f}|6HCK9w!kxum5~x%{ppn$%WD&MIGRmgf1JI(71+r>QsPi=v zVWT~Kg9UO(qNC0tmGlmus_^7nDoIafoM#Z@uWm zZ+mpiNn-7AQDxtQz59k-C=i#^Ee+%hGl{m?N*zpsE^3VfztEFnCKS8%UasE2&lhkv zI5O&<>phQ!DUxs&SI})g^%lc>!x3UPtq1%gEim$hC9x?Fn5mAcV@jbhRnM#~XZB5< zp1GkY4pU>+>6|`8ZuO9!f<8^kkb8M?Bav!mqR&waDaBiZt3AozG6ypGG)HJqMmY|I zMz-J)Yg$UmS`WTSgnvLMhC;^GkuCnz18p6rEEx7E^M!E=3L}ICOd2>4f+1xrLAF4n z8sTlF35*beG?J)fEHE`doJAPI}QJc z^BotShE^`sY??2*ryJo!f^eXFc!cJ0 zNMdxs01c4*jp1Yr&&Q%P+yiv{mdtp}sND2bih+Zk^jny78t`lEZoyXMH{z3o6o_2H z%W(7=oJ@ptfXXqQY#B7Q>r$36O0lCjnfxR43UkIO9^DPKv8rJipGS5QIBSTR)nf=RY~S(d?M95% ztn#7XulLtGC>yK&;Q7LFnP+w>Z;az0{e|ig#hWAzsZW-bW4`mp%p4M^fUoT_Ql z02aQAm+56R zb5!bz!rQ>hMHYm)s)&{m%{9xnZ7RF(<5|XZ-fA1Aw&T4mg=HIcW03?(AI z%o5`>Rf>cRXNtcBtJa#Tl|x3}dcDkj!1qLJ3^E#v&UUCl4-%h&jMXDr7kCD6q?m|W zR~^k4gx5ZO$T2z5=Ve`z&iBmp7JmIRQc1p0-Dl5jCMRbRIkXK4o?AptPOXaDXpvzz zBkvPY*~;3~Ec3mvw>+uF(xMZx(0t+id2;qb-e$f#^Vx+9{?r_jL`9}Q{D;7CmU#?s z+ZLMlYfeZHCb8RWTkqDH2ii<6UPrQPr}bM`idSBum9XnnMPJl;JGFev+pc?nQLgOW zT}rk{yWW>|mI!Qf%tw$0LkdZp;vhwNe7v2t2%ltM~W7F?#+8ky+)!Ed2p8oI( z$#D)rz_tm0X2)B?aRIm9wv}V%W01Gw5{-aer~1rpWSis4-FmxTo0+{tB&Rho0sFzo znf*)&rw!G5`_b~5Pj9`QwjKyLK*nYc%G;dYzpQtd`Ft_+xgN=R$5X&@0e|+eO~QFM zyxwtzWA>=e+j&1-z-dE$_IRw#`JlAk>AlVD$t=>V!*>GCyOFb}s}iq{N9vsq%4g3$ zc)vPb7I<|$HhccL?bZ3G`d8!Rk$@gzlLK0B1ghjDPXwsS(;Atg} zkgTgh=834>c9`brUza^5qfSFtp+`1!MQ8QM?Vv}#I5JD2OG7=#qPlAwEjy2#9g++n zK+tv(Vcc(ij~$CoLP~(yl2$gU{$G;nadQBfbT0V(4`pPHk4nu!}PiSNLHrgxA6 zLNi?(L`rOtb3vqTMd$~D*IbFn+E|+!Va26La%E*v0s*g?ldxWvaM^euvr4wnzm^co ztxP%bxjzLo;L1oeBX|b!IZkT+Wan=wOO3>ce1T^e?!&}ky44yug`?)vqD_HZX%Nt+ zU*Yf9D4(06$Bh~oC$T6f>e^oJ!y@j^>NDz!Ja57r97X|Az&FA{_g2R6*z$R1{LUZx zTg-J-l4rOAq&*uXgTgx395P*NK;v0So}2_PSv%fWkcUCwOAP&w6@4<(FqOe*y+w@>zNs9--?pjZ5Iy+78mmM zvw)X=+>H`z>--C zIDMWfsLg0DwbaP%TRvUgR7$qefbh0rG` z3z7hLCLcAkjtYHzu0|h1xm@#ThPfRgdjqMSsXlkA@K+!E=}B=04sSfBZt{=v0V;<3 zXCW6dp?c~tA>vBD-svhP?*&o9T^M4<=y2l=TD7s?maiy~&0)D7Tr!lU8Q5fkfP5Cm zoD{xo3dDpL4^ESD7Yr!R?WCRV*V6BPTakp47b@2PRHv_$vU<~4Na7GI_ljxAR+jok zCArMYPT)tXduQGAQnKI$6<5w79{?Vms47Fc>M)fE*1KQ_UUc+#f!p%~sd4BK^6W9= z4A=2^w&m>fQ-mj{Bby5H0m$k5maa*d zv_3?14Dh-gM!DoMDDbd1M-o|Y1PBfmLoD{*#-z^C2hqy zv_5`IRifOS)Cr2JVsf03-EgYD!iqjnZd|6wcswQmw?&jw)e75G^#&#GSXvJzZzH}A zU;Km6_KFJjn`nbov9wG6UU7Sv^-{HdR0jCSzvHcE0u3(1?XL{Fq7AG ze(*Ja)FaOha`zJxZ?C%`#TFfBE!EPysJ+W?np8%-Nprj_6QkpicZ6;S8s$g@Nqco3rTw$XW(FUZrOcBO zs+MuO5pNE@QsI&5Q<%|qvPQ&IN#3fh2Eb~D37@s<8QA1+(cdC~8#DpA- zljt#y?~vs8k^0&N8lYZhT#L^4BzoGbbLzHjK5406U^KEO{JcxbRA!a}a)?go%QhhW zyt59TW}NTbX{$_+>IIq{GV+6a32C5*X+g00>R!kON(#Dt*_6&Nm8Rl2Q#|Jc67crz zu9Nwp8cr>shA&o{MNO8VG`$OCHwe&SZGENH;wsoh=Mwb56o?4r)mRufjqyRzvXzt!8@|6|+M5jefm60wE*mnQ^fM{HQ|KON& z@?3o9DL|BdKop9UwZuN}3Ipc2T>BEUzNe=rvV~N!Kg`J6t0VY<=~I zYh(tqCQk=_=F%^`o&7{`w4Y)oWl7Fy%Dt5zHQY}Zb>p0kz(MiI@(yU7_flJLhs%z6 zViI9z5_|M0CO8+)y#3ioLlok=)=j1@9aLQ3^~0xnPet&>?k-!T2Z0^C?quYawllT5 zwVhTlA<+zLEt#a{aP>54pwm(3nskYiw&G^k zal{e7_6UzQ3ZWibp@yY>oKD7SUC^~kWd?12BoERqS)vnNCi!Hwa3|5WYRHD|*p?{A zen5DX?b{BNG?I(O23G$s90-g24c#_n$*wHc?(C*U?x8Me_k8Ws_H7EaC&qfqqf_qc z#%$>x!IjN!g0R-OxNeT7Zrm2{@fH%=KIavlEp9b$Zdz}g?rrjh@A}F!xo+?6knEgW z==j#}{pRof_V53G9#)}f04MMQr!>L6UQ%#i1849Cckl;?@CYA{-;w|@aT&Ii@C?`R zLVLmb-tZ3x@emjB5hw8yH}Mk(H4jJe6=!h~<7*Xf@fer!8K?0YxA7at@f_Fj9p~{L z_wmsiaIlp$82|AiH$Ngb^69edBxmv_ck(B%ud@6VxRTVBX4 z2KHoEc0pkh--Nd<2#Kgjp_6QfAYb-t$9C%23;*bg1;?0&@b+vM_i=|!AcjhX;6ipW z6O|cca(DN4$8r%eY{kN!gvbjJJV|)h_kDMfzDT5o0Mdb&B`)^k#UNgONBD#{j;@q< z)ajm#rilMp_KbO_c!jt4iwBN&E8Rdtk=WBo{5bODZ#64qzR_1k=LDq>q%P39^6c8TbMNl`JNWS8$CEEF zICQ(O3dy85Ymklk`10qYE)H?aLHifCxTf#lJbni0_fdZX$@U+D2`acCgAF?P;DV7M z(*CS7{1)KZ;>BQ7*q zj0HJIhK>tKXpn^~8hIp=Nh-M{lT9`y<5>A6gq@RBTB#ywYe}e9fdSyhnnM5h1$dS~ zU|xA9OJkmhlR;|Ml;S|Hp|yn+1G#q@L7Nm9;z6>xr>2=`3OXpEg&KM&qJs^XD5H(m zwkTEjiG^R6C-T|YK!G~CX+-HIq$yW9nKmRu?ghCJm84F`DXXoz`YNokJ_xC-wc2_n zf5OEnkeUI&89W)Y?s1YsJ2fA(1w>}Dpb>Cq%`}GWlUK} zdYaYk8U)GJJ&9>hv(1hvCjD^9h`v6KIIlA$KZ1li*- zL8S1xRiNJX=(a)~FDY_dEw(M215G}1{cy|hTM9Y|IyAbVQmK_W8^VTwBg>(79| zfqE)-nlW6EguPll(2W6reKp%{yZtuYamzjTUKsNf^FSo8*&kY#y=zclUd;U4-p^JWz$16W%_vop6uIjJ$)%4F+ zVyeF4FYThG_p^{ndh>hLE%dnQvkN~w@x>c|Jn~C=Y!%K7wF~a#$!yUqeEFLsSf3C&D?eOm@DACt}Tw^(e^ol7h z8VJ=G!#N2Kv5Ho_A{Mi##ak`UB0mfX|73GS?2XZ6Yf4Dxws@DxTxs z1S}z9&Km>Jju1%*I%@nQAOk7LK@yT;P&f91L zROKuPGsmgUb+WUa?tCXa<0;R1(zBlSyeB>ZBg}mAv!DL_CqM&g!(0lqpawlCLKCXc zg)+3E4t*#@BP!8}QnaELy(mUAs?m*dw4)yVC`dyp(vgz1q$WKnN>i%Rm9n&@E`2FX zV=B{`(zK>Fy(vy}s?(kFw5LA(DNutd)S(i!s75_1Qj@CGr82dt2F0XPqsla>O0}w1 zy((6-I;eeWwX0tJDp!Jmd)#9F&kOUPIj-E_3UOr z+u6RtrLvs8tY}e7+R(0cw5Dy_DYpgJ+0yoymuhQmbF16k^0v1T;i_+g+a%zkW?lyg z+i{ai8Rcedxz24abXWCU=|dEtxR^0Jq{?u{>g=PTd(?)Sd>%`ble?B4+Yx4;BG@PHG%UIh!6rptpJ*$z^~ z92T*{6235zFkBD|XSl-~)^J!r3`G$K$HV_2Ht~p2T;dO_7+54u3Wr%N;}g#~#Wh|r zjdN^c9piY%KJM{aV$5R~w^+zOCi0DuJY=Fx7|FyX2~`^`Ex=txs~(w1iQqVe2lOiP;6mG<UPo$Oj4TiL{Z zcBMPKWenMGCWf0cwzJI}hVfO~-v0kKxWk=Klr&k~=0;PuVlXg;xUCqyyA{Zx5YF5 z@O^8%;~xJw$U`pjk(0dSCO^4F>%EgSqrBx^hO^6K4ilCGg`ipHIDJ$u^PTfNsu=f7 zTE7>O0am-`Mn5{z->UQNXf5eZe>&9py+o;Gh34gpI@Vzd^Q?1yP?D5y#V5J+u3r@A zWIwx4FfkBNsM+iYqB+{*E_bn7=5YqXqin)(#<9;mB%$m(-~$g=bu~RN8v4876WB`0C%hxV2-7<-Hz?in$@QACfXQEcH({+RkuEE54Uf+Yb1 zNy0!*g^@ZHUH9Jq{za9q5!!Q2AejJd`3J5V?r$Xb6OjN1q4Nv&I|K;%1#;$LA_<1D zfA!!uYaA&=9odo{RfYi)#EeAS|M47;h)Tljg#}^7K+vD0L4^Gw8}_i;i(G{GF$DIF z3j!j&`gog5DdE9 z`6)z?WC1~h0xkT7`!WAST1A<2G$E?!j}+Dt=P?&-v;(u;UzGp>{Aq^#5f_9Z0R^%K z<1N(N&Q7@k2i(q22-C^c(~Q zDp?{Gi5ps)vIGDHzTj|3Nm;al8fuHRAm1%vqK8Pq95xI?sG(25pClFpBwB=J_#Yn{ zm5GRA0I;G#01QD)UoEf#D`y6h${Zn55Qvjm>~9HpQj{%G7`ib za$$hDB1Do9L=FT1sEIO?L1cg9A2u0e$O!gUAc%-1!32R!3h5(^g;Nhi&AW?p#-A#q~F{3;V z#7Z{iNKp;tMF3-RR|MQ9aCX^bMuaFB$dHs@0MG-J;NV;)hBInLlW`?Tpdv<4rAYo} z6h6soI*Brl33b$oz(oZ26_IzEgmxz9Smlc^_=7Fjon) z=%xr0axUoh1XK7>;Wkag^i5&+_2)nNq(=0iLoL4fE%>>t>9W`GPx32N7`Opbq$YlAG^jXY^2HsV28AGY4*8QEyR!jsEhgjy_R0K}+R)B?CZ z5mN37m~f;!^5@GUT(njp(e}h!o(5Hcr@1^PBGM0^?%m=&ZP2cE=0f)xl;dx+G1|J z>77HwR_H>(Kfa=(3Z^UP{-#uEUv*q}oMp8eQwsF7Nj4`;f)Eq8DGm zlJ6F;@gA>A8H)-w>bq&KR>T_eev|V$goUu&?0toG0Bhq$Z_5d;Pa!K$>@N3?FZpKC z>>h^q9>m0%E|iFG`Mxjw#_wTFTl$_`?GWo{wU%m~ul)9}|Nbx2IIc^$F94s^^cFAz zm+I-J9ONdjx7Do!N3aA>Fa=kz1z#`*XRtff?_AUm2Wv10*UABhFbS8i37;?uV+8-E zFblV^3wvE`5XHK^Fb&tR4W~xs-mnf=(FpJG(RojK`LGa=4g?SJ!+rm-5ht+{FEJB0 zu@gTrla$U-^e_}xF}hH(6^9!E(?t=}6oM@n7`Im#+t(QPR~ZY~8RuUXSIkkKR%uB@ z@PY*Y!lM4NXm}RI?A4yoxP{;-QzB1iHk z4IpBKU~$ew0wBQ{95Qlj1+&u0axM?qE(3Ef3-d1@Suh*(FeCFX_sA_UvoiZKG!t_)KeIGfGc{jx zDub9i;GZO)2^L4_K-i{_y<|pM2r7QAN09T9HAGNG1S9_>N7(kc1zh^GBef zBH!_gX<#?2u>_{>UgWM*)q^Sj^E!E_z;zx~@s8`dF?Z=PBjQ{jqY+iTq<0e7W5)4A zOT;7v7O!?Oq6#QKPeetV7w!>+I(IP>A2h@TC_=~dMjWFf1B)&ArA!+K^BxC5=d@3k zhabJ^LZlJg*_BJz1#=|MQDuE$678p;&B%%~pgt zPlRxKgi{*?S#K{tccN45wOU__(5glIa)v3{cja36EnAJwGlI|hIjga!?%N>4L{g#d?|SReMO zsw1+37pAB|NC1uZ)$}PWDF#4ZLsq8}1Q3eN7C8T;je7)R0FXe;VF=#H&Qzy$7$n2+ z4|@+p8;B}FG^q8Uwws9sRA68JSja%K!nJWO?KRe+a@voVFeGosia$7<`$ijcXg%11 z_1R$fSOx+l!P_205}dZ!7(4W_4r=BteOk@X2R0&H?YAVC`hppOSYf~z%?3Pf}I1A{Mh zoPYa&u=PWb0Um0Gt!C(BS2}*AJF7j8bcp{&VaG{3@484z)+Y;TWNfB|scqVfh`wN- z3gV(zSS607NMQGKru;e{WqD!w5p;tDX?k9UiqMb<**}c9uOK|IV76X?#lhRcX}eg( zYjz0gjW6(zb&!lX2MDX)BP-r>^%ys}-x5XaQ=6N_wR0~^&wO?)VX&t~9SZBBlL4;E zhN&+EI6B3z;|O!q0>DtD*=fOi`htlFD;s%Yfz@C{upp>^7;_9{dXJCwTGxTJfqMja zclk;Pn(gKegiwFuvl|F>oTSm)sdN7}M9isWw1_>7fq3^7JEl#KBmnl!X)8Gg{Jpat z>#Ac-Izl-5QJOqKV6Aj)f?mCIP6PifA!a-A(tI!SJm?b*$zY$DYuAmW>h{>j0YT{M zPM^$AAcPf!l256cgy3d=s6afCOc0Et14_0ECKWO?0C5t+{mBzS_V%(BSkmM*1p)duJMiFG2~xhQ9k>jV~}J zzK#jrl8J0E=6u?tIr3Gi=srOB`xRhAf&c;992|9U;6aBEA^!3gV4@U=2N5{j^l-yP zhqXK&Wb<(2M0+7a`g)jz;y{TZ4Z^&Lgp9z42@E!z2vI{!ln?!>yeRbJNuxx6CUscH zr^5sYY6^Y2@FGilNR>X!2=xD8LWThvW`$VK;m(6iwSXV0HOhZcSL-$lKX zSB+M^nssZ}uVKfQJ)3rI+qZG&*1el|Z{NRx2Nyn^c=6u%K5N-ZbPE8bt(*rioHe@Q zRu`KxhI`PSEtI~zKRo#}yu*xJ0-P-0IQ%cHVi9=t&hnvm?}yhPBy+G8*6beh>+T>{ z5Myk-hu%9Wu>kT@Dx)zXYbc}B4r&mk>JCDWzS0ij&>;;1u*jkE4s@s?@32x3q7nlD zz#yW2vE?oRJz~+g8*%^4QO6y5?9s;`mGTS7A&D%~$Rm+VQpqKmY|_amp^Q?>DW%-# zApqL)#h(UuYAc}yJ-TkelVb9Vs)k4jps9|^@+hc>(hABSFu8k=F%Z8x$W9?|Lg2bQ zBl3t(ryh#}L8W%$(%#EzbN<~)M zX>%;~S>vLm*2iqM?bh3G!3|g3aWk`p&5x=(5JQI`lw!Z6Zlx~O0NR2`ie`%%u_N?` zn#e+w0*j2(@`V4@PqyYpeCVG8!;|1wpG-23GcY4qHvl%Uyok=mK&nn9?<~IPmsrJO z*dYM&lVD?rPE(1MER%XQ09?U3s8%g+)AXTU)wJi-pTM+dq_2K4GznYA+W-Na6b(z~i?)kdF|0i0cBrji z45}7~B`}N3nj+;YfSP13le=;lC8i7KyR(3IHmz3|i>4yl&D} zDFJEJb)v)U4%Ab2567vbUubqSPn=P-2gG_=JRL!hxPEAIx*%$&!i{>D+W6y#Sf{uwlt_Wg4ja>68r#6b0|4bMl6B=^d#V43CoC4)DofqOztAgd({0(2bqvf zutE^gg2P}2sDy=tc@T6COX>#zEkMvjzY59P%(pNMS}X#qf|ExU5}hqDPJ2D{;SYgW z8@=qrA9aa~5i0|}ATE(O7II<+>%+tztxk$nwBi-9*d!`0CT?grl+6Or4wZyOSt6|2Sw2(`nW@Pj zZXExJop7=%vEb}5N>o##9^xn=fr(_2>D@$Pq7tGYg+K{-$zyt#7{6qMhgo@*FX~aR z;-yC=8dz5=7PJyVBEC3~FO+2;qj_hY^SYa;lJYjC)Iymd zX@#fkBgqOTWu5_O)_R7<3VpIOJzI>>J@JVzkQ_7s3q=W^NEF4dU8Z~qI*3IL%Abuw zq!zWXg*6R`5&qcMQmcVB)h|~8 zUgI9KCt8_?tXh+d*ADqk@&t;hHL`17iTW$Ll!uVgfgq}q0@btHlRKwcWM6?AS;m z^Zm83S@8~qI7K0rr7EBujO|Es%UH;cFe@x#ZF?%D)-!6RR0m3(g=Pg$1_|Z2Z9;8x z6E<7+;d8m)P3u}kn_l&<_a}wyjc_LeU-lkLzH>XTS8pLVhI)6t{q^sE0Sx~%z4Qg7 zjv3T}1(jfy0y8V_9Su}PCK;Uw^fP-Zl5p$W-qmFIF&v%@grB6FtFPX_rcJgX& z{A40QOv+WZ@|81$Wi4-+%U$-ePf1%F-Ac)1S|0P4fpq2|syS&1Ye z^P44H=YPCONO8`}ojt2$JP(@CQWP|209|Mt9a_ z8$bV=H^V0Ov4wMKWcy|!DjDKMyb}s_q=Z7kMaq^$2b4LF#~;>R443lL?FJSxE_3yw zv+X;UL|ai52MI+#$m@_$I0W7uLdrb$x@>*#o8SHR_rC$&npQV0(!)8kB`KuDQU7G& z(Nefa>hYe3H|AOjuP-acFmLv@I{>LT2)sRn(#|Mbnj{bS$x)tim9L!Tl`%FqiEJ5q zsHDK1nK;DjTPk`4VBrvVh^n``81S(I=)DNZwDJ9udV`a04iQ5DjGmNm{6rNkxBAtw zo^`Eno$JHuxoT+fkjq|V6AKvy$5E1+q-2WcNkRKXG#-Gr%Ul03aaYRRJ+kzNtb!dV z$wX4--FJ#Jap87{h~6J!_@E!8>Wuk%*C8Kyo~~Q+mA5>aDeuk4i$(Dl2?I(z9sp2u z_#sKp3fiX*`T%sE?g4-|x&t8i)vx~Z^$wNc-yV91u>M(}Ps+3d;QMXTlf0iNx9Z`A zlEy!o(U*7r^PwMo=}#Xr1=rE8ld^M?cKjjQzYISd0{(-Teldt=jQAhIc8{Q6Da)6! z+Cwtu>xi8C^|$~1@t=SF*MIY(0iQqgF6{h4dLA!ZOwOk)jNZON6y8qb-lQ~quOA%B z{PwQ`E${*{FatFZsIFz~M#F*xZx&q7A#|@X>J5DQfh_;vk99r{`5>YMNpLX^MB^yX zpOnIRKtlZHu<>va7!k!IYOdUJ<{$)*7%xHuAtD`a3#aTvB}${|umWF*uR|PS z33;sf^l>FwvL#*eB{9SL?rJo=0~|vlP1?-^XE6X&Vcr&^9x%~)Qo-)Ru<_ch-4HT~ z7Gnh$;}w5G2QNY=VR9;|vMR0eDyi=onGE>yJ_U3_DYQZ@^g=bG zlL7!j#1s02#3lHOGx`%lNwh>w^hEzr^sknXKF}sbUGzm^G)84~8BbynEsA9FXH;f% zM|reIee_2yZvfk_8&Lvq3P@|#CE*4WLVt)!f%HkCG)kpZHmDObRN_yn^dW%2A+~f% zz4S}LG)%>G(747z$bdyiWlYs{P1&?f-ISUnG^Gw?ma>9FBq0~y6lq2@Px-V@{q#>0 zOD=jPR1_wpU=vUgHBl9HQ5ltJw6aklHBu#YQYm#AUG-IAHCD5NW`GA*%=0##w1;w4R(Z8oef8?H)H3#?m43BY zjrCZO6;geH6vhAna+Ii8qBQ^LBaf1`TCMe3u{Hl5bu?HZPDuzNtn(r~1YhcDTTk)G zLTgX6bzRxDT|=!2pYXOyq!vb@eooROG}K-7bzk|lUv-l#2-RN&c3=s%U~3ItmCHU6 zHVPGXG|GoSa3)}@;vn*fT9b2OJ2GP%HeNS2Vaw}dF}7nF7G#~!V?*|14K`&}c4e0Y z!Kg`HSvF>6c4lc7Y0{KG90FH5l!@pxBw)5?fi`G`c4)ojR7j6Hxa1l3g6?busrEPDDY#BFlC3kWu zw{k7_axph@|HMFXC0s*in;<&* zHzca|MpO}f_jiB^xPT8cQ*oDQ@z;PExPfJLa)xFLGWB{_17|2N*woj7HF$$L7z63| zSQhv+-K)j)u!H|i_=I`&K#aEsDfYck_=RCOhGkgMN_d8C_=ZPyJXRPYC@5>QLSi9< zL;e>uHYkYeZ+as`RdINUnRrw`7_FW-gi(=vb3}@DR9rQ~ijikfd;y5HluJ7!Y@2wD z$(VqBm{`1c$I`fr*|?1vIDzdmOi*G*sFpbB7$WFzi|+QbJY|O&qlVo$kOg^l*N1G2 zcwLGZJ1)dA`Y~kMHjz(ek);WV_2(udqk0E9lQmg(8^U6NKnjQxQYaWD{1_s-v@u3` zr%qWjly;L{`ISZYK&;|@95(MPNJDr3kc|Moz_WR zQq#G>_%WR0W*Kv8J;ET;lqL39rf@kjh*g{cI-rkre(P5>C^)7>uCk=rB$J{`n*|8e zcU(QfXn~lT|BF68l!`@Vi^4)C1^S~wT5(gymLnqxN?B5}rjaz(GU!Ns_v2mAkTiN`+2I_@HM%-r!?E!$s_a}xX*PPmiF3qBuI@#{TJ&4< z)uK=0Pjp#CLgun5CysFzr4#$KQ9HF)qxtSsGG^K%x-_cm`7-S0v5O3lRXewJJBP{l zK-N|<8pO9FV?DU~iizsClP@GBdaH(pW=aH(zje2zd%6etiARH-HDkF&)H2$dy1o0m z!8^Rgd%VfpXP~>h(L24>J7{=@l5-=rt7-u9Pe!ZUcBPcga7^?c8($0l%De172{KvFSggl2Yaiwv936@Aff zIA3FB3!W9Ol434)LbV(Mg3DJ|NXE?*Knl|2j2S)DMcsjSmV%yD3fjV>C1amQz13ZP zkUgY#q#!%$C6829SSEsG`o{{qKtPaOR@;u)S{@@Wl;T3-28NT5i{^21$;w66KtuC!8 z{^Bt{<28QcIlkjP{^LPDZN|_slMv1zNSb^>92n4 zxxP8WB6KqxAAkI;yo2nac%xe=KL$eWL$vGN{_WvD?&W^&>Avpm-ZK9P`|kCA??p3J z`Tp+#zeHOz@Cm>04gc^F|K>^SM!0515}TX;@j1WqJ^%AT z|Fj)kG5Qm?L;v&QjM61K11jkE_97ZxxEoi8rr81OWi_jnGaYDX>2I5^THBFA}|s8#{gsIkM!*lq*}l zj5)LB&73=X{tP;_=+UH0n?8*?wQ7yO2DY9FmaRrI5y>iy?eK0x-3bX3lp6rCK;8$5 z8#KN;HB;9HTb=b4z}E8M!^Z+ojy=2f?cBS2{|-L9`0?b+n?H{}z54a++nc{?yRLPC z^3e`NF1VmQuk;PlerQ`n68P0$fkF*bpIZmLMG9R5IhFsQdzmd(5p)t>h+&2rZpdMW z9)1X7h$4c6h$4Av9rRj5EhfYtUei7F;#VHM7+8ulA$1l}b@gaaeJxs8&}+C2 zM5K;NF3Dt*PCf}`lu}MfWtCQ5iKT@2ofP3f1S$wof=neC;DKGrhg^bOA;)G#e(Cns zmjuZP=7D9^nPo{v;Z|k<{s`okQ-%#B*L8UwifE#WF3M=5jy?)$q>@fbX>w9**<3^`PNWfdL&m{T?*ILgTP8;%T)x$I2Djm5Xk>q6anNoZMfo&OK!R5o{Mg}>aNSK zM&L4pEl9Y5%B)4B7MUNrS`d_Kbo>UD0|CKlLjbHuok9`LsBy?M>WAP$#3dj_$-NQO@tg+%aPqE;4JwhavQ=ks&p!VQ zbkIT%O?1&lYu4huBq?ndL7pOHoV86G1f&F|s=Uw^#zLfUSPwm&Yl}dh)!NtrB<(Ll zU?0tP+it%NcieK%O*h?N(!1b+IwPcW5~RE(-S6%wm=U5O? z6)w|tUyga^ns3f|=bnE~E8YyfE9yXt2N3^rMTkLrZ9{JX!8$>QN1Kr75dR`DlDZ2- zWbeBN0INd5gHC+$#vhM-^2#rN^x7G@?CF^Vm5e4qJ;HgPtkb)mkjqd@bRBQTCg?rT ze=?7L`s%OGe*5mf5C2V;$Dh#f^xuzv{`&9FfB*htbiV%yaDW6XpaBnvzyvCAf%=;t z10M*%2ug5*6s%ya;$^`MYH))b?4Sof2tv&Lf^=tNPU%i~Hsk2Vc_G}8{aOga7|L*l zG<=@}Ye*3cGGq)mgc1vT2*e-?afn1Lq7jdnmlq;&iA-#w6Q2mh)RYe|@_EY-t24zY zq9=e_?4lRH2*xmqag1avqZ!YL#x(z`v2I*62*?o9#x=@uj&!V}9q)+8^%$xadF-Pf z{|LxH3UZK*iDLw$#xFuDa*>Q|q$3|0Nax)Ul9a5ZB`=A|Ol~lan(U+}KMBfEigJ{s zETt(=iON)}@;scB$S76`%UH^Cmb9$plf+^RP}vSH3wfh0e+kTB3UipmOip0lL=d%r zNy)52{^@*?>!(2viqM2A6oS~CNbD90(TGZPq7+pg z`4+-V!WFcl9POw_KMGQd&C~ycC7fDFPm0o%s&u8|0@oFJX(yJ-bfz?|sZF8OQ0q11 zp*QWRPk##3pneB%D67aig^JXqDs`z$ZK_kB3e~7e)k$PY-EsVc5S~tTt6c4>SHF6Y zoPu?%WG$;%Yr4V!EXSANst;ngnZ>ipb*^-+YeKO#NxSNGuYBz*F{Lt;q4?5iel4tF z4~tl0YBjNpZLDJ-3rVGbETfREtYt5YSvl4drkU-mXFm&CCnBenp)IXxPm9{rs&=)k zZLMoVa*u(;mS?Z6t!;0MTPCK}A}{@9UULiF;0kxR#Pv>Zi;LXkDtCjwU9NMV3*7?F z7M^j9u63`A-4AXyyWIcnu6Mr+-tdZdyyV3k4=38(@~U^e>}^ylbSM$hs-(K@?bUJX zi{Jd}w`i|n=4sw+e@qAS-#vOeWD_@#x?o0q?;EsmE`A*W@f~dCTRI4}>&K6PJ}rH@oz(K;R1z zQf#5fU@lHUGHj}L1VsW#U|o)$+!kX&WeXhRvY-Fl-WDIqDYL^#k00`6ul>p=i;-HY zO68P(DMYM*uC)K98!O+2u~}_i`iWXLYM<&Fs?ZPt6{yQKKcyiOg_mx%t2=9Das3v} z5Lv8AhRhH_<4a=D;muo=GCV^u<6N|DEGPrTEA^?NJnY0iRh4cADYM_$zvEL1EzdCQ;D55rNCc>MmEGKpLR_mL; zmm6_e?aXjaNLoA`JV|6P-VATJRG%FZU1sUjFG=)DHrio()Fs@tI`Tvk@FJy<0RTrO zcgY=&@|1U$o2!z_ z#2c~AKOO&4=<04oAsC}m74wFWZ^sH)JVgLm=;RxZ+lVhf7`M>Rj&`&z1lKIau|)b! z5xAR1H@c=LjpS#sHX`BVSxK_a(+>E+`;_kmdHGTbucWJoC)*q$-KG_Vbiqr0@_aS> zuH;^szi-6WkV-X{Ny_SyQhxNLrzz$o7}Pnea7&e5{hSOx}~qZ?Vs9mju4(E zr#H>xMZb~X`>gIE>HY1Gk9pk>}!AfF`RCfSif-Y zvE=!lalJ>f*d~`i&&A?z6!y6f|M;&KTu*$b&uTgFgs_K`4YnNQ6abghz;kNvMQN z$b?Pkgii>CQ7DB|NQG5sg;$7$S*V3u$c0_#gr+~ zktm6iNQsq5fp=($nW%}I$cdfkiJu6Hp(u)(L5QPhidnW|nCM$CA%dsqimwQZu_*tG zvq+1zXp5e+V&r#=yU2?_Wpob_YZa)9u;dT+;0rF;i^=FHx=2{c=s%p4Y^^W~tYBrx z=#1CcD`e1$c{Ggt=MVL;3Zjq-p+Jtb&=1gujp;}$_(yxc*ng#{NyH&yqd*FxAPS+7 z3ZRe*>(CF@sE+?ACEe&vOw%Lhb6go{X>?~g?GTRSmFL`Iri-(2pC5lE)^HuJ#r_7YZWzk}s(W>R^r*nUXgNB^|a~8d*#= z_YgkGZ~^2F!10nKsgLQf5BtCm{pgQ4>6C4wH0~%7D|r%mMU|7{ZeGE8VI}`NaC4Q5 zgdD1HkD)LSpg@kZzz@gxlxulG{1gS|W)N_xa&V>&OL>xPiI*kjJ17)+TN8O4SZwtm z3IRZt0uc(~unO~#mx~E0@R$-(*%6NUHO(QJK;v$SF*lXDNG=l!@}Lk+$(W%@L_oIFc35uexga6_yd`egA)38ZUE8{xkoFP*_9PxnhC}ggISx$ z`7?&sA?AlsJ);!d1e`+GCF;-%=ZKuwc_qYAX7ixcp_x>o zGaRQ7PO+U0=W_yql-79=poyLLi9QTAfWxUSlop+D^OcSS3IkCK^ojqU2WlnE=n`Oa zo7|C};ry z_FyQo(4jMWA%}*Lc()Mm8AM%!OK_oZ(l-|d5uZXQ7PLT^hDoDIYCItt9wO#2qzQcQ zHlze$pGs<_i=v#5aw+BlnDwJ_;Xt8RDyAEvosz+EOzIJ_(IXg25-JKPMfEahijxr{ zqho5PA;N-lmwzqFBAwDx0SZVxhor7KqIYVjH&LaB8ZjFh0O}B?iK?iPDybD@d7+RF z0|BX%s;P>?bSQy67NMD+dZHc0r+G9AqfnTtKo5$xsjZ3`BNYFnD70C>kf*eisgtK0 zVo8p!%B!ZKpaF1Ry-F@(VUGhb3)N_o!m6yxx=oaMspp7S)b|ZuI~!3@hYzwQmS-RAI>_j`Kqt`%CG%O zRxla>t|<@|>8}NAut!rP0(-Cv%di$B774m&AwOmOxSj+!&TB}o8>$O|^wOtFgV=K00 z>vm*&wq~n1T${FSyS8ELw(lwye`2mwYqxic89hswQ!5bKino8OaxYs)u|*GhI}ij5 zxQVN{<)NDFAP^531_5x66}z~VYq@$6Ap%Rcm&>`GYZ`5|s|xG6qkDFOOGg1T535j^ zWH}3ct39L(yDDi*0Tj6p836M@9CaJJyUV)_aX$VamIcwey4$%0SIx^)ysjJm6{&<@S}yxFV06rsEsyS?8FzTk-vqDz)Ni@o8CzRz1D)SJHTYhlqV zN7FT3=hF|Vz^DbW3jRR6?z@Snx4*7Nxs6l{tRVlo0gwvJ3t<1tzYAPE%+{_3;lL0q zdH%2t1(6E;puhj1!3@m778Jmg2dj^3jyATz9n6+J)~%ofziqR^cr;ye8vyh`3#lLr z^xzNrYY!W&z$UziJM2h49Hl{b!y2r?xWmI^8mvdW9o9y~66j`148>6_#k5(gQ=A?x zY{gmJGao#g2&=_k96?D8#$!yzjMSxNjK+^u#SkIJrnJWSgT-kq$MMr|K%5y|%p~_> zHf6ILQ}(u7%g1&XdUH(3sa0p8q@#tb$TB-&k#;bz49d2pku}1Tgfb9qKtgu`rNhF0L9G8Nrfd@?RJRrev1&u{CGhbd_P}-m5g=Wnbq3KEbW(FbStc!`%*H$riEJxe zaU>-tHSKT}EwTm6;mg3x&UOVYxDgxhRmvD)IV2##GFYP%%(h6+qKuAGvg51hi!zpUfpdP^+I?5aU{3yTm4>blnIYJw{ zu{c|Re=zOTq4mtTnKDBmmCI2xY)1c7B2y7u;hXjsBR=V-Pc7C|SkjXQFXpKiYQf9r zf*i1dHn!l>V=dR9w9pCx&ZDXyPsVYG!4%?I5oJJ9)RaPLJTV=2F%)JK0I70t zY_rapP203`*(Jeo@Byc)!w|BkG1a^^1#J+Q?Lc1=*H1zgyN5`vAZhhi+s}PiMr;tV z@fus%3anEj^V1_Gb1#+yEkGH-vyD?Y_74UPE6`yf@4__V4c+bSM|E8jeWDgj2NqV> zY5ege*z+Y!DyLE-09!z$zaO|^6-#IT&0pdZe$gcX?hq_}P{-}w4SqCXnJ3U>_?8MtDiiV>oUf7N5-1_I^HdE{BX zeckOC?7g5D;pH3^=2}kX;BmfXj^;BOjA_p1Pl-Xd{f=!e=lTUC!(-~!p zbMEJV4(Nd{=z~t^eiXfDUg(KV+heZijqd1=4(X9D>60Eo3{L5nj_H}M>6^~!o$l$M z4(g#U>RHI>qi*V_j_Rqd>Z{KG>g{3atq$w4F6*;S>$Ps{w~p(%uIs!0QKio7zYgrd zF6_fj?1KL4#g6RBuI$Us?9J}%&kpS;cI?qk?X~CY)sF4iuI<~-?cE--)9&rzF7D$_ z?&WUo=Z@~_POs|D?v;D(?Jnmr^5zMVZUlM=xN!AYzD&<6u^vZ!|a(K4_C9B3~&K z-|^55@gMPJ?lR*TVidRBD}G^aOuq6tUpHmF5GpS~Nx~C6GTru~^F<#iDJvFT-PGad z*nJ#x0{-+Wp&Lvg+ziwI^mK#rMqlf#aWYnQwOR?J0ujxb(#i;d6l|wLy5^JpmTfpc z)Kj5wKyY$E54V4ORd=uTdG9m-Vc#-SCXn;Z2T>;a))a7dY6%e4b3$>TcFhH$Y=M&y z+Z-Y6wrF_&H1&YbdawDHBNd=6^{oey80iI(H;zq05`^`a^Rj4lR8O z^WR{y-5V46-}3p4V;l|w7Z2Na6W;j-;@?v3%55e!_)*q?tt&hkZYury(LXEwKGPd< z$u^A!jwD&q z&(&bB-F=fuAS<~iCoH=#wUk z^%55(C6H>t)&q0H=Kb+>Z{Wd&4<}yS_;KXPl`m)B-1&3p(eIW%NZn#-APys2zbIiL z_l&m6mY7ZUZSo%s^Xh!Im;yuOS3X9LPl$ zYqar39COrhM;?3h@kbzo6mrPE+WCdM?CPV4lvZBzZKouOo;=XR(7Cvd%jP3)&>34-bk`qJ~<-a-qW#i%_5y2?DR6 z6|?Iz02&FxtgJ@alyp)`E4B1eOf%JVQ%?Uov{NAy%t=&Har!hOQYVt}B^;HC6 zm33DCT5GlSR$Oz{b=R2gG!!H$`_V{CvLl$}Df5{k;WRz1@d1aPc zcKKzPW0rZOKc_8qW}I`@d1sz`_W5U^gBE&dqKh{AXrz-?dTFMccKT_kqn3K=sN|*k zYOJ%?dTXw`_WEnE!xnpNvdcF6Y_!u>du_JccKdC(dvCt`_WN)D zz;V1eaKZ~W{BXn*SA22C8+ZJ1$Rn40a>^^W{Bq1Qr`T%EJNNu^&_fq}bka*V{dCk* zSABKXTX+3+*khM{cG_#V{dU}CeDcdT|9te*SATu>+jswc_`}>ie){XT|9<@Q*MEQh z`}hBU00vNi10-Mp4R}BVCQyM3WMBgw_&^9oP=XVrUv2R-;f5Qflq z^AlkSO?bi|rHXedEC>q;;zAV0P=+(4oVy(It=Qp^AUdRB4}JJUAnxoJI`k6%L5dhe zBqmXbj0@Kio%lp3MiFDHD&EbGh?2ocQHxvTV$Z19MKFd@jAJAtV6Iq3G^SCFQnTS2 zi$g*;#!-%Qf*aJ(Q+-5!PdCzH`Y$sB1rbzn#c`I8eWHnTg zrbAw7kl8p1p9^JZL(@b{nkcklSQ(9x1hUTZG|V$=+2uxVMo;!QRHP#%sZy}{5@?dB zoCaw~Vh;KcOsdo(`b20(2DOlX9!sJ)B}hR_`ct3=bz?fMGfW2q^_?TiyEBru-(SDPikG z(kdA|6%|sI$qb+l0#P5?t8ps_-qByz`~+$6#Au{N`7`KpWS7{rg`42Ux%ZCNLP6D_GRYx4;W# zaD#QmLkCA#!pwv4ge`nw3};xw8|JX~D%`{XfLO%0t1wJT+$;rmSj8)5af@C2Vi?C* z#xtgIjct5m9OqcaJLYkZef(n}2U*BNCUTLDd}JgiS#~K_a+96>WGF{j%2TFtm92bb zEN5BETjp|?z5Hb`hgr;HCUcq1d}cJKSTGErIbfqnQX-sEY)0^gWr#<~?P={L7 zqb7B!O?_%qdymnnW_7D?b>f$#g+l6eb*(pDnnzNElq&@vtZn^kU~^=#!6tUG!AG6> zod&_iW_GjLN9*X(*4fjhcD1d2ZER;-+uJ@0UB81id)^b_O?mL zy>58N8+y=wny6}Vl6T8n-+%@;ULHg5eFt3NQTwJTeFE^!mIUFqD$7}J#s+f@T;c+6 zH*#`a5}Hn2;~O8DEh-)qt3vDCBJonbIezjvQ^&mjEs5@mI5S+|_LaB4sVmGm#1We# zBnk3qZ2(3?p#)?+z9=WUP(z;Z$wuV2Ci%x{ykqi;2;CrA6jfx%u=Ha|yXafbwrDZ~ z*aTdhCV>h-YRc82JMETEDvFbYesgx*q?_w=r~9Tjc_GED+#w%FNQhVhb%U5!>;@sH zL$LB2saMKAT1UujWLtO0pPD)@`qPR|wcEa~>m)ztsYP<0q1^&L@}nocR~DWV?7){a zBeKk=)_IZA+{T8k&FVl-wVm5Yf$!47Izs4K^fh}WxibmE8K*0gW`;X%?ZcaStj^yxy?L)M=r=TpR^;-~+o z-&>-AP=!W706#)N;~5#5zJh24^J;}XDGjVLzp!Wx$~ZdgtBA;m64IigoTC-ZLceRO zKMfS2_gjflxvSrLK!S*p-b08I6o~#yI*8bf51hJ(puP=^K^b%kdSfb`_@@S`EAqpu zr~?gK@QegVjXx2T<71aCNU0?7j1I{V<6D%>x~b@!K`ER<0_i4svWN8(L6A5+wFn7Y z*qshUmN2A3GTgGr;GFw&lhD8qf#^4tVze`asots+gFwSFyhA+95AFayp@3K_X9IS5oFMOMtOIOGUl10B$y#D|E*R=h=A%tc)^#8BKtU;IU23`Sub#s#58 zVmwA`rN~5GR#xuv^IZCFa9uPyF zr))~8l%SHF3#G&tO(X~`DT|sB6?jC5Kn%XKno6=POS3#nv`kC2w2`R9M36W=H~f@; zxT|nU-h;;gglspK^_)5R5 z%+RSym}rHUYy-1nCr0r-iKt7-l&OQ*gjPt*z2h~B7`(&CNi?yA>(0@NGyq~L_~^sCDE)A@Uw@r z=%gfh3>T$RH4Po}gow7(2{@^#fv7wwEr=6@h&;JDc{vOav?(hwuABSM0_DMj(2TLX z&r8|Cn8VLCZB+dK0gn?@)H-EDh@h%Fjf_ZHNh*TTF-g-yExWMLiq!B0jY-oCNm55m zRlQNKWitv%#lFXo0P%25(11kg69^c*OM?)oU7geQBF#Dst~*7OilPWQX^3G}Rb?%o zpft{bkW`4UD!@BQd~?6D+KNh@t)*O6Zl#+xeTZ*$iM{GiXUfxppo##!h{KqSH4FeU z;EdY9J_Do(g^Ch;u!jW%RDx&)wrdc&>^y_m0xzvlFbUIcJ=n1!SaDh=v0T(%U5F&v zg0zaxhd|O1M8TI>i($gPWPQmsxzdUF7I*nQN<~UgsLWLs2 z9u3xK4OWH!h>#k!PkSJPKAFtj7{Y=;&66$K?lMk;6+ZMbypr8462b~ZWEVetQIRuR ztBo6t3D<>qQ=GUzn{8T)xW5eLJ_ww{viOZxR86y8T8`k%Cs=&0g)@UheH)@BLoz z4PWv99bfV-U-La*^i5y&U0?QXU-x}q_>EuronQK`U;7;xT(gK>Cj`41Qr5Zk`zKma~))0vJ(3oLT(Z?8+*+|wd-eUvV(>dH%fv6@rT;g9P+v*!+iU>zF3{67+ zW|Nl!;3#;cEv^U)=3`6dkJorWG9cQ|5EZc#WRa+0iU_FH98Fr;H4_%g#_USp8khM? ziv(=pOP*yKe2E762d%o04B1jCEft9>6p5lK(Cdg+XblPI(*#HWFP&7|i`L9?h{Q;% zld;zTAcbRAPc^QU+5mzEv4y!(P+AV>w{T;KND_^$WQ1_7Eai#cTIXFUqM&`;f(RDt z@KkZW=NbWxJjuaEcH;T;D@4{xDz?#yI1H@_Ij=hnG5`%yFhz`gmPzI%e4c0@*@%~H z;4tK6hfN9lP>7#YlakxgKjDmKrD&733nEsDNHNz#E|=0+W<=SkTV~sVfawkYt=U0d z*Nb3K`wR;t?vz>p=aU|4uOR0$cB-RJ2(=w7)yrl!zK)Bv2uRdpS>aAnh-hE!PSyLS zGa6i?{_6f<7k&i^*ZfsRW3b38VfIzYC_rJPh~nPJwtSdp4rHe(ay9N;nGAGX{dY{bPsl&&z&{*I>J*hCR&o zXQn2I3Ot!8)(@zuf2+wSeG!A%+20^HQf z;RcD~_6gj6Rw?-F=i>;Q_HF2fnu6Tc9V!x zfF z{e^MK4Qp3->-~3>kQW;-n@=YcfTwVGriuKfi8(i_n=Obm-3Tid3x@zH&d@ApPk7(u z+NW4#a&HOGwo_}apE3xp;`sId9d)KPWtBigR_B&NYV2oE zMN6mo^3?=NZ3Jke`gO&B`~n&K#&K~ifqdfKU-OZC%inw*v3t&MUCmFOssDV^FMZQL zebi5V)n9$qZ++K)eb|qE*`IyduYKFUecaD|-QRuQ?|t9@ec%s%;U9kDFMi`ce&kPn z7Rb;uYT*le(cYF?caXx?|$$9|9M-P(tX{u@4J&pm*|KKOqD`xIE!(zk-@=V6 zcP`z!cJJcNt9LKozJCAaWeIpN;lhRwBTlS%G2_OLA485Tc{1h77rO@7YI!r~&YnMm z4lQ~#>C&c8qfV`QHS5-Ze+gvhdUjmFBz@8U&aHbl@7}(D0}n2IIPv1fV`?sm`8f0D z&Ywe%E`2)n>ejDg&#rwtch(1OJ+$3@Jo)nG&!bPTem(p4h&PS2Cy@+J04Za;Cw%W_ zl>Gkx0~nxy0}@!Efd?XJk$67gho4mow&Y+;5DF(=EfXyS-az00$ETiAI*r-kQB8s5q(f4S<#Uc znJ5K-CU%sBMIHv3rIuTA*`=3Xf*IyeTLd6sP6=3K=0)~V#3n&*VuWU!M7{(kL2}9| zk)3n$Ioy6BVJVWDViH=Yp@$-xsG^Jiu1IB12}xNH5CIgq5t$?nN)jm_P5P0Uoemgi z08556BBQ6GnyRX+vf8Sv>J@3FeDdY#WTgSrN-0N|cBG+1xl(j%01^~*>ysAEC_xfr z6iLc2$y)gludh;Dt+m%;o2|Cna(fi18-ZF-q(U7V5l7vn16O^L%>~i-ZPy&VJY796g&085P_x~(+i$}i zx7=ZUY*F0`7neLl#fuCeOh>#Ov!5T}leWcV+}_ z=LFeOwS1Qk{Vzw6Dr_a1mv?>S`P&09fC3yK0SjorpYZM>lE}#2KnE`3!32378Qb_g zGQ0y~FoPQ0AO|~$ui(-D1V5;w*hMNuJ?Ehiei=#E*d!z$5Rx!vB1|E{NJx+i4rF2o z^B@m<=))fZF^D{Zp-pfWAsQ-$h(cT<6PxJ7CqglbQk)_ct7ye5Vlj(a+#(md=*2IB zaWmaZiUg5my7-*YerjxAO-`4_@4YdMa-1U_>uAS27UXOpfejw}=*K?-GLV9t4)X@W zH@=l^kWW#fA{*(*M?x}^FiD^!mqN)(VltDO+$1L@lAMlwQjv`8Bq>X2%2T2;m1b#> zDqHEwSHeC0aNGnm5kQ5lChl35xvnaW%yGn?tmXF@ZY z(wrtWt7*+^Vl$in+T12LyXnnuf-{`r949%;Y0h(^Go9*OCp+8e&UeByp7NY0J?m-D zd*U;n`rIc!`{~br0yLlk9VkHyYS4osG@%MzC_@|S(1$`aq7t1bMJsC2i()jR8r>*I zJL=Jof;6N9x}``1h?o8mO5I^8Kxd+O7lGHRtj z9V$_aYSg15HK|Hn>Vc{zRHi~Ts#2XQRjX>%t70{)THPvFyXw`if;FsSHPlm!BB8R5 zHLYr0t3NLp6ST^Pt#X|!UF&MsyW%yk+Jq}Sjd-w$_*Jih9c)_H335gbxBvzpy(7!zAUmOPdxp;hJDIBVL|5>|e16xJ9~>)O}CR;4E~ zEGzzM+f5#%w6WbSZ+i=pTVmF?!W}Mg7w1{$%}^ruxJ5+%agP%UMUSJ!&>g`uICCMb zM8(}Mca_S@fw=G?$m}k8%WGbGO}8Mb*a&n<0-^MtH@@1*Hvb2DcSG82A65t91`z`+6NM?vm!kbjJ~FM{cB92JB_f;12$y!+iq zMr@uf2v~0tNkZK?jNli;xSN6@g(y(6-n!5aCB(YmapBmo9+NMJEvXoSTD!4<Vy45mL@OF45v}sUD@O(s;b;DX`NQ#(T$hXA^ z_=>fK1W3Vh0f_bc*dt(LtNY?Q-+3b!A|VO;j?afJcugL5XiWvIY{82)iNTAt^d%A_ zY)ip}LV zwJDW_eej|meL$t%Wg1o;Ki+mWM%sRn9g@UOdyn~t!CStrW4d>1w2qY~g#cpz2f)|` z`TfaBZ~WsQ5P4!QNH`!I3RMpT96FJ(JW_~xp-lJbwy)ttG$atg0T$)qOH;M`PI7o- zM0%1(-_fhHc8M5!Qpquu+K_Mm`x`Lrqj|sSBtRyCm|L1v#MfxepRJAnR)m!#!Gh4- zkyu^;=-)-~O}{uEYM{$Nq}a@DAJ-ub{(0aB+RmWh#=ae1QIwz!p&-!}#REp5zx+Z2 z>EDpF-$y{myHNzqkwmRs!~;Ue_4P*91%UV2!dBo$Zq*-_;0A7d83;0A6M_@YB*5yi z-9?C8MT`rYILMN)N!hGfy6_JNN}+^E;Ra%amDtB7*n*t|)})M~6T0F58^RRyorD~g z*i*GyR@@;{sELWKT7oPgNBkii3gRG!j1L}#+_4-XD&itCqFkJyMT9~as6&AvQw9D~ z=rv*{YGN|E5l@WJ%GKUWBp1w}(I%SWDcX~;)EIw6-{US7S zV>g}(_0VBKgkw)g7%0%bOUmR-j+#JTL^Ars^G)MG+}OwkfQ4a~JJRG( z5+z>EBUbPOM-*P+6=hR8<>0*wNbJKyFy&KPIXl4V(% zfnGG=4;mRdSyWJ+dLed1(V=4GN((S(Cov?XSG=4YbQVPYRt2qtKn=4nRLViLq! zdIU~lBx=HDY?_lOj3Y-J=6c1XZ0hE2GL%kc#AZ%}7(`hAC{$x|_ydMX1Q^_xI`jfM z62xCVgp}20{r#jw^5%77XDW#%Oqhup?3YDk0&R*{c9Lg#R+K;JSpf9geW_(CNSTB+ zr$4BsM4aGun&*Au=Q1Uwym1Uc%tAp35_ss=bP_~3?jd$Hk48x6 zL@+3VTIhww5-fg%fR3j_ID|le=)_g0ka;MEn&^oFlZi0bjY(L6KEzZy=WJaBYidMk zqUep{s2#cGpN*)9=IDHl(nL7I#`90>73GOBxz_*ObjTv zs4?1So%*RZNlh($=W3oQfDXjrfdUvn;=V-~2}a^h4g_#kg!8@Up@PD`mDY~_>85fj z-1I3%?CDH|=R18WZx|#(W+SSWS*j{zXFzGE!m7w152J#_gbswQVnmTFPL@>aP;(CZ>WcLTaJ1rt|G2v)ZISCM%)dszwYe_8jF#NM5y)B7Ugb`fS?mg#{w| zL?9Mxxjvb;KF+O7O08N2VfJ%<3tC9W&%-(F$ zLKBrr1i69*(ryt;{MSFU!WbPyiTp#>20-lWtkQZdcR{TwoocJ9#E^X9nN8b4hT_() z5yp%ytHSN7%I(`~AXYfq?zJl2>g{8M?brG(mk1`KUTRG+YRZZP)7EGPNuI)~#Mo5b z#9R$Xu11lF>)%@LtRE&%oI>`ZK#%!ucXM5X|tu7nre zmhS8t<3XHm6?xkX8i_|H?rn`O?E937L=q{{g}OW&|QBNmaaWR2&leFt9`{umkTe1WPcuQn0}_a0L^@ z17mRUZLt2%9s7cC$$)P;Y3@tpi4-c#2!Do~sIYdFa0tV&E46S8({K&jFs$5g4(sp^ z^KcLQ@DBrV5DW1T6Y;gEZxJJL5-af%GjS6;@e@OF6ie|GQ*jkr@fBlnE2S=PZ1GIg zY)oixPrPtSbn$N-@ox>1DT9wUm=s?{AQ z;8-y1KuAFnC=2BQ&KOsR9`kV{cTyOS6i+yBUcfPWFtQ_K@>K|x$~?LL^MAnHit7Bmku@0 zh>3)jgb<5^$OouMfzO?Dc(4mBCv)FXFA*`=_qyQtk>MBjVMa&*<+e*)W!%D5@)TAC zhs>ZVPsGEtoJH6I8~StqMkHEBP)RzA1Pk+oZR~O{gS1!JE89`dL-GupxJj)P$=y7& zNBp0Ru2IS%AbhAyo@kfD=-w6pK#1v(kF}wlV9dnw-!x0yU-3$8*at^))=bH7C=dT%?VaAUu08fh-< zRrd#TucvhOwyjB!flbb^Ocp-G30t;xBVZZr$v-HyYae!aBX;iT$wYwmubg*9z{x*| z8&O*Xo8(Pa=lAA%oqb#PJZ4&m)ylNIx4*RE73z1hp__eZo92#>wrPxg6q2lH1f2A# z_uA(S{cLTInTJ31#I%B8cea2R#Os&|0L;iSm$T-6G<4heWPFT6zXXNMHAZa8HHMgT zd-achgtwLUJcrjtY9Ykrbx42;i!*tLw}FKGwobSnP;7O4Uv@=EK!ew9goaD}^sWlx z9`3!``B4P_eB_N=8CJg}G-ju5E~15<;2Y*ctGuPqJzgC9Q?l%tS>x5Vmg0!PE_ zXM0aA26B2!dhKD1o9K9_3*48%kf3j?>^MkOzjdAi%SwrJ8zk0#>mFcz%bOQ?MbwC0 z=eeId`*RFRj%#yl@Kuc*i=Ds;W#5MfUj!oNZbq=nxS-pSPhPRNYnA6jKh`f(w4i;o zLWl-*Ms&(iDvXqj3$B~HxHAw&9K`ySM7W>{@63AM;kmlpL~P$sCkr##K17JMm$s_} zXFvP@#M6bH1Ugh#M67u^Neqdvs5D3Z&sT>t%&wk;K=`Yx*pOUIq_474u=PA|{9UVe zv(Nm(WXc#uJFcWPNKh}tmxL6ecTv}!2NxiGC;K$NJU?T%tH*7Tlfq^c+J-coD@1#lQ_krJ!KHP(Z3roTNWuuAr5AJr3Zk|H+t7+ z%A`cgv}ijKoqhc@yT6-rL65|CAIrnc{l>%!2bXdR8QmS@drH(zE4+-0o%K%qGC`=D z&lHk9%rLJ2KszK5^N0^eu=AX4xx5dYNdR*OF9nyeHtOec>T3J-C4SoDzGUn-^jIwa z<4+AiSe678Q-6-U6>5EJn|sD=1R`c_(o007n29|MysqRNg+D|q3v8+~w>7hg&;hkT z%Y1=1NoM!{&7d{Z0sw<6J)I1Sn%Idd-+tV(b=5@LySGFV8y#qu5DFO)w zNDu&F!hZ=F+GF?-Vnm5#6iT#s@u5S5n*wNz=n*4B01VqbJP1-GLX9IUBHYq3BSe-V zRnoM16K8;h2zTc6`4ebRp+kulHF^|jQl(3oHg)CALcc%%7bia2 zm?q(bZ3MTJNH-!WtB{={hUgKcWs8_Y%DpK0rajE06SBVOnIY`2hJ|w0%sKVz&_HDe z#hs9E@0+q|Cqx}_r(5A%e?M)`7J78))2UatejR&u?c2F`_x>Gxc=6-Omp6a@qU+Wn zL#t0unl)y_2O-kuNz?vA_eJv$RsS-8BoLx&H;EQmCgaY%a#>_@r4yPTXa%&_Lg)1^4Fx3P9ks&Sv*f1hA zF9NeDC((No&N$_qlg>Kryc5qn_1u%sKK=X?(6v}9l0k%inNlbll*;-nVw5Q`QSB>K>{bo1s7b++l}<%T4KySyaov^I zUVZ%)*kFYnme^vAJr>zyw^L6{{B9y}(WGAeY1#%^8pxjG*sAu_O_jP;*(bZbsa2Z} zQq?IR$6dENaG&Be*OIy;D7}lnBam9{*|I~4_=tzhKtqJ z;fN)knBs~pz8K?-HQqQ`dl2;&NSZRdH)N2Znh9l2$t`F=lcimjYCm_Snn~fbW+EA? zRb>`8+Lnz87228tSN}o|@{at&X@*rgna_QkTP$H#|+R z<}T^6g931Cv(;Xk?Y7;18}7K}o}2Ev?YQu%N+%2oow?$grWqhY%x5oJg^v#fum-YTU@NqsNaRLy8oJq5$&6_xL>fFh*r_Y~2g9;r=w5ZXeNRv+dr?jclr%fOt?uiw9b0}CEZxUk{F zh!ZPb%($`R$B-jSo=my2<;$2eYu?Pcv**vCLyI0wy0q!js8g$6&APSg*RW&Do=v;9 z?c2C>>)y?~x9{J;g9{%{ytwh>$dfBy&b+zv=g^}|pH98Hb&}U(de1`}gqU%b!obzWw|7^XuQwzrX+g00t=FfCLt3;DHDxsNjMOHt67k z5Jo8BgcMe2;e{AxsNsejcIe@Uu%QPOQy`XT;)y7xsN#w&w&>!EFvck3j5OA0#VdU zxJs>|CBRvqxc2JnufWphPp~1e8WXH(607X8%r@(+U!Piv?6cHXYwfic_A?Nw*mmpf zx8Q~=E=AlLXY9D>rmOC{?DnRuKf}5e?NjHrYwx}I=Bw{!Jd=csMceO1i#(@;k(_0&{XZS~byKNQAV zI1kiy)?kM%_Sli~(+@uZ@PjtmWVh}1+i*W!k1wdk8~5FK=dJhNeE0wD_uqgAF8JVt z7jF3Bh$pW2;*2-$_~VdAF8Sn?S8n;`m}jo}=A3u#`RAaAF8b)Cmu~v$sHd*_>a4e( zl+&)qF8l1X*KYgmxaY3>?!5Qz`|rR9FZ}St7jOLW$S1G-^2|5y{PWO9Fa7i)-7}E& z#pO)>_S|>hyQ33(FaG%Cn?7y%=%=s#=;5#L{`>GBu6_LU*Khy*_~)?Jdh?s$45v89 zNzQVb^PK2Rr#jck&UU)2TIU_8uXwD zO{hW_%Fu>7^q~-qs6;19(TZC1q8QDnMmNgQj(YT?APuQVM@rI?n)IY7O{q#(DlSs6 z^rbM3sZ3`|)76}>rZ~;1PIvkmeDYL4KK-dsqhq(B8uh3wD=Jc#%G5bwF91(XN>H0h z)v9V~s!Oq|R=1iktaA0MU=6ES$4b_+n)R$`)!a?f%GS2J^{sG?>(int*SgyEuCDYd zX|R9=yc)-)evPS!^cvX08a7GF)C((o(u>3ThOilH$4BVuSRJjkvY5^6kBSxm&PKpY zs8OnBM@w4Bh_K(MREvRdmSb=6g=%L@TfhGl^|E-08A#|>+ulMHu!(_evJ`^b zjUWLe!u73km+P8;fRDD4Wv+C^qbA^%1Wm=Au69uiySpS;CyABGCbsL7QIPk%dC9Io z)QeuWoVLC2B@BDx>y_`)_r720m=*-0i2x9cXObvQy!zT${2F+<_8p0uo_pX1JD551 z#o_$Al3Wyh^((#r?S20V%7D&+sD)M+L);+S4YXVxHaU{Y^j&g^irDDREH~?3!$YKM4 zrVSH>3{s{_lEXaH5gUeQP(}#sOtxb(yZQgk9vL%FCR`CxumOrxX)~PnOy=Y&l_@Xo zh@SaO=t3L%(1`BMU^jAF5t-Q{k506t9Xn`|RC>~QNi(K5&FM~i`qQ8e^~@+M>QbBf z)TmCis#neGR=fJuu#UB?XHDx`+xphH&b6+0&FfzK`q#h?wy=jy>|z`H*vL+Hm@cjC zW;^@Y(2lmWryXBrQ~TQ3&bGF<&FyY```h3Sx46em?s8Mw+~`iXy4PJ*YqR^^@Q$~< z=S}Z=Gg8j>&i8iRt?z#O``-W$xWETa@PZrs;0RCnfcUNOhCBS>5RbUTCrz_O`qI?QoB~+~-dBy4(Hkc+b1u_s;je`~B~L54_+9Px!(c{_u!T zyy6$n_{KZ_@sN+aOSYZ{zF^}~?b1A%>4?Qe5FZ$9qE4fc4y=CZ3kf+{* z)TWQTlYeIqFiR03=VE>A*Y5c)+1?Q;1|$CWJ(bW!0&g@_u!{)%go0+_B!VL zpt#;K_zuk&e5@7YYh=9EU4H*T`Xr+M2EcAE_5S&z?{=TAN+Z?ZOz$7VefHabF+mmX zKO(Ig^BaWt5fOh%F)Z`97yu{`1$cjhH&p|Z5dx?qvZa6$co+;gdld12kpX=Mk$|`d z7#cW%AV?Vv7%Tr^ULkmblYxP_ae$A(6!yS^C>Vo`F@mw;e=>N3!KEHBC=ffy7_0zh z>W70uID|wPPm47rJy?WFh&T+kgiiQ`P$+P^7ll+JsC zIEG|chGuw%Xqbj-xQ1-lhHm(Va2SVjIEQpthjw^}co;t_n1_7Whkp2nfEb8^IEaK; zh=zEGh?t0qxQL9{h>rjGh>#eGk~oQ!Sc#T+iI|v)nz)Ia*omI_iJ%yYqBx4ASc*;8 zK6_}2s(2x+GKH)7im(`q5~O?el0{A=i@4|_=aPK6*o(gSi@+F+!Z?h?Sd7MajL4Xb z%D9Zo*o@BjjL;a3mBWS7SdG?rji-}}*tm_{*p1%!jo=uL;y8}vSdQj+j_8<<>bQ>V z*pBY_j_??d@;Hz5SdaF2kNB96`nZq$*pL4Bj{q5v0y&TbS&#;KkO-NO3b~LB*^mzT zkY>e!5czM{*Egr7jT0GA7?~MglaU^INf$|Q75R}QS(2L+k|vpwD!G#OQGYP8gB!_` zGU*pFIg>{gFG>GslRCMRJlT^z`IBtdk?!b{K-p`qSd>T^N;R33EV-0S`IIvukx)66 zU=e{-nQ>0}EL%X7IgyoDiC;k|d|^Wdy!e&zwklpJE36`w5HT_J!j@*qYeK0wAQqS3 zMvX@^f60}WcG;JHIdORTH-Y(=gjtw|d6@nxZ+Hq*yp5$4c=1EcyV-V?io_FG%>0ss_Rp$_JrVDm5@%AprG zoZf<=A_|EcDwZm`6`x|FC(4PM_M#0LmNHtSHmXT*i8m>F6(K4TJ(_VXcB4s>eL^}- zw15yfib2k`q|Vh^MH)><+8r+Xq*N*!0am40nxzmlFG=bWM5?7=8m3}8res>C`Z%R# z+F%iyrVkmQZ2G2f8mDqPr*vAUc6z6Hnx}fYr+nI{e)^|?8mNLgsD!$NR#|FjTBwS; zs4D-LsEn!K`lu+@rN?ooQbC}0<*1ZeE&KPQohpe=3L04!s(yz6K{2VOs&U7) z5j5%&qbd-XniK%Q7%Dca7a;}x(h@&B?60YC+cF%ed)w&o(b`{dv63hw~?OLug zcC2m5k@5<8t(C4&ajs8cBwxxk_gZo9`Vg<$7*&=O;uo+q7q1hcuZ^K$Q^Bwc;Sad_ z3&e^S*s8E7Mz5|>tK=FJTsW{K>8+9HurINr`^6TuN)(aiQV77WECI6`VGr#ZGZO#n z5kaQ0!{!Sj%M;mgu^+*$4p9p-OB2but50#LbCVFh@UaZBoahKw(tvj8;KZIyWN|J z&O5%$_<=lfz2-Z$0Y%}j2s<*|4doZbm_THK>JmFG;OOAxpD;c!V_>Y3cvZODf&Z6G}NYA z5m*+8GK@7GI`ZIdzr;FX53iLG4U6L}64{&$4dwc76j+`*Ib_0Q6iL&BF^UKcdm}pv z2kykGP40BXnSx=a@DOI|x*4POuswovt$0I2S>1zyp7RNSNyP_*|IsB>YSY&>j{Myi zYJzI>tD%W&XO0#RxhXDZDO_Ne;MrgGNJZ2%R~B^nFyx<9qUa2^PBUWHi*t z7jiJL{FDYdnxZD0WeO2`{=4;eV}|%ZKA>^ww7f2mcYBUHZ2S%MBAdt9aLH)9EhCNx zaA63`{yl3j12EwOl(FtdknRFHhnkK#@aS$V)1exd+DtHPiE^L%Cnd067rk!P2hoR+ zp$V9_&+PW56Fe@@TT~Thi4adt@4&5dMv-5am&SP~UZIwAoPWW?K*^R%??pwyl~>f4HD9o>cA z$Yc%kk@0jxRf;z!+^eR9ZW3P1KGBa^oqGfAy6$egtya_&2L<~Txk;@!80>L?L2SAb zxbNl(97KS6avwAN?1o@4W>09<*EP&FIb-{J2s3FY^jLuQ)vLiivCWGPW9{zixzt}d@?d>204D!z#qtpzlOYFq z!Dlof84WdLBL=%UZ#f2x{_%dzuyEV4-4b#djTU%_)qjZh;->R_U_$Wg>3>KDKV(Kw zcfII%6Fug6Jr-m<7PUW?tUs24A1jESs)+bRt7fX#e;|21Vc|YBp;_myKk?n6X&^oG zBs}$iZCkvaN8_J|GOX&>pFf#CPej;C2)tnTKhG&x&1Sq{fbY<(#$PswUeQTkw$8pU z=)ab+>+eUr94}6}mc*;AH(G+s&qDjiT((w$sZ6G|AJ=tV7>$RRFm3{ei zK95&eeANTRY_Tvxv1HXlGFR|B%Z2yu@%|&P9T8b^QF;H9D{ye z>gOwyv9z1lD*~-+v#DIU4DmFr8;iM8-S&VF+U&Y+;ovt5)oj{#HfyaOV0c2Ed)uwv zFd~U`od>(U(KLZTLfuFEBM~7DqF3Z6$J5nTF9agJXXndi4vH2}H&fT3Tk$F)Ks)b% z`pMpUe}+ET^Y!HgoFU&<1xqf;6EQ_*OZsN=O+_9Yt`(CoB2`X>F!IM9rtZZ7Vj7{8 zmFbEsa#(5a9-x9KvlzC9QKcBJJ~?DJV1!i=??Vh?miXYbQz=2@1&h&iodXQP@(DEp z^gz{dN=o?#eH!TYU0DX9;0xK=@j|7;dJht}!?MaU_mfx4vf^H0kWs&R_q~*j*$D2_ z@>ou_JkMDVs{$Wh%oGRJv`)czNR_JDC<8XF5?ImKj;vtRkHBGIK;%p$lUO}_g;hn4 zW4A^{K_FKJ2E?uuD-YrC`Zi+HM+*^3LeVt0R$cpBFWdYEC3et6P;6?fS{P_G zXx>L!cDj`ToxY$4C2W>W%RE1~PRp|VMP@EEs8>?k59;LR*A>9`Cd&@_5=TG|_OV~X zYTchh&t*UNj>CpSOM}&nOSp^4)8vq-tY;9vo`jj(YodTS--Qm8|4Mh zZI%^CiNEX?$iQu$n_$vpo`1v3E&5aGkpg^_U*5-USz5o>^gG3hk!CfL_@>FKdR&~x zx^^Dbp4>^nMAD>gKd;%Q`K&Kxo36cv`&&C0p4YY$fvUx}8%=`udoQkO%lCewKwi7S zz^j{+!H@mCKSnwBTYiiSAn@5wN=R6TLdjAM*w09rwmQt~2l6>Cn&!7UE`RIyV7yCQ zP56HV8K4+* zir~*p1aR~ipgJ^&5Z+D%3cwly{W(QRahT~gSq(Ab8bm4CCxaD0hFH0rVzla$A!j06 z*tHE}jE<8(^*W+@iJuHL75$1o+aS(fHyQQ~^p#*VR*Y+IGTf=>E8$Ip1pn=1 zgcqz4aj%5L+&uL{Ul^B<_ zGA$@7%r62`o`&pLV)&s*v7dG(3rT4tn<%%30-Y;%_-%+GRu)ipeUOtddHY0 zu2FV!lm-h1T8vf@J;Y3&HF*Q92q%!(C}%@>85{9l3@RPZ+d_IebyBsT8Nn{XrfxdT zPlk|j9}C{c`)le>2_WD}htiPEk#Zawk z=ntIh0x>=-rS~F_B377i=8|Hx<<~R6NKoH)FuY7oLJ?zTlKDdd4=zV{Bz+}58Eap| zS0VX;z7mhi2Fm(#t7gy1V2O!YD934)Iu^i?Tst2s=W?szZ`IfwGfycYvY`1@T$!lC zS!%Kw&DvB+6u*&@pz3W>udBNeOR%%l+2x+cg<~tS@1^@Vh@YbvK2^+y)bUv^uBruR zt^#hwa<%LGcsKi8WyGpHSdoP1^N>6OqGhhJF<=)lf$Z z5+ql6D1riiYpZ@TEuOXLx~kq%!NGX#z95oB7%7R5&OACzLtzb(QT^ZJe)qL*p4SCVyWIgBx20f_tk2!pVXQPv&}=|>tVr_sNeB-CLvz43NF#i2V{tSt>{>j>k+FvpGX|Q zYYB2`8Z&oVUcTQpt!(GBv8#_5g;VOyEz-4dtbh7`j&8-N4td9xmR9fj?yfDMWql{M z6TzBJZE*Z?;D|o<4ee?;n($;KmlCWEC?e;cGfjh#r_*8tiLdN07q+1?E8A={>H}!X z=Q>4GxbM9hS_RrJTa6HP(3C9oc*fXb!P|sDQJFE(AKAF82NEB* zMxxs6^ZZ5#ZLM8{#y&U{?Q0#X^}Ej1wmFnJt^U^Mcprp9J74U#dQ4&EH&--Tf|Rj( z;tvnAu*UDyG{1W4lwh%l45QU@w|a(unbeDLdFdb7X$o&~I!;y#q(b~nWS$UIOk8dU zsxh>P706fvx48f?*4E&b6TXM_I{8MX8$)k2A2#=tRU!z&>|;cJhl6?ac^)RN^HLRx zCMH@E00(oiv-0ixms?3nd0RzV@Cos@qoX~@A~m0=i`afdKfuhF8zl0){rHxl0dkyqc_#JOm*~op+k`cWb5PAI~1!Y}= zIHW4-vH*7g{vfEZN)=|m1p(BYPJH^%;p&c9$(GxVDE%Oq_prizKhs}QgnVpcuK@8O zOgNJ=L9OPUIJ|&VI=~audo*ThM8#IWfuvY-flbL6MwBilQFa7XfS4;Fjkc?EnIR1W z00t;w!Qe&FeB)Pm=+PrMiJFK@2F~J*)zL9i0IOm~GSD z?VPbfJKa*xtolB&hbjOT&2Hb0p7)JRm#jh{;*@tNVlmF5Et-*BSv_j8ET=ND)Tv1V zC_P^hz1cRKZ;-s>41|54x);fMKJSRF)1W6M2|aXlX}XK~Qb+kliP9VPnzm$#(U-5B z$NMe{tq${%UGs^4t_&>@w5AWLN z2nF>j>qInj_HI2$hG7jxL73sE!5GoOSgXuP)xmiC!35A?V(eg2&R}xQU`o$m>dauD z;b7YJUy1=esS`Eb>z;cCcDB-PoYAEkx#&v3QjtiSt%${U?0&%^@G_RXLS^zS z7ox;UP{0l{rBwf>{g_j9Ul2e()og4hGH%#)?D$hk;g8NZTQn&hNk75%9e1=oH$)1q z2-;^<^$z|MdxcIVrUVk+C_f=zv++RchTm5`G@U_%B0;MJCE%yjseQ5eO$(>*)Wr`E0VzteOTC- zP}Vat{b&0x8BEv=wb(*{!$P3{LQtG$&ocs;mp<70iPAr9AxtjId21me zjY+dnA(CPdzIZHJY%x}CG0u1~-eEDpe=#v`F)4R3xppz7cQJK#F>QA-{bn%(ZYdLc zDT`t$n{DZr*iw$#Qm*k*p2JeU|58ERQeo~=QSDN3?^4O^Qt9qe+09Zp+;Ro>awWxb z729&P*m8~9a;@=lox^gy|8hgza%1jtQ!ON(ce!PDxpjBB4Lj$fwYv1pa;GjyN2_EQ z#Y)d^`gn=jgz8Ga|H?qz%3$uwQ0>Za@5;#R%IGeB&+f`N-0Fmwlos~tlv<`8z1pHc)Rj(BLYLamn>db}xB;8*;y3Z~ zHu38=-}h}2%x!+y+a$c*B!b@}#@QmF+#+S)A`{;tSKp#A*`jpZq6*lej^Com+oG-8 zqU+nDpW9;C+hV-k`UtrwUVm3>VhL;D(HJgj7BUY zotk+4?5aV~HiEwI5)N_!0gbcl1PKgGrr+XCBi~6Pm$vv(Ctkn9mE#9sFJq83qK>;w z1umrg7L0aI?^RnfIWO38Io0~nCj#9m0(LkRKXVnq*1-rA-|-fWWh05ExYlDY)L3FQ zv#o&>tn_zx==9PQ_XT2C9PWY6rW%T{&C2z9|Y|HX07UNiqlJdL&iy4+oB_)`7IiBR>UF!7GZhG4qS z`cVfd`iZLH^p?7PX5suR{tV-`hesW97-n;pZDp1UH@_PKwhv};vOG1K)mz%xE$sLs z{WHxv1C9sct^DtI2kVY^J9dZXj=%2{eaVh z_|wC@)1$i6-+iaYbEhYJr>D24XYgm|IA<4>XP4|}SK?>a>Ss45XMje!37fO~__K$+ zvyIbZsD`u0xw99-)2Fd-ukhzkXD3__-=I0p-$YpB%LTzmoWncW*7aDslAQZ}IY+2J zM+Wa8_McCQ9=vV0?T*t6-oU|&ljw;b>vaqoxjhF{`0rZ!n_&mpAttJy(|ZykQbt8H z5c?nP0JXw80s7zD9dIOr4+_z-)hY`i(`hxK@o+PQvzPYOste)>{iLK=-wyyprg*l> zB(+hsjKNvbw|(AGP|sul@GN^&;6^h#bP59=x&+B=!f8Te-X$V?H><3!$?Le4{4wYp z=Y5QY?-;<%`IsBwi*c`sw)p&?)GmW93ciAKC0*J&d|&6AH7g zepYCh;{*@kT*xJSVZDp={krpvtSXhDH=${gx;ZYkx+9t}1?Mm)Cggym*P(b~%f`@M zf+H5F6R8IG-TCw?6mY8-u@SH)MAMMKN+ITr1MnFGfDrrJZa?^Y{xHSeG-yQy^4*4O z#t};hkomv~v%?@M=kll?Rx)G=4EKpV|IFEEnP9kJm8f zpsf*)KHa&crSDh!RYtvj zQyqu6-D9i#U56fan|x$J#EfEe^tsU^0RFNJ;i+O>%kAE^lH;jb;%S%qsmAoFZe2UV z|4GYQw?4uMh;YH0|I{-7)VlxFcK6hd@Z5p>+)4G^#qr!N@!X^F+-v&W=k(kk_&kvC zJedDHRR28O|2#7PJi7lpcK1Av@G^n>GD-C^#qlyN@iL?FGHd!W=kzik__C1jvY7v} zRR6Nv|FSaw0$$yJS-X2#M|j=9ecdd75%$8>4=(z#YQ9yzSUZojZR$B}|GL20?{6F0 zg}Q%0C7smyXd|i{83|*FU=<;F752_y(Kdqmof7JY2YMgwlX+=9HtVY7Cxd$MwBBuB zt^(iZFWxF1wz7Qu{t;>=?TK1QZ6yOAngmq=de3IxF8#dB$bG!H@_qw zilx=4vO2t^7)fL?ohmWEq8v-*cDg)1yrP=O6b{5-u(+n4%0UJ**O*3{3l#vCvB@#9 zvs4Q)lkCI*P{m@Ul)ZYo4T$ugb1jU+4GN4IRvPT~r%EmF7}r`{?=DY%-+kQZ@I}C6 zw7O^70{4W(N!vE$&UV*W$5W=JP84<5urSa)?@s*aWcVqe0P7J+d^l62QEhYb$acI? zWjbAE{ltE{(&Tg%P|79f>x`v;=ldZUv6T!{go6*%?^C8ybm|*ar^Znb;SRHb~Pm zU&>(O2Ntu2q91Y^f~r3}-+h!h@}*HmAV~-(X)r~yGieA-Q3L5uhNgQ%ePxeXHJ3pH zdmIs?mpY&emvqjozcO6@ERM4EC7LR3m!?XD4EFJNSxp{=SKVDRHS1FZZl85UfO+i)&H*H~VvMX&-q3~jsXbDbFkw+ON zD7mDH-{^NjdAj=K$M>Y7mYPM;A{S*%B)c&-9Tqh+HlH*-o$7|N@01Ef`{riJv?1k|7Hu(tU|XP(d6_!l z-n%n(Ax`7vwcg>+kU?EPnr#Xtks6%{Zwy*SHoR59B2tMf>nF-A@kK}y~FhQG$lpX`e|B@=jGZ4kv!`ghBDEN z^en;W(wJTxwbF9YU12`4CGZM<_zm$2 zFHc|rs5jId&=?io@Vvw@m<1hhEEPVe?!>TU)SZaR6}~tv#PF;Iop0?b{0N_k0V330 z=+PA*N?sBqm4YtpstSKbcM_DZ)ZKVf6#?umB&a_Mx<6c21oA(V0R52QTNg)SB9v!km6Jq^fK60{?vOWeb-Ih#~fW5YQjr~KV8trR#h2h z<4#7fP2JBmRT=KsLPmI1(9d^S8R7X%M*N0mKnSBMGJuzy6ti$ZjHN0n+?|}9j7F+? z!a6#>g`ASLa8S;!DklAzoLYotNGZB1Hjg*A)6=KaHM1(N%$yH;_oHY!?Xo7H|Aj`;4>I}1s4WoZqg9S6n#pCUEtL15 zRUO5eEmW>8Qg5YIuP&M`wW}@Gd!g0rrk$&dt}QX)qtlu$nyak>*OuCN(CKW`&Noig zmN~Z4>0K4gw_etkd%nYR=R~6q%Z^Bx< zIBHi{o&G{^CPKF~8C_SC$H!oyQoJ-{3Zh3L4uCA_?!RANt^6F(>ecKCz ztsmXWCPsZjA0MM#O!3MtOMT;*2c!Kjy46GF`lh*78x7=;)f2n==Cv0_l@ouJ^XU4P z(djam>EgBC3yjv^9v|Je>DC_zW4N4uee}F4UVpjdNIE_F=>3L%0~*sgDw!!r4!L9l zjw@5Hu7)U5%gxMc4#x@d3&ABec=+$;;R9q-; zE5c(%;_H2bPI#Q&41TjgLC=2<(Be4N%1-Pmq^)iorR1uV5R9esw_hZ-B@8m<{siH5 zdFq(Z@BQs5O6zwAyKVUGwLh{kgh4?Mu~}SdR2UzCpq7ZUFK}GrLJ#DAJQBaxmgL;d zi<1t_5dss}$|z#yNtv4Wq(4=2-P9h6)dq9jby*mGv1^kfnr!I7ina?}!hJ(XZq+wo;C* zO{NdLn>h8H11wjO4KBxR&@vd>Y_0+MQXYH!&uJx+*%oEJB@#f=w zCuZAufB^3nX8C>52HWYuF}E02O=LICu7>K^91;g zR3fk@km<;_)l>;2lF_XGqUyX6yC#?j=C6$G9W#9q5c z1YU331zxYv`tOFv79PO@!{_UDg+ZFC(RHCI!tPqJvvTckbwy{0pu{s_48*CACF;!O zpcHi{viv2C{3V^gjOt{&Ike#xUsC8~|FAQahaCZ=y0$ z;UiS&m*tpYX{>yDsPRT7i{n!In0W`}G%N{8`j}WPK!t!1Q8SR?@rAv`6WHKk1BQ~#NeEHL;iSEth!LEx zznC3pbuUV`D2e_=3{2!3=wN`wF+mUmf{Jt{GHDQLsK0a+{zTf#q70Gt6%&QS>7g15 zq`-kKDqX^RO)Rq~G5mzm&4v66utC{Jx?Hm*Lk^YfLeSmYA1bCJG62xzM4}-CG0qKF z&Mv6~wp4frs6FBOu(Ij-f01>5{tzFG#}3<==Krp4G?6*2I}zTb1|~*I6jU)pE&Pj% zP??MnX}Y!F*lJkxODGm)CMyh*Xb?EFTyCTrxFTY-#dZ6Yu~EA=sHfYbN6;qq@qtVj z9)pYV+Y;6{SvT1P}KViR`qK}N3eWAjzY3Lx7L6kr@xs|O2RQ9^Wn=IlWZDx zkRZ9YiR93G7Fa>$Tw!F8IM}%4W*;ga-G5R0n9&`B~YgC?l z`JSg#Ubp#PuTUICJ~#zFgw(#2W(RNcec22A_^CnS1t589e|#!GN^t}Af&d%p zK*xeWPqQa?lA!Pd%$IrpXzGwIC4r7zxfauqwgTYIo6s?8LVsb-3F`2@sL(y?h#@7r zTk1%?Np7PaUf9B@%@U+tY zI@oZznS`|2lttN$w7v@;zw_0*VU8#Ph<7 z3e#ze@`{Qa&4k)!XJ~qg>wc9Oik2j!l&l?<5Q>%_(UvV)l$Fs|z!z7b(pBPE{=lcJ zqAadrq^o8xuI8t!5&xYBY3NWduGOQ1bdA;76kE#X=)a?_5BNP9dlX|-(2#Dq7)jRz znW&6x>q0@bbQK3xp3}9?6}OHlsD*?yuN7~;_%$w(?0Ca#mB9;K{@ysDlO(3!Ve-dv z{_Ryjr-Kq~@g=u254R!yL%#Yk|BHw%wN=6MZ%^mr2`Fy{K}b48mxf|VpC_(MkQJuS zv020MP}!>g!12k#aoR?S%)#+UvhHw56uG7rR1K~4Ilas~>+z6Pf#+j9k`wWQW4TDH zDGb6HEv2@$K3)0Jxwh~b+TqzTxDlJu1#X5VqmqR!mD$s`i=I96+;a0sKfBXUHgc_r zbxT&(tS29Pmc|Cxwo2Du88+a{Him*pla-cH8Mi3Qwip?=lhIb$8Fz}L1)=^#kkEf1 zNB|TL6dCgH|3?Ut`})6uAa}LC{a-s_YmaG?}h6Bh#*^B(%KT!{|^x)t*OFa z2$DE}dMk+hZwS(P;v?hV5Txc8n4E(@5hTq{B-gFTPL$-o5M-1i=yzGm9|*Ey4C%O{2gmZb za)9zL1bJLNAx?Kv^CyB_FeyH%lR^U zb4Eg=H}iiYNTUSn+eP-*pSMd^e+-(H@fglsUz5a#$P%Q;2g<9bsFdULNrIRaq0)eriChhewi7=?Uw9gNxld*ll_H1KhPKK zQW|C(`ZZIFte<=7BHVf87vbGNKmTK;$=By!#0XLY!hb`M+?P?2e;`OMyl=bV5Clmc zHIO+ds5D5NaGe;-Ek)`S1woLplhkh_^Hu*qkSH_nze>sMHxy&PF*jy#8k9K)u~0O! zQplPV;&9(yCJxBvu_SO&8L~hSB)L3nHUvSo1=>N5hPk^H1iF8f$&MAzdr;)I{0i+kw6e+A6$xvK?o}Y1VLI* zW)Z%n;qWq#4GZ}LL7J=OaY1DLb*|hb3H7^6G0a1>`VWNAe~2x z_3nn|D~4*yz12*xU}PW&^0oq- z{JVw$xiY(i;gvn^yT*yIGW&d))g!IDriIZm$NJ&bQ`fuZjko2_{W5Ep$#*RWa^yJx!ZTF+)o_E9Rua9@_P^cB&2(lY6@9#SR@)f?gBM=06-w6z_ z08z;_3e|Vt@QkL) zC+}od?-Sf6e7f&fTs7nImNkO9SP39K@L^f_Lv@a=?S{%&C+1W%s$4AI6-=s?+aA_W7S4#<#gx zGZEy>5TxoRg5+z=Hgzb)=^iH&4Onxi}Tc0XT@R3z2;{~bY=j|8xjA6EQSIu_!R#~I= z$ED@h+lKMhQ>XE#wWrs+4z#xOK!xY6_u%^hg|^Ft@#j4r@WVtz+jYLe%aJztabdje zw!Xb{><9R1BcBVL@b>lmJY)4~Poe#Be*E>e8T@iS{_S8}0sOd3RCd+g{(3hKetm*a z^mmYeH*Z)?Z+K^KK%zHNgEz{8H|o7N@SP6^r;pc_29}vas=W_>gAZz~7eRx;!JQ8& zr!V;c(TlRLQVyb_x344u5=;~-y|evu2O6`cANxB8JZC@JTSw$5!h(E1XaKC>!4DEM zD#KebF;0+Fu8i~oz9~ zzu`K#5?(Az6Dzzx_8Y88w(~n}0AA?=b~!a>Wdm+?Lx|RmZ6Y;>Y!H595D;M(V}A$O zY4)=k9;&C{+tQ41qHQSJ)K4a*pO2kLfqkJeyPTWroGb~FJM1C=9YbY+rU)C$*{H@rgDa8rF2P<3 z{}4;+b8O{ItO`jSQ)LXhP%H-XS5?F~oy9l;|2RFocta^gb*^|5m-su__`^6Ov(KiH z3-Pvi3CB6{c8ivbpA&d+QJotT+#v{Z@zc|J!dG=PZJI z+EQcM%3|8uL)r#j`WBe$PXy_bevp)Y)R=y}n11?@evX%M$(3>aIRke^jA+T|m^VP&WFQ7D(4so) z?T{ww;m6Abq%5OsxTpv;p)5F(7+Ni0mc3#-Y&IeZw3HycpD@z(J1BPP?2*n)k|Oa> z_)s6DF_Hq4-=O=xnMeQn$p|_#LnuTQC zV9}%Ti;da7<^%_4-G9WGK!T@&E*(mOwoQgUFHtzkhmDFYMk+NlF0R#zdP7oVBMnTr zD@J5?q*=0snfwK3fSg!ILPiS|X(B1G0OrBw>?Tsd27d!vl<7GXWG)pVUu4!4p<9@v zq5Q1yPz#1JsKoQByek5B`Pz<11K(F!Ap4l>232ofRZk|EbRQeZ3t|y}fq5qg%am zO1*1yz58;#=TrS#R_bqv4Iu4?0Jnyql!lPzhS24P@TZ1IH!bb=jj`H|5CoZMN%}lz zH0=tEaYLU{(A+__f+_-up$}xW==Xp#WIvEnGhuO zce!~C+~p{fMYY80 z7;`+O{hOHWhGoapZW~glvR-u4o9|6I^=q z#v~JPzF8SWi0!;cCL=%@`Yo23mpW9`GL$01nJ_Z+HGZ%nlqpFISj#(%Mgeh<3ixcm z))J>?f{`xXksh6qKKGG<)RCcJL)Ul(MvE!Ao)8{eN9R{g_;d5E3a-H$}&>E#s9WW{VtK!i8VEhTT zdK|e5;6jTrrtdF@G32r^_Rw{Xxf)6Zq`|`q3uZ%LLjb@m!VQ zjM&?OYXXAoXCB!PP}d!$Tb%P2X_9(B65xgWuqKD$FBVe5#H{6jg;0LEZ)N=CfckvE zOky;o$tA#rOwMZh=TU}_Ke=imbBg7N()qY=&I^(eF(CIGltnp@yjLb+mtcjK+vq3D zDS`c?D=Iltb7`w`bVv)Ot3=?aWmVXDwG65y~>jG)YwlrcD_0u+)>6+W5w#{KHLM)qqKS+nyIJQUOz*Z8*d62P)9?s>7+oO-@2v z>pm!Ff8yIA1Ni9cm-`dOjP+fYe&b{zdPQXJ$3i zdo6v9-ieV)PbEgS6zN9r@Rz)(RoK#DBq6xNr8He!4jbwx9@5hWTFcl`?V5;U4rD)v z{Bn+_$#)q3`kQrU<4qP)wIEt6|L@$g=4fD1vP6J5-=gPS422P#HPcKn%&h*Zf15fYUunR)b@6z9c+sL-ftwNLYgMls&5RqZ_8Xn`8$IyN7ouB3fm_sCUl$+{RM&` z-PHvimbdTYGai!1Z{;xi0Z zob}3aR^7CxmJH{FnRarYN9?0U+|8l$-8Yx^{D+11bGU6J%=Dj0r0i{-w>q!DAWaAhoCPs zEDnJ)FiRNpe-%MG6bJ;WzSj~9Qak!D5#-OQgznb2Po&Q&8vjO+hJ9fl{s#of=LP@a ze}W)yt(I!R*6V#~{{@1aE!FQ&*Zn(!+#Su3$k2Ony**iN4U7gC@!(1cz%>A%s8#`Wu22dCRd=A%Z3V%Pfj6L0&0}`8Na!Viw0U&8ZZB|E=fW z2$DsTB#^vHk}N`$MT#Q92!mBQ8N?z@lb=&1O;_H-BEwL>Qzi59-w1MClvQr}l_W@x zZ5_la&$a(A1bMeptsnq~{iG;_KvAP8f+qF}tR#kOT%#mGxMnwm!3PZCLNyEwJa|3r`)x=y>b8v0&v?3xCUT^_lc5l@|_ae{H( zXVVO9I(4(Z5M(dAwsrk(o%XkOI1Zif{S@^&KgPv4bRFhPrL-LXfgtPk+|GJA^gZr& z>-D`ZS^_h@5%4*^eZgX!2L8Av4gW%r4Te8I_Hlj<Lr#FHi$PJk31PFp;0y`OFHKtW-lvb~siYo^h(;IWiXw6N< z*Y_ARIyB1Y-A*O6!pP6f}~=?pMzf$tY= zMPHmxtiVrZ!ibvVDOjweH%0}*6icIqT1qr013}PKO_NSXF~5l5%$3gPfzMnu49Wm+ z*l0nF*npYb(O60#3x<-frVP{ZkHq{i9US(AJrtpjCmR3|j z_-t9SeavT8WevzTx*W^gQpi_2s_Cda$Qkd=*OXmfO0^bRq0n{CjC!S-(U-W&yrN)ZB`FJD9cLXb`k zhIsP}eH?w?!yO<9@@}DD0D>U>OMbOuB@z4J*+q|o3;Up$J`XAcKoBIaF|EepkVcC*95EIDkv!XC!VW=@-vWN5?(&*)&o7QS_5BM$dcoUg!tt32 z<1S4EirZ&nLl7j#(qu${eGUbmxwOX89|$s!t<_xK=??_y05P%_$_f8Mkm~hIv*i#3 zY0PJ-HNONwkPc-It(JOsOY<50l2ullJNmfG3;p7^K~|GUKn|ns!GPPd>p+mH#PU+l z)md$=E-%!#<>hsFr-q9d75tyeEBoS3O<8_W4)t!12BQ_tyL{hV=a<*+;z{YwTffct zM682f34EaWZNY@tm>r8_gU*O;w#C*O6pOWzwRrsBLo`;l>URMlV#=pKop_@pZ=DCk z`0b(-R(7Z)xQM={*u~ec?0yV%8QJXno;1I*$IDLt4A7tLy!n=3%&e~RSB!drV?&Tvu%!b^{Xe}0^L@2|A8R; z-PUf}oZ27=(hI?T15UuX3wP~2P{Mr+yWP2uW9=d$(0zwOz-35d?J}X?eUGi(Wz1>q zDg(jeKuo}ODq-z9U&7-^t=)C5e(gp(`{B2-!2d(ud&g7R_<#I|5QjKcAu}qXQVH2a zju}EWNhMU0%HCUM$liPJacmCRdv79pmA%gII!61x@9z6EzMtRk_xJU9Tz_4U>yOv_ z`Fg%g`!2uf$$4+S@Di_}e-SaXUV40Q*o4Y#?9}ka)6;v)zNKa#*@icp9W7R3c+F?- z4sUh8w^(B%HJyJwyghu}a-)jZ;?uj~ok?NKt30}*s?%}=l_m+FB zrIvf^!$1|i3`A6hLRW^$Qg%$R3{AESU8@Yku98KzGeR&*ISy9^s%hSO1YV!RA@ zr3??P970r%PghRBQchUJa-HlLkyiOh!}2+3$tj<5(rEqxh4OPr<>VdZ6mU0^@p3A( z3hItGd1IGpSOgqV3TS03&T3Vhi{`R^Q9<9~TMQLo$QF3#WW(4Y5V(|gVW8sjI40zC zo)}8y)eh_u=1LYjrwy4(1S=ftvSB5=Pvwp1N{;MGPIx6(MIZrS_qD1Y*;Q-%R6mZc*2%8ch2QFP&eI#Oe!5cqY$sC*^d5Df`nguAAj^A0+4nEC z-oG+@|JqJCnE`GT{oW+|y{Sqzn#RTSnIsS>J$8m^A?iXoP`gC6N~oY}H*xYMONO~H zJEmX4geBVWCG-YD5fgoA3@udFrckq;0s}24UsEi*dZ(vB49=dh#w*asw;*~tOyA^0 zC+b=keR>&%^xUfq=TK4YZELIzG2M4+LG)KJW37y+@YhMbrIa6zzB0hx2UAXX(D(|<)wi?GHw{?Z$0hBaTpW`&4Nj~Kk6 z{-mwAr~hSFQ4qrhV-i|j)xeD;GkQk|rafb9S_5z*PTQVIE@l$&(sQa8z-%v)u%Q;8 z)I8H5h!;mEfv}pXck~1u(|ns|fEhi;*sYlY6ZLy|jd|b#^mTx6*FchE3;nTA^otes z^BSyGIFd9Kjs4*gIV_lHjLjf=nh|)iJLtAsIyzdGq)U&49f{<;MjXhhaw$085(=`` zWqt!pgPSn6eL9mkS2vIu??5D4@8h&==VaH>-~hF8Ua7T)GM?)b+bd!%o5RAaa$ZME zb)RC!z1~VF)Jil@?Uv+R)6f`5B1-JrN*dEjmeYE=s+GJ`T3D}vVzre@?y3~1jpl6I znd@z|LTz+%GH58RXJ59Rw{N5OZDW}CJr~o)Sk=bV*>-WFjR#-m(@YyPar>3C?N_h2 zGi|onq_-iiJ!ofr+0JI)&VIsOnjZW4C#f4%?OdJh+*R*5C)#<@JNSq@_|M9YEVT;= zbqLCJ2tDYy^|C|Qz60vpArjLeiVmk-4ZE2m8)jSAXXqqp-s+!?B{kR~bG`G<2_A8w zPPqr2@-I6TX*;oe%0oT{<~kx>a3zon22Rx}L6fJwxx-C+>cJw%g!(_Y0wJ!WRU(z#_J8>CN!p`LA4m;4_SBPIwt^4;V#3dQ+pO03%{(BYT-_kQL1Q0x& zSBo}3PyK;H9HEP~hkm3GU)!`DvG|bCIb!owA-<||q!9m!p7~xOer84NNFff;GlC}{ zf1zg{ceqR9CTRRZA^vN6#)qHOD#Y;P7kcJiR>8nEgJ#8%C!WGC<%^wxwOJpA#LD_e{D8vux zne~675MQk)zbPu?dM@HXA+FQnmAMjwl7lY(2qvZ7wsN2luWJw8TKSQl0Tkk~9RDgk zQ?j+1W_2Q2OC@>Jv0EzYf0PxtJ7 zdPaGxP1}VzmhA~W>x->+`7HxfJ_#MR-4Awgd-kk($}{p&)6uE!IYF#fbQJryBnV1! zQkz$XRkyb~bM|t+D#ZUKdZvGSXrn2wWWDicg?N6&sS?uL*HqGRE%V`or%-(2*Ot$DM_bnmlUD94oW z?X9+;y_I-?p1Iq+)m6B+n(k2ytkZA*NY4mAAGbZCXZ8fyV!o$mhPfh30eYs{T=LHpd``1kY-k%IL}BWn_WYqF^q zy?NG@8`jh$Hu^*wXB2GC)hOiX+t{4c7=KSh(L*F0XG1Auc~#*x0~A81V9Swj%hh8` z>toBK@Px02@(D9U3!=yGZzr06vt-FeOyLRUl3hEi9Xh}LZ4_M@Bh6ADdy702RBQWP zep{6uaZ)x1!bkSH(%5X;4z)2l!;em0VaG?ebqM#O(c6%I?oS{Ab<`ZSLmkEA9K+Tm zAvQCDSo9D$8aY->U_XEo+9K%j?MaA?%cFp5gMy{(}xG?%>(=D#k*RjjA9sJne1XSTw zYd=`iaIFOt;!ctUM)TCF{1sALcHho zZiUM-QXvjqG5SM=_!Smc@V-JELh40u!;47K>!h(4+b0K-0x$AjFUn0XYEthrH@pFb z_&H;5`hA5sQ?K`>O>bt>w^whxWl?;~YW$WR5pbvwPmA#4A@vb3W}9I5X*uR|E5Juo zgdbYqBf04#Me2JIMOO;d0rlQ}oN@zV>+|xD@s%<0Ri_~WM1C@xay=yK+fCQtr8O;CArK5LHatV8Sj9eyH+jXb5hW3m4JG$0Gc$j#0`In z2Y6V_I!r8T(bNRT`Nee-UTRN6;D!Nc((hgbK%%-Xt4E7PI{Twp+hN=bM6vR-#|pS9 z=Y#rO1A~UmO~C>y!ygUbQN%L{Fm_&gc|O0Qu7ACKVznM?4%W95NvXrP@{ zRj84S4k^JX1Eh`N9SSvyHWu_mdvIp~L}?wbtQWc~5Q0J-hWgxpQAE~PkpK_FJp?Jt zJ&y$m%4R?*+6bey7R+XdAmot6NDO4S0BH;eHMmBJTL&Q@^*a&qj&Tb+ZZq&Wz8^VI z9#+(4OpMa$4Yt>cJU?^Cc`^hoA{q-t7t)81zwR#_cqh;y0ChA}x0V@G8j5av9!Cjy ziO}^x$O+omyNNLk_XOiF_m=Fj{2<}S=-AV{2ON``5j8;mF zHA##QOiY9&Cif+#ZY8FZC1r9XWh*7+nk3~1Cc$7yMSV#nTS;YP$rT*QaHZsGljNGf z!R&onjN*hN?M<5jpEm%>MfJruv3_re;Oa=rBWEzdVw0v(^>9)OAh&T-5 zXzbr38b`4lHc2Lt&>McM4)Ss{ngS(aHPG+&)wEA6n!5pzStb0s8-x%1Lov!zK*|#8 z*cyza3w=c1o8=%vBE+CKAk~ao<`gn%hXDZ;KR7W zfqz9TvwJ*63<1Vp3?$(E6e(7o&ay3wekYw*S5ZJ2(sd*I8Zp6oVqmvO26UgEag@(~ zfRZU=Do0irbGPt_o~eJqb2?Wc#&_aDuGVkRGghbbZ8*Q7XOy4S6yz(d;?d6Ldvos7 zGuU*BrUik81-GqZg0~C8Ps1WPVbO(;?<>RNgJ6lX3UI-k;~5S~v(j;=3$v9AbNlZ$ z7(qUo6c+UtmTVW6oi0l8E7-kaP+?kB6I4`JSk%DC{IIWxW&+kSD}9`^xXZNI!lhX5 zWoDnLw3bxyAmVh%7-xw!TjBUDV_Q22R)TBcahk?nCl_B|!aE%WP#<7ae)udOHi{H> zJ9{N}kqAvIG*SwZq#uu84wuk_mUz-cTDbun$g%P&6i_u9K3IzjvZqmXmt4dV2EM0) z-;)nc9>Hr4s`krP1=QWIiy#po+;C>dYaFl!2%Hd(o6YPdF7`esJNq622b|ebow?+S zNmCQy364w$&s$YHnL*WxYLC&pvFy40NDnU;;--QFj?k#HA;(Q*#(NZ88{qREBLlA{ zAL5__w=t_vpsr112CrJxPWD&i(_m%Zj68;4Wh4&KXz)CYo5)wK#Z)r_!I*Br zE19c%AWInys>ixgxyOf>4QxShHARGji+3D*lA!`-4afN5bkf+#pvLfYaI#tBw3(3H zqXyOBfZjgHJRJW~GHxPu&1a29vRBQ{XpI-H7_63oS6b{6`!o0n3jAJVe=un&)@#OW z6p~b^Uz!bX6e(TTYMzg7J#F50xwetMxXnM&iiv^-ntnsptWX}YeV%Qnt@craxmn@0 zAc9CmX6`3M{3arwG-B8rMN666g(bw`XtiP#VzT78x!eAq`-xu^K>?H?1}-2?4wf-b z7CH|(b+QYEugkUb@>X(ZhF0r)vRKEtuCh0B*U0L121PF_z&}H}UsBxK)9*Gl7dyAx zZNAdHccYr}Vox|6Up~IuNkXVk9I`Ob6U~y*L(=2@L^zV|>|^uZ`0=VYjlD|Q?RMb4 zXw|;hK^DYF(`&PyxF@21gMH7?>cdX-i^Hom2mBw3_Xo4|!x{y>%xj7zMB>N?W-I!& zD{#>>diws=OtMYw+#)OK;PkoL?%j*kh>&v=S8BU1LO%8nYOLVR zNI@dX25oePYy`oYkm?DQW~=F;?oWfdns}-y;8~4EzJca73TO^9cxTWq!C@Fh?dGm| z^`5@YYRHJi3LJM~q|9vuGQRlktq(7}J45 ze9xPf@&ilB(+SlNe%C*IQHZA|f8Yxxe#kw3%VKB)Nw>Ay_kcfI zx=E;T_L_vngt+v$%HD(q4}~)2N9esGtp!0@i;p@Bw$Yv?x+TW<_dXi%Od3*BKUbSH z3Y|15nKYA3c|9~~MLA_dNnyz|O+N-5=B10F+TAOHMZ+uq$q9=6U)v)w%NeNU57PPX^& z&D;9UKc!t5QCoPTy`Uhl@PNP`J#rywVL?4IZ7P(vg=g`&;fJ-*MLGLLk}GNhvoq(9 zEykwS0O*X%EO zcJ5`hys&Lp>2}fZb_rs;jB2NXcL%P%Q*F6Z6Sh-Vy3+vAGmCB`+dFNyUn}zLYTs$^ z3fq03n-KH!nM>`S%s#mp>1d{%* z`%8M}dbd`V1ly1FOmu6Q?auhMKcr_?B-L?Y*)oR;@h|kuv6}2~+1n3twmd)6a`IFg=;>mY7_@*O=hI02K(Q++*b-<@wc z7PC*!ypAYVi2Ktc*h`SSx?Y=@hK<~i;Jp)D27qbBofFh&l zSoY}|3#n1tTkg;YmRO>EF)r6KC&DezHAx>J>6yuCfs^qeAdsg3jr+AgQkr)s#*E%t z`&k6iI7Zod+3lv7i-n2&1oZLBcZBm7BmLCZF1!cHH|pGX%yLn_2Smpy$-zhD=v zhH2PJ=&cgoLCXuZX(!#XU%3cXFNmb$TH`{}Gu)Zx!>nW*wwj@)kqr!*W-o0p9|ebZ zo9@#yuM-!5|7rh&S>ZtCjY%=Eg0YPY9-q<7zCv71U}GZ!&pUm;%YzT)|vLVT{aR3CGno_QGbf#N_RF2#0i zoUdU@7)j6Y)PCSwcz)sC*-xJTCVJ+ExaP_BZ|Rw4yN4_>NAwK*A#2VdJ%jd$z3PUf z!67}Ao-GdFIVbhU@B!yoai797$u+DL`C&B>1N<3id3#4srb){Y1~q(YoS z+C{!2@>G@ft?Mvp_g5WAdIl=QA>-}W5q)0hv8WtO#xJ)c<}#oVf534ku&X1Mt?IGl zOW2*Z9aJfdgn-*}r-VXJcE-yYj!XN(WG`N=r)<#Fk&OWhFfi#;Upa;<9S4(36<~g9 zJEx;ib)lFpe%}1Pkgihe@$5$lohi>I`svYR`189uQ-gG8Raaqm-6%ZMEYXw8x9riZ z$FHY53h8MQ7b;ZiU})D})kEAr%c-bC+??oBrS~wQQ=suxR~CG$Pmz~XsST+R7kZ*2 zSJ?O1+BYW+P>4U^RPO8Q%FU~K^7Lh)^3YmWUMc!h{S?}pqbIxb-wQo8@GVsN$oiVa z)$pld%)UY#)?M}VRZgMm!mI8=q(Z!kQ|*&qchRKKGn39jwYA*t;zj#sW)qz1NQL-% z)iaCLLiN2hq(WTZ3Y|*>^;A#U@mu;f#DGGat*0E%LEr8y*FEsvo{Ce|`VQBN?%@Io zaVm`GPC{Io1b{;P{H^CMaz&aa&tFKm2q?rKaNQ^S1wF&1bp}v~3*R#EMk>V5vGx9v zo>Anyyk_t{J#!b9dO**dpHaH;g`SzLv;>D>$dM2mTd|{uS;q|`M`Dy6~dggd$|HWHo8vs4ydi*%Qz;nyJ zC=pBa+6y-9WLb3q-L+BjQvRL{WYiE!_W}w#1->1{AV>YMB>Zr%8x-YNl9s(d$sCwX zGo_Gd=V-8h2yJQPtkY#3a(lkue!}uoZ=BKcnXFqbRBVRX=!YFs$|sLLV{1hY(qP~4 zio~L;sKv6Pt>CB0CMD4lc&nd6Xc*d;;1olM8OOj#rRPK^!(*Kvknq_4gaIbAtkZG5 zimP;35VW!hd`x%eFa&jSpkrC6(+02OQj+xu6R{vBk-*JZEGur7O5PRc5L-;HWTz7> zSU0mVPocquik#L0&X6&|wyu!Zpp-||S5lh6UE`_jQLHXflMC(mkKThz?_h4dEsMX$ zjs?46Gj+ptq|H2zIgv zKU9c^jMs*Ks}N_YixT`@g?J}fX~y4Eh>K5p)>a6LE4f5g;nY^cD+CQ2Tr?Ws2MY1* z=t?-C5N~K&X=uiYsYR3MX=`W&6yhEEPJ-Vk#ARuXxiHzX8~flAw)ql+4UINE62m@? zcSnetM(LWySeiZvHjT?RO=vZJG;Er*Ynt+DnvQOo$(Fn$@_v?x;Z;Y|!b;O3TJsXo zZCl31LWpoUee<$x^Xf{<3SH1=t>z7%W`jG8n_B5x+0DAxm|y4GF+ofq8tmA=WG#TX zcImM+cj}v$#Hs%lYtiwbH1;><+U*mE{%dpX6^PLNx%O{ai-WoL1J>d^rTIUbYriKj zkKQus@E5EFa;`m=zXCbee!yDLnNgg((c&n)Ki7VXVdA%0i=(;rBU8zrvKIai6Q_S+ zDoHe6O-7nZ{vK;#P^*=*Zz^egrHzN2YyS(@qGV_7fVKEnO(g@}d8~hID)}3%h5oNi zCI54*#qi0dwS&3#u!%c+*x?|dNe`4ioooNeRKldl{>4;c(2I)WD&#`CZz{Pra3&lu zl}Kq4Y(xO8MSi*xj-8_*U@F;^E3-y>{u66aBeYVJj$|!J-hXE*nHWg}OeIkXGW18L z5;T-}z*KTYvYP{%vtt#-N&cALp%|90bm`ZrgJmQ56 zU>}%DgtT`iDhoE708@$S7PjH-;U-XiNpJ)eXhFBMw{*_}(VB93?^BSa)zB$01m?Y) z=1I4U#t#w`O@Q==QRTp2*VjKWM+C}K?L~UMB15sd#&1DCijCT1DdlTv#&4y!d=V$! z>gEG0_vKq_#|Z(=AYdvP6SO2pvKG>$m`b)pHs_3N=>2UNY_FY)x4E=o!%Sj(mED#F zFqP!rE9QeF>)YPVwdEp_!>6aaxM7QP4jZLRSP<|@cM{$7x7(4kx#|rZzvj)9L=@YXfF7@F(P{KYFV(M zMiv7~z8pIgR0P=K`nw%U6SSqqsPzOstG z^2WXj0lrEFNK=X0rmqHID!JjOrHC|@Xb1S|6!_`&`aRu5no10AyfajM_saO4QNTNs z0Ard0{F4RmtVsRQ#=LBRxpoFR%K}1Y<3F8iH@>R39)O%{@4c6N67=SEV9a06wI7&D zewu5qWASPsm3C%F&b41}eb@8FRI;g#aX8mbD!VQP3F5=Y2b3i&p$q$_66TnY0xXiLFY?k>Br{pmRgNeYV6NRHiajuj0~W>A7say` z#YYw`z!5E|6n)Di8X6ca3X2x+iIOcdgeS5(xoew2ATl_?j}O{-DWEOkO)4= zD04i5FV?c}76#%hI9wmUJLh$5ZoHnI>CKIJ4C#14P=W%%J%*1P7>J9)hi4|5pr3vF zvx5CGFR*_g#9tJ9H9S7HPe{xO608Kl)V53thXCS(Ps~ZWED7K%c*6Affl82+3y^87 zFq6{y~Ga02NDUuIwI5T;$Pblen zO2}3+xisHgcw#acc$yEpAC{`R;*qG7db*Y7b2jd=)})W3c<9loTNg-C$T&hx2nyuP zlc>QF5O4x>MuJsZO|Sb1%WWwrWJiMlornTBs}hN&Cs2cT!vnE6g{bTB*B}`u`;(?U zGb;-$Fc7V7nH*>4H`%sVJRtWxXG9%ol{1qA!E-Hwn1z`lM0Pq`1eX~zh_G=Jmof$t zvuVd|<)Eod(tNaH>51vMEV?;jfz4|hC!4io0tz1T+V`#oH^8Ns96$Snwn|q@s|aP8Rw)%BO(kjvbM0LFrV_Ji{Cnlv2c{AnC9$1q z0~K{U&iAjx-{_dV4J`{R zzGSEV4z#{(-&CR&QD1#zDv3Ye(6nzVL5CihO5PZ?6z!Wz^dL3lN2U^S^_{!spti2ZIeh_>6~&E4yx+UsZD>mSk^ zSlk;t*c-ar8&1&|$-U27nD@np^d%Pe0so2A-M(~+{!H%vY}Ni;^ZxvhepqpT(O`ec zZhslYKn3>zTy>z@e4r*|psskJVQ?TmFRp3u8Ue*%hw9+LTzg;f;K1M@U}+c}p%@zD z9vW92`e;71Ki7W8F>imaeXw4he3h`@&k3OuZS}XDukFy?KzV z1yxp-U+8pT$v$hbHyutnbI4j)%*2PzBtCuWQ8*LsU7Kn_f0c(Ui*h#CVm4p$#lz5j z)?#nA?1;6fwwS94ovSOEYZ#hq+M8>koNwcq?@*iXvY77)o$o7|KX8fqb@Jv?z0wvsf3I4BLG^EADBx132VW-BB;J{%W?&8RVc?DX)2K{ zl?3xLiXm2zti_^4p~a!8+t2AJx1z(&N2&if*M9na zdFCQHj^cJcz*>0Rur*04JYp@D;G6J$)`C%Ry$)b45IZeYyKTI?qC(ppN2Zc^#Q65W z-!he?-33K30H%`v(Yf~DWG%}3ZesSY{>MxuWj0#ZoXSw{-&~?TCZePtj&aOri67-? zuKi}7UhD6eO5UG3+p#~_{)4IHN7kY~BDduyQ^~Jci=Rv-_TQUIvSq|B|Dmbm2iBtM z`uC<1Bx@nWs(5HB`N~>^bWzHrADK$3E%5hEC8x5UxS~@dS&LK6hb_o`hd2aC=1H-m ze-<|B;%beszjTO~Zs`_$o@|Nwqh#K=r?ENd zA2`G})J;${v`7EIA^v>}5}C|%tsx!aSJ@yAf*4<0kkjLDrT$yVyj}0j?;PTPE1Aa~ zy5^bFfpm!fW()FPOyKs@fJ2=3mJ6Dd6kTJ65N8b^_++1^9pDhJ zken(b#IPa~F&c%kX4um~sj;w@Xh4YEbSzT9A&%%%=TsWyxAhc2WgW+Cr~$$0^!N!< zw9&CGN#OF-%dQ&HcNtAc1hKMjQs?%dF+f`@uV=Q<%8FYZzim_@0j0r8and9K9OBP? znX!~SZNTkWSeN9lI2nvX$(!RndA%b%Jm1je&E3Ohfbw~wI%_iOU8$z?y!TcOj*0o) z-%6Zv+%5$(68CIvojfbHlLU*CgJ=&fjvAU@CRfenPC;?+Bb&mN@4m0?~4sLY63DV2@f}!7FeCCoYMv=O#rTtp|GT7+)I+h+7GM za+oVdz=FQXq>oTeBp+x@Y9lHv{Sztp&7v=}$y6w?YFWxaLA1wBnjJV~Wk45Wxy_v3 zi;sDR#?E09-|q#B59wpSnVZ6@-)!*?l$DV+i{^{Zx2Nfia%|l}r^QNau~x|R=hk}+ zVj>lL*t8POcj7{XhJ1}SMw!LD&m^In3qEQQjHqL||Npp1qCj&5prFQwoiL1~|lN17@5> z*cVQi8}+*NEJeyt3lTB&3dj_tJ2nCianqIeXiyt_WoSIHCD@zD?=F~$&h{~$F?7ux zaEROElSV`A=>$PeOCf+TOF`)7Q)}m-o@WBS0mB%aMnXB-!WT6%;b30CAs*{xb-SXa z^C936cb9Se(t_M~hzDyVouhpUB=Zf4m@QwEdB7q5yDi9nkj%5Z;AT2%K`LRUeA|Ld zgXXpQHyH|$q)bbiZncMh>k!XLyxTY<4 zr3LxRWS*^Q*&W$}{3)6LWeZZ0RxLzHb^Y`PQ-XH0MrXU^Sw>djIo7Qp*cjqtSbACzYn+v}<#PNzo zj{lKEyiR%V(;p@Cf7OEgONTgHaeG#?xyY4bpaofq*m!>%NalZNL6+`JA|2v?(1QGx zL;PzCGT)lK=dcBdbch2j$o*vgLcR@C&-cl^kuAIbVGELH!M&31T7a`OI$ zg8|?W&p+LN*U{*g$-I%1lmBlg^9e5;qyHe8-+t(l>+cH7cP;91Edi2wk~bCXN6EbZ zo4Wir4L}QW<4p^RTN}F@(1PqTa_jMbwoQxD+v7GwZ}oh`ZH(Q0T*3XLk^7YYVGB}z z8G8-lzQFELb;e_5%1X$7h=Yr~GC(*s26iF(5mP0>^0>OG82yJSyKoc$K$nu9Ck zs0B$9;6?U(Ey#>1Y?i|oznk-R|!bw3!Y?lo{d@YjdcKN62a5J#?6gcy-MI?kkTrmh%5VZb4 zoq#{6h{1RV5)9u@<`udeY6^lIdV`xbgIjuu>PSO66p_h%&);>3Z+uDS_Z{M2l6lO) zaPUDgzZDK4iy+{LAW{O7`3RE02r?bt(|r+?TM^V`k%ep_XOtq(nIMySfohNEC<+%$ zo`N8tZCgon8b!J*N_GMGeCd$q^!}GQo?J4C;uU>6k(3 z;KFpA{&d{!bjaxp0?rH~<&2Z286-g&WQ7^z{TY?yil0Q z)Sr22JCj-W)F4?_2x}G#!ZeFLD2t;oi>p72XFDrdIFgSuTTnT>@uW~S7{B0gw!^t> z@%Y1hgQ<9<%m;b%>u>&3Smxg49jZu7}9?=NgEmJ>$%KRiE|J zbl)M)Xe-&D_hSq4i$nZ$!C?y$aEJ#XTady11)*PBkjk)F)BP4?AuJiVRBXf2PZwr# z7G^U(l~pdx4=RLhvl|y4wjeV}?#IgFiHSiHnIXj^cwP)e)U06a8yI=UklI3UUV$g1 zwXmsQI2a=sWu$lrAqGj10v;4^TvwvZ2JRar=lGL9x+=~wLPqog4;IC2OmTxH^83sv`6TBh9K*g^_UB-jj zS1r{=Iy}T{%fX|&qI~`h_mR<4n)+(x`Xp1$x%Pe5@@@kr8O>Tx*g8|`Z`yXM|Lh?SSybm10!>vTOKdnM=uTOcHC<;A|{#0tn2eS3R9k5*!RDAu8S_lNr5X zi>;7~ognbdX7^zJOPL<)%ozxO%EH6b#$4!LP13K<(l}7Jz zYzf)&+F%;v>)?B!MxY}}qtdWI&d+>botCQ^?H(SKyfH$mVz)umUXO4-yfzUicD7XR z1Sg@oX>;olHek1YZo$juYQ<{g(*!jhTW;i%Ze4jC&rFHA57iS2aCoRB2CwKOXE_?>+f6MUfS)8}$nO`JfV1 zuR_AOyWx7t9_X56WA{~}60VCqqgoedr69+j^f;}y>o@c`bFmRZLXn1FLn5y;`h-U;%Z3M$&1T%C5Trz?)G=jS~ z0-+ow;29-S8$D?;O5*-xCIp$xQ(6$6-Wxr`Ge)O2b}rPL#$xP33DAPXXBZk|ru=Y~ z=L3tR8?cwk9{S6S5W)3ZWB9 zB@^V@6UY{1Q@0xBM=iCF4}oM}(&Bz7GMTq6`pEP&{pmq6&ttA{fowr$22GkBCG)Q) zC+(0eNVNio(4%Djl7Z`&7UZ8K^FRx7XeM>cRSzm&oognNFf5la!*Ubj-;&~~6Pw}jX|+jtZ9(0O>nlWNoZPg;4D%y+2&D-QAD|3VAWfc%Br>|Z*>gYGV>m6-4Dp_40o zb%?i{5}wA+zPmB3S?7CEy*gO&^TVc)BZoNud1WqDrJQ#4B-K&}3gtg@h#L>RBCFj{ zrc~WBocZbyZ+%KeLOOPT@jHk3WtiH3*dcDfv262=L;S~N{+AB%-%RFzaESjWlKDS$ zh(FkGL9(eCPad=&j~wC%baoA73sS=t@790OAwKJ@^qJ%L9O8baZ!dz*7wK2x33ENK zI)!j6>L79CGN?Uph@WD-zQjCP^rD&fIJaS|@Uxod)-}|BedUmfD8CtJQc#9OTK>;Q*2J3m;y1#pOK zU|i2XY(b*k!xUl{An^P94sqXn!E;9radx2#-?SiKwSMOi7ral_`GZ6JxrIj7eaeFt zq=zM%7WJ`PJ_PQz)9Cu+r3-Yzl2{oVvS+dqCe)E&A20Eug#mTNO zElAd`3=exfgci_(tdsA`d5k&}a|?2`fkH5bsvw>Js*2}{JJFTLHq-e8#7CbScptVP$Iyj+ zt1kam3zFv7Ey&Gt?LNxyS7RBtN! zgR3C|;m%a@C+^fzU~v%Rz?~Y-w@dCsWvq84e#G|BojRp%bMoQuxKpFd5d&YYhKGHg zLwD-6iJHH0HN=?E0==kyJQ-s2*X~rUrpMEKFJ*q&=Q&y){##eWugk-KeKic*8%SD2 zUJWmcuI?}*`#j?MB^dvi<>9}+8e%`W{in;r|8sqwXTa6)pwF`ie1SOMUkz)@FgTX1 zA;8t}JhU9Fv}8j9Tn)eUd1zE1=e{ftTV}IbYv};X!=vrD&iuGMO!}B+-<|4J%nYKv zp@|PH54$jA0DT_Kay=TjO^cKZSHhW-c}B@}XjVij-}iYQti!Lv0C(z}DDp|bohs={ zbT|8OdAQX>30NM!^{CHN z;EgHuIk2Z8mNl=o@hPr{9U6Y*xnhwfgTT*Umxr&tq6=*+ zPLK|`Q=deIJ6-v3br{%;P@1@SIRqzi*v`{{C1vWF<)Rp{Jj|}gF;9%uZTj8vFv6ky zByxE;SsCZWM&+UeGq60YIn$N*b$R%geV)I%8YYD1AGuTi!PW3vcdA5n!napLQNW%0 zW1r_}dH6qaH544<0{T4PFApR8JgM%EpMUL6ZPJfaEBJ1Cc#=5k+TXewHhm7=-kIdX zgS9wH9$XD?!`j|8t;BL3Tn*!ZJ`dnd%?>%=mDjYIYPvhC@t5vY-pR_(M}3|h&dX;v zDo*bq`#fW(nm4LB_n1qZpyO1xH|vx`#Z61UxKn{X&l)Sufjc!Wo`@rOs|)+(r_^7& zQ~&5{_%P?v!SZn4y^mSVy9-%4#6#y_AfRQ81}qPU#g%GUDBFM#Y%(Azt58<;9Y^HyaQK=9>Xa3*JRFr}MFhB0d!$gb zt+z+9@%@qR)D^fj(w#bWo65)rxEdk^ZJ2;QPrf9Blgd2Ac70X-ngS&Kk?p-)TZ&Oz zE^WEFI7+@Ah>!w=gut$_TTN73X|x4-HDnaTmg&*o9yu+pU@tF+CmfHw8rJ*RX<*(5 zDm}+ffgk!i=;S--VP5*&;*eg2i(DS2*Hu+;oz1KW+uLSV$It4LzB zfe$SmT@1!(40tqJ2?kZhx`jdw4%fg3)<%yliztgg6ggt=`NX25fHf~bMyR7lm?5U3 zkO%Z}hCY`s3S!`Tfu+dsB?D=dN#m>#b%J{uzUpM4h$TA?Ck8pR7_|$r5qxoOO2SeM z5Dg{B4g_Rr0wKAI{hA{NMG8;%bL^A8gb?Yl>`FVyzPMBO@HV{@O%rj8K}p&^3<+EK zQHhYvOf{~VBn}_iq!EJXve;u@vE?qwDjm3XN^z$$d75$U+tUQc_qqxzqR*>ng* z)DeXF#Lu5kk;-tfsHhL__4;knZVmp(ZDC^ksEQ)0j4%aMp!MGiLM^+Tv1butH(>FIG zGx_QW73m?s3h@=ebQVUUATsbwS(eSF$c~9*=gkH}Av>UJ59eR~lP_4E&H2J4VN?N+*jG zyTH2tZj(tSn>3z;POd{=zD*&&C`&TWJ#6Q~1Y{S6xgbRO)>;|ZML8F^RskMWjB)H` zIieCi@VypTA_$h*&u@ZFm;!9hO64Yk3X5H#YkWevW%heZh3}R5F4Py?SkCX*E+UtO zHt80NM+-Xi6Dk+@W+0M^L1+obuHf}DmPmKxOcj>Aj2FyY%AQjemf}c2@x)y=Ep>Bp zAa^Z&<&&_JB;0r*!E3wJlIS)Xm+-Vk(WGfv?FGnk4ER$SUUi{5PVg<2I@}~ayg0^O z&DmUHm79B@!p8n0&F%81@N#;+3LQa#wX*VcsfwAT3Lbd*)uNc|W|fcg%h(T=hs8Cn z>{NcYJX{19AAn2lz@^BmfaPIXl`45)c{upjeID)L-(4QIQ>k$tRQIo-$y0_zf!uS3~OkSfI}{ z_{yhlhqEe}iMzMqm&?Q5ljS48@-R~La3AkH{R9jD)w~~akk`=d-54KY7 zwo+5Ho#AeylX$tM)HXks;X}|!KX}mR@x8*`&Vuao6ca9*{X6?SdV^h0kNP|vZ`<|w zjSPW4PotU0QiJJk_oIh?R@^;yPt2ZZ2-%19=*p$Im|wln-{VQqd)Vi3<9}oRFZOvj zgvYxpfj*Dw6ML=h+Q9)>_COQG;JlAT!^OcaRWWie(N6Qhfs3Nkh&X3x$KaTR1QYj{ zJ`eJ0xUf64L^1q{dw4~4|7!Sm`#hneWF`Ao!@W^z%CW<%p~V<|=)u)+?9$%R)llsN zs|E6E$Wiiv>*#8T?DLce+Nh30Q@KQDQgWU*iAa)==MUcInF#sZLv#hBT4Lgo!FXyN zL@{-OrJ{j&IY9%s8ivYA0`63x&x896xPku7K99wFnZ2olJ`d8JdUQ1$C!7x5@AFW- z4vjwO^H3^`7S5y&T}#=U$#lP#!84o7b1laLc{N13Q-MAYPt9XWq&xNB*yjl%H5PPT z?4-G~gG)JCu!smHzhD}=$+pxZZHMZygpyHGHNWuC{+QOrzB*`73v7&;Ii8 zFWjkra5eP*yduxH#N*hQ+!9PaagDJ!%iB@RdMZ6dy>BnJ6CoE zKDe=etw?+gJDarbdyD_Jyoj{J8>MXeWAGo#i#VJ`B9Dfm5(M?-IXr{k{#su29}YX~ z6Bx6&nQ z(Lva0^5akxM|W-0E7<1{V4;s|@+ji`s7SmQ8~TI{J0;Rgy6cD5VC%(8ZfRzd zV#8Z~Kt-Z4&4PccfqONN77+p_T|r zh8UC?LP-e)K|lpX8YHDtx&#D40YwBUm2Qxb?(XjH?(S4TTBLiPFQHqv?z27hJO5|i z&5Pk0crkOaK5N~#9pypl4W!EIBZfxniyz!NbI;Y_#%BUy=Z8W?Kgp{vRz>bdPhtV0 zsBiEhW;U$y6L`_WY+(ae|7RCFKos?PyW##n5=H%+VdpPIQU9l5=jhxqyy)k!^E**g z28Mta(W))s!6d2#Ad33eClW1rg|o~ZMeU})8FniC30|~9V*CDhB2h9ta5|AN^ej1< zNL2K2z54Bm1ZVu?Kf+FwJe)t^MJE%9rpdAsQPigI?$F55R$)ikifPCG`2G<9FDhSk zBKZ`84c}4TBwq{Y_)!!E-y7^W7DXMdSi*mvNK6b58}Wq5|)s4q8`jS;LrZa1!OpLDmwzmOzk+U?O+3`ezoZoKct~EQJ{fz)S9tHb?kI+p4 zdyFXi`;9uH3YZdu_HVAql1q_En>i@#$j^HnPb98QTd4&a9l#v7knAZmp;FA4PXrzH z2OUGS9G>Ah8O=#2(K)>`JDEr%S}tcgz1?xL#&e#$jr@kn+3{Q0>1^NtN5$kEbXG%l zLgaSA%mOO`8uZ4;m*uQH=U^Z@SX7~lUc3u}x^)Df>vLozGHNRk43V^3@ zFC>fkv3H=G>0=iRn_G_?-IO0g69q9DqhD7iYC9;nW%;_B)?*-6xwq@;NP|IDe3+Tc z9w_;4#95BRcsfHH9%hV?4}v<=RIpEin7ndlVJEMx+v-nY=h2QQXox2d_jn@lN7#9t z6vpUv0T4yGFz>9n5YED=8NKh$Vh{vr!-kGUQSWoW5qOvx4Vd`XeMGmQRm?ObNj^L0 zH0h2-QLK+hsiAP$Gf@<0lGye6>nywPe-~bqL^!|W_gnCypTbT@^W%xcpTo{4R~i+9 z0)v8rhfHo11%)|i-I@=InDK}P!p>cCUNlVETrjSAa7>-IA1YQlz6vtdyBzb7Li}qe z*uh1+@})y3VW*H0H%n-}d1zx$X!Ey;#IM56@!haV{O}KOmhfrCaNQR{vq9ktMc;*; zED;-u5nJXzhMfeF|6n3vvlW5^OeFR&t$Ty;eEbhSS2KWH*M1 z;yq9E0|5%MA%$3B3nz}^V|YhDgLoVd|&s; zL}EDp*Vx2|Z_O=>9S4eCus zLP!N895a!S5FlN_!ekoIdEGP=jkIbAW(L>i)VUO@Y$&%@PN=}FBq$s?>2f_HgwQTzqm`9T6%Uo$-Z^%3> z0~#XmY1ji%gOo@Qwqbp1emIL-1{w{@q~dk}XE{7@&DPwIC})My!f7zMsbO){Ihq^E z$Wrc(GO$Y4EcOxpr!^3g609Pn+-EX52r$TkB>MUu7E?>ET(5*MbKbeE962_@n{2=a zA(JW#s%pufX`iVXg30HcrH#)2i2w+!bC{yi$VT${YxC&5bH&WFD>Pl-@$yVc<}rIi z&gm88AmsYqaeR`3m91VVxRE{@jNz7o#p{-?(Oh6)Z;HnTEic68Tr6ZlqRfN&19qbK zBccg~X^|tm>I&&fCB^xCxmHS+Ea+mO9P<6j(KrzM3nps7Im+F6;rTD;p*MI=*2L0=3ffJD-vXSh`} z*cUBNRwQ*+E@o!lZskGI#}*u^j^sk8FRdZ;%|nnZVWfw|fQpj1phuC_e5qWO!!-<3 z=*yLmk1*tg%uGz8y19=Ys-;z%ozV44D7tcnnm&&SUO`_-y}qv_1uaenO5HPBu8K)3 zz&y3MT3Z3DHyPzg=7K(6f{NDiS)~fV4Q(9YDveH|0y{j7Zu(Hi(Z*L=SKUVI14Wy3 z>`eof8iEg+=;oRt*_&g31uyz@*!fz8a|}54*=(tO-P-sSUetcj+Ia#m>Q(s) zFDh*t9X){;5w(8+!cLX;+1Fpg&e8Ujga35c3BZfqbW??OQcF0!QZHl0YgRzNk@S^3}aio7Rk@(xN^X*L* z!3F?Z#PI9|X=BCR@Q*N)@`bYFiG;6%mKpkQ z!HfQ8B5{waiuhO*^=%@N#|f+?zTD4+5kuFSzle^BuTkG#qpDaVvAcCCevS5YB2nhI z#9*~9-4opUZk;`X9=2uiaeSTUFT&1$EQht zqj&7v&zA)()@-bZD9mFQ6?Vp=`0Xd+}z6hlg+!IxYkh@=UIC zP(C_tFs@c6HwuY89S_>ED4D30yXv{vCMHzdDh~S)yl{_!r{Jegs{YNYkC4far`rCpt zAS^h+B3%_m{e3Lbdur9+z#{!#!MQN&<3F4EmnJ(a&igdW zxxZU*uDJdLTDEhV`Tu8x1^Vl4%)b&Aw3s~a7G?VTf^$OJ|DQAeEK(}|b1b0X z{Hl!vqeG?WC16U-^ zy)T~DK<3}T=<~JUEGE~;e^zj&1Tz2cga!4~2;pa$|9@3j@F|xx@g(zKt)*c5Dl7mB z&UMUi*Ef4F1J(}`zR&z|n>!s@H~tfu|Ak~pC*j^`g3Z&+zqvP_bu&rQBUvUvxG!1h zzn%FjrgmrLL|#bK6%ZNj&KGt>xSRI$)5cI=alYr$Xtkb>$jC5U?zwB(u&qAH9b}u> zd{V8=c| z+%4sYg0nJ!MLI4xw@zVL0$3!BtmDidD`e;2EI3mu@BW7h&VQHr-!)mHSdb3c>rE8@ zuN0jB$oxZ`&c7`v{Ur9;VuUT@OL;;0_D==pXNP3}T;^|8-;SDkFhhs(!swCsdhp1> zpE7^H$2T`3+;oBbrGXGMoH=k`J4n7bb3kx{&xRQX(f5NZEs(d3s;&9=4 znce-N(#@01pG1@Gp!^hz6yti4y}EpNpyTMBOZ1@th6A@2rZu>_qV)4a*FE}fw|%Gl zO=1LVJa5PmirSjI6>}94I8b#hz=|l!8a?r0k{3o^B}@zj^H2-6L}!i3ta?Za-KT>d zNLmHMz|yd{IP|uc1s|5HLnQ`m%Sq8dUPx#l&>WM*z5ood&~|eMeRC3ePXUTb3Wlpg z?>fKP^s+<9v|}H%ySZbZ1_EiVLg8Ex5En!&Q2m}Rlxq%}Y7L6za)5)7q`e$aW}$R* zwwo}AN2HF*AW$A4c}FpMjQ5Zm)xLbyfltsuF3<+4%hn|Ep+ul#9+#aa9te~P)@y`7 zK0$}!xXzn-4yuC?B@jqc*IrQ44rJ)CnF$smMUYm9HX*vu&e`fJK=U%u08WQyAkv*d zNE#^uNYV}q2EL<Xzx4-Ig)e$WugHWgpxeB6+g!t zy68(@Ab(1jf`U6--F%DGF$5I}3xp($;xR|za<3604MLKlgXEEdGbyj!;{!1A?)Ona zg@VXig70Q2Jaii&AZsM7NmuDr$0;2sRwu@}EHrJZD;1<*v{h(@xTpU$&p?Q&LErJfA0(RSoe)(Ju)YpAvuRCHXz85rC z#WnX%n{-uZ6o*@TUAgTp#N`l91yf%2(scHu8uT0U^U3eT(6UAXsr&0(_kmA($;^2n zP6cQ-dM{V{87ZnV54q)4LUsZ{+dl5wJig&O0RvRZx98sh=YZZmZn`<=#72l;p|a#I zx(pTCGqgYi(m)s*2nDzZ2&q1FagBu`Yz4Y&vAFvW21MG2*cG{_?*{kWb$&VsiJ`Nz zH21d+3VntT>Ia^phK|=kVo1YMGtnMRx`u%Ke9(}rn!?Wegk%?jli{dg6JT#AU8sh+ z!&M%K5X0bSL*WRkj>?^o3Zd{W3isRipyf^o8pzQw+y1JM9{?%BZnEEcqIz4%!9)mI z6U}G0$s24DIeFKIdI%ER8R>)vs^GGl`t&YMJrc_`QbsWNye4{DW#qFb;fPr-t(1Ob z1ZrqX_SY7oV%4M4Cf}W7iHs$6E8L034vwT&bPOqULG(t_;)1L&$C56@41iv`7Zsmo6^o#x zna#w|J%G`|`e-#2t1A)l#jOs!m$+ijh*$doNvMGhZDaFMpr4a3; z;bSaPHEU|EQfj?LYGZI}b8%|xaBBNrY9~QjH)~q2(lHikFgR_vIBj(J1dBwF{(<$M z#v&mpXCnVYEE3~x3W1*N+u^^)A`#}?X3Jqv&SCr$7Kw{6m*)hFbl)-;C^ZY0&_!fWi^h0uii7F!M6DQj`6X+7NlVpsTqSrL7~S?fa#jgk{}qWxdK}{g!2e zA!WlQWuqfyDPI~XU)e8TC9GIutJqMk*s`qH38~mC zsW=#^INGlO5mh3xS3cJ+MS5L{8d~XbwHOjAu&z~kfv5_Ly-L4F2@bN)<$@)9K^Ev> zm)SATi&hCTT)D;q`z&CMSVaWGON7x@%f^!9GQ+4wVNoy)Bti5;!>XG^_o3`Ce6#9{ z-jLmZ_b3|4Y)kx+Fwmq|Ef^C6k<3bT3ASNatBfOgPsUwJA0|qRE-qSU=v##R)uOr1jxEN zW-L2weWU6EW^?p;Trye~O~WR2T3=!*Xe*hO0TBcTuZ16}>Bdx2=J{4C2Af04R-CSe zEuGdoy}57LYp!uS5mLcYmRgx*Z0^!SVGJ#UqTFRB)@uW;*D)I>Uh{UK)uk?B75ZU( zY9&YvVVV`Sx<&7I{h*!87h@ve*^5!~+B%P`opGui*@Fi} zg?_#at766)VbTeDfk!y{&E66=IIN2d=PfL-VUZmh7T8S6!Sj*`gpG%@=G9GtLm6Xe z-3=GT7FkEX)JF6ox|J^N9%QbA<%M-*W~c6G4?e>cn)BSkVb=F=@SGd#eN=0|j#ENO z?@Dr^j}WPsvC2%zqYu+Q97(F@9(T9e4Q^q?X6?)OUzqnXNmWO2bxVZxgY3IFqu%P? z7{K*~Xr*C85+T?g1M)Zn)^E5xcX4Dm2DfWU3YW0O5^4xs2fYj|HQTUNFAp6)YH!7q z9MB&U-hf&yb+TwcqciKLCR;*PxeDWeD-$~D&H(+CbM(o%DUz$>g~c$~-gVO}g2~${ zYIP*1t&QDdO}VSdHIi~ZvsmfhDK(6&!nqNsMqY_d6`oS;6_gCM@_N^S{N6p!#=M zq~8}7_*elDtrl zHh6^X3U{uQ0Eq*Gv=G8o?Y|ZlWa0JAiON27xGSfq!{05d^!(St0vS0PrB_2*5q}5^ z{s)xgB>s0;qBV%tA)Ipbzf>p{@t~VODPWS%ZVySnpdSghyPXzf{ zrG5N+V=4Kc2+J0qVv!u4h-$Mw2>u-`l7z!knK)M2WVya%`MRfadBs0qk^K8ob@+dU zMe54t2O(J;W05kf!1`aYNO|Y#G%l7X)E{G!%Cz8`WT#l9JfS+S+m?#$KVy+vw4iYFqgOWuG0Mzn)=xxYs{W zzFqfcED|E_;3*bKMfol5U=`HS(4K-_10p|IjazT%c(+so!*sBQ1o?$CKl=yrIL|XI zlIEp?!N0&Ftv*Tv0G}V@XZ;!l?i=~|371a4!3b)Sa5VCbW7npZA8MAbH}cOb)xK#u z)bbGdWndlq+d{8?A!XG|# zBoG0J621Pn&x`+*bwzdWcdRS_q4OfshK|JFT37y>pY&Jf#U87z^~H&fier9Kv;9MB zBv*$C8yW+tN!zcJqCcG%qn=8?ruuMpUi9Y^cI6X-fw|E#sXn?h^y?l^ikLN>&s|Ua z!-syxPx@(6WIkkl<3-X;fV$)L*+4CE8Hpg>_@voj{rvg(S1F}J0Rcw+XZ$1`cEo{C z;nt@<^x}tl{D+!9pBGmgU5t$%FU%)II#MqrGTw*_jOHa1{`tIU9qqc9Ub?lgm{IxI z7c3fvthbcacnvr&UJGj0m%w7jL9n#q)LTCGq2F+%zhAO^;zLgkCg=DPGE7 zT+tl2@T<*@?IQHM@%iMu7(U|qw$5lqzXAzYfA!m>$dG3S1LsQ(j=cVtIy{}!FZD#G zOJ5pDooLq@$piG)ny3;|*P3YymeyM6{vGRz4uj#KR)E3Q5c4~a)AOR0PWg@PQR4xR z@ZndV(zeH6pM#HXPgtXTXnOhiO6m5>{^v@RTL-JPxX%y1G*V_9 zthF+cJisb>juW%qEC2j(b5JMaaI3Yi{cwBI>DJNCbinhY-MIvSsl8P2`DlN&;THU0 zW8jyQqAfkH5V}Z2-0%5G+`Hx(fAEt!#o?qiC_kSU0qe@Q^I~fhhG`?{^xi58T`VuBX~lcJ_3af`L9Zu_ws zK9VpIPA!XQ(HYYfdYD{stuN{qELz!Jf5q-KfAnmMo2E@IYJ120q{sQj*IP9S)&n29 z$ZdEviHZQzXl%X5QasmzNzpMs=`p2hQk%k!m+xvzA262y{3InLKMEmr&sJbkgeV*~ z&)#U=IWHc#lNi2(gURs_5#Aw?cjZ0L$H$x~Ph+hSHm-goPvm*%m=P>_#~MvFkuR(t zy2Z~xYgRJH$3&2zW+A@^=_t zW%XMuiHJgmnw1!@`IMzTW@=H4bIr|3Xj*zkMT2i+yOo;=_R!tb9qcXM%FFaf(?2;c z4sYcbwxvBYEg2r$JNBWc8#;-MejwN`Y!o~7p|fuP^XJ8uri`aHHqG$2>8%X`ANO>H-50LEEC}M?Dc=9=~v9q5?21W*Y*0YvW%73k|trvyP9`y8EMsR z+9dl!my08F0`3~;rE-YUn84DqW)}vQ^6k8ovFPTKOk}o_L`MilpN@rpLA&-`pi8dHZ(`_QDE;_X_OA z1@UJXjU|{JWE33mjh;*EIw&RTD-Sw&&@(E|9sAI=6i74_9Cc6mNrR5hb{q}yoCbO9 z03SLz<^yA0CyPeR1szPC!sAJiEwi(|!grIRL1$pJ?(Bu<;=}CXtKi~q<`Nj_68u;E zB(s}Vg=aqW*hIVRQy;pn8&jZLNTAcP5B=1-()i|$f_vjv>xu=leS4yFIo>zxipOvx zRa)UOKj|=mx~|(}GVt}2fLAkt@7ki@i5t5wedQ;;yG@F7-&0@EZ3oq9n1x$)|IY0a3)4>(7SawO+6yI-eOLGD~^dt^UmSZ0}@zgs+ zDPKV}Lg67_$rI~JdXC$Lbzhm^@S&UbyT)th3t&wOcs;KzP$(id6cB6U zXUk%3Z%+J5@pw{{E{Ecd=1Lue4Tx88<56MDl(pWUwwIH!4_hO3&ze zD8(##-V@9WG~5nF%&w$R*4ZEf8_;!3{aSO(CZRCLd<5<g2Jru&-PKtN~MnXfxnl8e8)ERoSEBJ;@ zSm0D7q$(V7SRN}F9|3}2(P>ZhB?3EHb*wQI1%g#!7-bMeb+H+TTnRHdI`VR{^iFjY zmUlD+Ga8pHh9k;kK_`Y3Ax1ONlRem(VK|z{)#REIjDNuo#u~e35-q%kT|6Ii?n?|g zeyo^MoJzlRvF$AZ3rx|cal)^zUHcTL(-6&66$;H_mJTM2>co6P9bXd{!;3}vjP<^u zD*-_<{zfLulr^FA8bq$@#gtUSYb8xBC0J4?)>I`-kCjjc&YGy^82-+}j2bs-sUfnb z7i)hKwkSzpE1Wc)m%uEQh>ZZbp#Z7V>?JL$X>G*yFoEfcx`O9z?< zK-FM~GNZYH0B94ii_2m(c-yg*zakUSd%Q1#uTF`){{^$Ez)Ovzy(1TE7clM`lN z4FSb=LWDpdL0Hz+lpxp5JoOYav5{;Pw_6}kHk2(JV;`Ci0$te8)B=GX0p);5uz^KE zR6)*ebJi`kTU)D{u^>?DYUY*~2(+33LkD5Hfi~w0vz>A*&@-jHKvG=D%aLHNNpz^C zrp;nH8Y~;Wn!mgX4FQ2D9~Z}Mimf@R&Pxb;dZVA<#g(B;ldg*t)*Hw$f=q9en6&}80K zLXq*sqB|nl*r{blBiTTc0FyKmu!SsML+iN;##+s!)h`KXfy@(Dy9nenhvwwbK|=M= z+doiDx@k&FmQ5~JO^!hJ^=d*3vPJcZX_TQrIUw4Ndg2y4>!!$PvP3`F{}`0KDfw(MZ^;<=Dodvn67HW2|dQf|_EP^3zMR^0*+Bp+%ktWk`EveCKl~X~1xqtklwSqtpV))*336ifwiD zV7Jztssf?PV!MMD2PQ}=X9Xzhg6(O*1}R>QM{?u?7T==&QxO{Am_j zDLvsMrE1*-jFEB$CIMA`)Gar zrhpH$PMTbonZ*U%Ah8o4xOwW%HZ&?#RmH`eA4%VYaKYrXmiaPQn0fC}!{`)@kD{xFC+f|(o8*U~H zieQ;}>3Fd)P6qYo=axDtG|%yt3@FQog}hxdWm6ib}D` z@_5~ubw%x9PyVZQ#Z3K%ec4{xLGj(n{s^0kf3~i~U2q!HRN8#npQc)&#{5b>*+v_# z*Gx@Cxb4A0|Z(dJd5wCM5b= zAL94(9Ja>T^!yj)wX*neAKKI3$JdGVuHMrnOe7ggwR@71TAf5MNapmNb)`Fc4>>p? zK{hxxTbL%J_V(GNC`?3~7^i|fNAym|*?F-IZYcAVgz5Y9;)8_iA;SEToTul-vgdGY zK3whGE>B0>%xkgaEjQAjm%sC&``x7XxlMoZ^0`6=8Cm&bANm7=kFtt7eMYI2FZu4u zhdhhRlYeLhW;~e`JrF*f6!E_lbrIEKRC?mai&-c60ezAVPfI?Oh{e1IOT(?e#Q3>9a$a+=>X?NkMqQH3L$6b#o`BH zCdnvck!R<{VBy6B4JT5=;9v?kh}gt{RWGez7C0{sJxV3jf0@0bm(y{d%^+{!t%0A3 zTu_4l+oKoE*GPxz*`Ake&z3w-s@`)7f4eg;AYiqy#Rgbcj?asI(IG1juXv(;X}EQA zUKC(6>X`QzVl;U4vGnA;xar9;(WKq?(23*KkPg#!cw>~G(1^uKT;MC@B810Tp`4r-E4z9%aiUPc2)y3!R_M>HD}sJf?g(((bE0*e;(6Ss z))g|5*W3`<*K`->1M3E*nRyBNI~|$$oH>**A+qOTIBStk_o$tDuUzVK7SNC2kRyYj z-gc%DwAaLmW3F2;aUf1{o@Bqj!$*B$UAg+{APZt)SZAbhYF&vlsWa5Ke?&CHEWp}- zdS2vaDAo@X{A=q9kpbq}d6E2id*H9mixfN%{-kcd40~-_Z59!w{_bC%7awS8%?)n2 z7l}S*>2iVpqvu7XqM7BtvabA#=S9;x zy))~|_vb|?etpfa=fyu+SMHYl>bxjhqSXJp=S9B~mD!)qi+LrgEC0-SQH>Ar5Nv1- zW>^1qUMy8dX8P;%BE9BrAijvhU@c{TW1p`Ja9%9Dne^g?yY_+DXxm_YIp3^@N$Dfv z?ZJk7$VOfc>{?fFhfdFn@LyY3{)zMAW~mP6_E3ivvT-DsLzf44xYOyrarDJ9-TO?# zz~`!QECt6CVfo?ifO_NjyJb(rO^16TkWCW#Ii5-f42y*@m?X=VJ(VjM?#pmAN!8}i zQyLiVFQ_+3H!0IoyJJ#UhWtu14yLb(J2KcX`_RL?Ous8Sc&NkiRc;)I!BhDWa+E7B zId^?P?+izVC;W3BLln!wI?h+w0b@%#0+z#l<*)J! z#+IKuS&q(dnida?t(Z1gj&GKmmT!-JwnBM53BG4mjXS>TB=Gvf#R{`}rtvSHPOqma z?wL2sbAEWA`+9by`h}T>@_NLl>vR0~EV={6HxdNiEXY<^^cRe89(~we)Xre(=osHB zXgJhhiLe~shL3MopuAmmxcB-4?!-<5$-;_v#p_w7iQSHSsa=ux-Ym#h%$+ZIyOme* z#*jKtqlyHnniQv+jJ)~^ zLv_JzNa#@fRV|)A=dx?|)h%;gpulR7LN!%wb$enN?KDqqAdk&rH62b3J&upY)tWne zH4HK}ceQHZjK(!g_BG7DH7v0;thqI8wKeR$H5}75oJ-^g8#P=wwcJP)p=7nZe6@Ts zwftJO_l;`>>}v&mYlUKKg>!2~YHLM%YsIE(#W!jtkm@9H>ZHi)q#5cS@YTu4)X8eq z$r;zl+t(@h)+xr;DdpBF*Vd`@)~Qa{scqCfM5gjdpyE_NlkIWEvff1-%yIot7%) zAfPYr8{sIq1#Z2K9@CBQkg{^A1U<>Q9dVj`7@FSm34OfMZ`>4M-xTQE6cpPO zoZA#q+Z5W{6xPZZzR?tc)EtS^97Wz7&Cndf*BmR;9H-SBZ`_<<-<;^%oD|!foZFmI z+pMV4lsesIor3TIJc#wwxzVU zrEI#Te50j;9G{NX`36#}VQFTnr2ol~)jN;d=&AF|n(T#SC7|o@k z!sw0d`W&&1qMhVz-3O^D*4$2$F`127rRvPTO@1ZeQ7G|BTeJ ziqr9hykm`_W8MAI5MRfpR>zic$F_aPj&H|qY{y=1$9`?cL2t+5bjQ&~2OOyrbg>iR zP3E|-a~F9hl58hfyA#=@6UF1&CM_D8L#O!rRtSgi^V-e}Go7udu)$W(4$+7UU7b!; zT^RgbII>-zcqM~LMF(N67yY{M;{Yr)6f>`jsILng-Fexg=wYKE$;ECmita0SyRY(h zlgoBfXm?*T>85n(rt<5)9@kCXCrVS-P21OfW2XD&X7?>{58cHcdWxRgcYE&e_b|xz z!0&4JFq-r*IrK35^{~YCu;%r!)%CFV^>EDeaBlY81NU-WOeDV8%X7Dvm%o=!wwGVK z_r6K5fJ3h!$7LSBUg5l6k-A>dH1czOz2cj_5B7T{FUm4b^-A6CdobpuY<*tlBEyD8 zpZH>!XJwasT%Xb#Cgr+56>X^S3t5jjSygbq`o(??ihj*9?j^c@F1vzLlc znDKx`o_vp?lV#t)n+qxka7olg11Y?3LIVw^VfL4K<*Lf|g~59I#xBID@*sT} z8@~|ITNY(j5(9>`MB|gym9%1vBfrq);dB^qgn`^%5qrx z=Zh0-CRKQMCt4t=XSE_k5G?>L23<$5IH?tZQHcaIBdhFCv8h!WGoxypU{{4h1+${- z-0<$4Q45d{ZHWF$)PgQocaehhu@bZOg|U``jEM^CbLhmPg_%<|&e$|+t-qia+-Vd; z%vC3+n2h-Jvz9FZ^NKJX)lB{m)B>7^oGQ)FY&wEOBE-vzHx~zU^d{QNN`}eD@6Ez7 zev4FmN-eO}>flD7)lsrN)3O~?3&aDt9Eo1dO*xS|p45uW6z#74K`kgQB$NHv#_-7f zJ5sTnW3&`6@{?cIinJ?Kl4kr>UdXm;bMeytUmE8H{XFq5TuRxYC@t<#_M zDg5=;{HF-(=pgM#`%6#fqMWZOy$^L|T$qdTx=#&I3lPm7eWMm6Jv4s{)QV#LpDrYY ztGRxy6}7|3DPyw4arx5trX40pVf*=R_kd#mu~dyeg1c;1=$g%kj}N{(^?T5pWYd@fN;a8gA3)x zM(5Fys8`oj7vno!C)9%SD;G9b2O0FMnSva;8k*Ija>l;6DA$S`qM<891&LeM+}<6xlERMXl)b!Fs2_t;3B!YDJ@_ zpa1z<5y7f8s_36;ML%oVenl<#FVu<(8J}#{dgz~N+0JT3*wsuCAoUY!0Z=RQ*opRX z7S&pujcz2(i}ChyCm)reXcB%r=jE?*o+xj?QPg4$(6XJ9ii5k~l(EgsO~y7u46*?& zn~;a*sg})=@Z3#P#rSbEYQNI+kHz+=j%!6cIi;6qJkPXjp@bAy?-c2t)QSL7u{n;q z5kM-A#R;lD)3V_Z()S3xH_2WP3st_hrH0mFF`T2iQVM98K98V|DZ$?0i($v4VyPLG+?WNPIn8OIGMn^i(L2%Dg7OxZ z-lq$oOTnIK2tMVo%HD`)o_TQpWpj^RS8f8=3AI2*qAMrydhT`Uw!BEsn?F$t2C5s= z08(+C%ccJcsaV4I`U$ll7^oGAr9G8zQA(4``BSZE8LK3DWc=o)cljT+BE?h`fLbs* z`>)iB{vZ`^pVo?gpcb6eijdiMs$lOj?I}fnT`T$zPz&J1CO0(en*35)XHH4Q>kHN+ zeqpY=t-Duh><6oG6Qc3qWhF&^T$SrMrMz0kVBcLpql`e zq~b&BkTL}ERd4g+Z=_=0CzBYSg|(F8UtEkrZ0gC?LM(6LK(3 z1(zslmTzD4F9E0po<*%XzoHiWg_iAd_!Bo$%Y|cV!BxEFv_EUv_RmqKZRM97E`KEz ze_ty){A>*^o&2s=bgE_h;^hfY3y!sH0JWgwo0cs)h4oLQ;{KAO6H;;C%gy<|x8IYB z*^(TJY$ouvnf%u0ua&>>M}9HG2H))zkY0}gs0B>gIQ;?`Y4H&!q++}eoTt=+5ct8I zM8#eb#nEO7{95xHK+7fp-vda+I~^5A+Z}+G4X796StBxABPm!Tn^~itl8OhdF?OtB zcs78R4M)M|5};)Zv>_<8AsVzH-mxKNmRiQOB?q)@X13ypx*D%6sRnIt0$MgayW7lm z3;?Ov%#Jzmm{bhV2{?D`xbW+&{zVtw+6 zap<-KLgOnXGb_nK2TGYIDC8FE3XYEp%~Z@zv}`A}q6t~XV=bG)S5mPck5#S{&n)^8 z-D`YA0<>&W!AU3QKxb1*C)Yn}MW}RXTMqAmS`n&Yu9wRvT&vs$mq=7gTRhiTDpgG? zSd26FxSVV1;90FGo7pY*v{rPgWgB!W|5htfaIZJ}S}WSINH8O_tF~qQ;@+m<(QoE4 zNG0?n(1Z4xM^%;ws<&%WqC{k+N5zyhR(sh9(RKJA2fecEys&`(h~AMIwwU7ycjXTvY(M7!811=wGlaW<%6^iO<<`kfNKcrn16o`m>%vbY$@ z?qD%L!DTPPrx|+hLV<-8M69ol&Hco;f&Uu+b&wc7RsN*6c##~oIVJ%NNAAhRFkc3P zu4k6Me)5V$QfQbD@QHL-aP(YY28#Z?aSX&!K6p_+szWfUBJ5pfA$}fz5(I(g^RT?x zfSWG@4Dn^3G-0{m(P;lx{@ThihI(`UY@9kU`Uor2XY$1I?yDOP4SKZ0|i(C{{`9m&Fxl|Rs zOeV#A><>Z2grszmM;nF~^gV4Ix;URnTt*s}au*WC1*=q~Xi5spg*%{O!oU;wnE69j zrmlx4&p@8)mF#hmeb1 zVf*F=TU`E{$90eswgw2CLkdc}Pua(UwYM8d-2e#!fdD`O93XXY5!AE5wESV`i?K?MWFI&12p)mBog-n9t)VFMFI&E^uRjOUn%~A6gp5# zp?n$z6l8#AN-8NBM4BiCOD4Sz+mFOF7EZ#V!~%*v*32m@=B{Yeuq}0TIS7)nb#(k* z5~6itntBvoF`AMWl2T`M=7JIGUaAH`+Ks27<&_XLFA!BT+BMf`pq{g39qmjICsj;Z zHk7(^KV^@18_r*a0%e>#Pts|fA~9Vf zi6Ci+Hj$}Z5lWqDQgp~5$yA_sgeIBFRt&Cyqz+m{T@%i{`3brZoPH%FeU2IdDC59a z(L+d+0i4Js;lzD{94hJ@IJ^_WqLfaG{yZEtjguy=D>(7UIvP(Y;*MK18}R$@L)lz& z1`Bd%nX;wzvH@Ejnl;j$k!&IL908G>eb<~6)VwPLq$~JoDCoJH>gY#BSya>@!rM7) z!Wl1G^6-Qq^Vjn)%4Zh{r(D5|B2P(|BS@|;&fd(-Q1(J%rv|eZ=TQ-48cPS6p~v52 zE7H}2rdC3@46_hzq9>k4Nq1(oPZeEWEJ8I5_qKeo$eNcNk`9!jQt6O`N{R$%z|Q+n zEXk7Gl8gej%!H8_I{PJ$2}_X);^>hgI4mw?s05EPk0PYFPb9lk zsq}C!L%^~y+^xhNzL*sviLOOchA&Vw=azreiIJ9xhH72NTawYT4_#-gxRg>fyZ<7^ zQgB}ncxCdfk+M9?k_o-2LssNvP|>ckVI^BBhDtuPH8Yj8FmxZP>;;-2DBf^OYY>5y z7FQA{6j&`5EKpZpT`UG5CL_fe8^zgSmV#T5j5JB8W?~L0yWV_Axz0#2noA;GN-mr( zmv=vnw*(BpSJGCanb^x@Mrse0^Qc6t?&zTd4YlRTB0;(uNNFt?rAlqI@*!=SonsVM zW-c!ccw;x8dKhBbQg^GE6$i8yr$(YFS2js!fk}37Rr2<2{j4 zDjg(cv^n*lIi09wP=Fx*ph+nc93kqgW!NIU`aVhYg@7LHE=|cLRv7gYbhOeG1fh&( zeRRfymVU;Z>e2i-?zWpR+omnr-dMJEo;On6Z|fdyV<^aI7ipiOZNIIPv!If*nLb(1i6n=lAO$YuVVIT^{(ERBU~D(Dombir)+chW(&r3o$5; zRvnIi^KX!fRh3&CUUYn4D=Hfs9UB8Etz(my$3Jk4PXnalH{)|*;|pcuQOpC!q~gEO zvh^1bQlL#DsZBP&aKH?6KrWv=KR$_ZG?{8U3FDl?QJWGStH1QOq+&qJR_-K3szWcX z60Z2M!J(V^M9T)cRHpo(j}y?cy$k0br+a6if1vSR0K*t>d|HxtMq2zXT6(B}Mnn+V z^yR7X2XD2Q#{UbXVv)KT|M27nJT*i_Pbes7oVzE|%j&$O& z>e2v(v?W(xFfQ_z=qjao{=EFGJ_$K z!?Tz;4jX#>Ig|7A(#8VO)WUZA=Vd8$AtBCD;#L^_isgg0$@Xf9)#BPsLPVCO`a4uj zZ@<_JW3`mGBSIyP#IbrX<|5yU4Zg)9gN|RVP(XRUxRO3O+Pd1*QhgcjDZcu){d(0( zEAf{*Btp9w?Kh^@LrT^srq`2+J6LaRIOD9;En#txtcyIKYCj@RVU_4>{X#>CO=z_t zm_bl#$-zZ}%~!EGxUq?lfu)r(AsViDp=0gwL)cXKgcMYPIpT|((U;q|w%U3(7$0su zhPRn@ENr@C>p%w-+BM46vbt|zi(745d5Rd?f2nzm?M0H~K_a@jvdu!j<5wXPe2d1W zVmIG+ak72;IvM51_C*QkUa8i0c)GT#$ab=)NZ9AyeS(UtioG1@)@JHvf#>~-cdM*6 zE!7!?RMInL&xM=E_k1LhKhi-y&_Q@D4+?zui*MB)MaFgCJM4vHy@hw|4^8k#cPz5K z*r|sf#`t~))CdX{`?C_C10!}nPaGw0?5;u&)*cGSKZh?=U^zvsfylTfxop7~i1`8~ zr+6GMT;{aLlls8tdhv!@ZJ^Z0`|mDuyhXy7o)+|>5DVuElAaOvzoA-gkN;p+H2AK; zcx}*wPvYSmZ;p@%WacEJ`8|mFgL6M-*omsLQtW&lxR?AOh5GMF#Z^ayg0i30k`Y&j z!9)sQYefoQejpWBO#gq(-33>i*`ls(LMQ?S1VVt|?gS0)?gV#t*C4@3aCdiig1b|= zy9WqPaQ8ZuPWM{9*WUY#b>uta`wL~G#+=uCKf^cYCS&P5-mrKYmu6G>GMS?3f3PBg zXIeO%0-g>J@X=NLk;ct`Vnwc2Z7NrE|5_?;+Z<`V`Il0$EkQf|pQYkIs|6>v-ioWA_wE)73Sb*c-KFk}{$gr*XL8=98d9)vvU=AEU z{;n2)VVEbTC@&GH1&~FU!GD&D{kuy+Viftc|EXHQ<9GCtMNEW6Sy@$iNKWN&3J4>;I)xyi#?J)}ZxiT!c;AY2LU&`xh(vj_VoS zpyPhh%ckpjv;7ZNMBb?9`vZ8my4zx_@ z`3Z`Dv7$e#1sSiQGX9Nf!EaXde_k!1w=x*|&5HiDTA*!RME$YNY5q4WDr|FJw(aL} z`Kww0VMT%ep;`c8MZ9i*RSS6Cj~aee3p!r$dHkvtcwCH&@p=ALE#ULI+b!(ydic-P z0*nct->e8yEtvR%?577q#x4N-t6I<~@Y;Fe|4p?(dSGaxQIxfQGTin*vZAX-G2X90 zI8PV|ediDt#F&Z-6gDD8ZxR<}or;e1Bh69!ixnA>|2NeFb7qzb2rH7tq|*C~6>ST! zPNpVqL#hR&vjTa5e^d+Fwvmnhl@c18QD8B#5XkJi7k)ay!w>cW@{t!J<@=-RKbW>l$) z{GYNS>8kkJLJ?Yn^OXPBtmt~a1N`r?q75aY&_AmM2B?V;RwQa4qTKpNwLnGtDAbtS z5SuT~iKWjz;ty7oByml6_z~AKis)hC{}-%ircm^M#)@v5xyvt|D*btWvm#OF>i9M* z6Sn2QSkW^mX=%RCxxTK=+Qwyhc@5U3v6sijA#wSitY~@lB*3M0o5$8|e);=NpG*5y zo2}Q)@){WSb7#1f2KdXnmGxI*kX&55UBDl#=rf3n*FNMAR`j`#rQJT_zhFh}4haqa zN37_>mVWu)SrLz12Vo=Bl+AVQS`vg6J@kd*{x_^BjX2>KE2`Iw{v3ysan=L4-u!^1 zHmLecBT(;=a&nehw?=xN{Hjg04DUB9A|TPJ_i>9jiMjd~=y_;N@B_k%)@>R*kDWT) zzmJ1mE}-u`ML5^o|6oO8UgzlDJLtZP4yNZ9D90KH!_&_ixmxnMn+}`ye3A*E=R^; zMkmllCn2ned30J>=JxII%m^i|kxa3}Z~#9bAZT>Hc61pAA#(&?9W?qK!ir$VD%R6d z3DN$^iYR(ow;eyu#Rl%?l`O@L9pFlRuZ6IpkKGfaaq6Q-e`iI)d41{o$6lI(P4#cwx+zv`B`@qyc%b3drfBr={mZp+k>VJviY^UBj z&@8>LCDj_tn6aw*V|e1rm=LW)pib#g{fhHX>vSOH{n1~9BXqt>-hL?&t+V7e;h-18 z`Hrwy{g&2EuJ!(pvFUdsIyCrIT+!VsJj>`kxDp1ZAV?X;KI;w^o*__P>(4TbpNf~t zx%^|qA7vPBwO|~n)N>ilTIQP16fI>JW861k36$zuY2{*MyH>a$UW)R|De2ur+dib% z>C>Y{y(^c$2?vwJXu|xPucKGL$}rBtDw(tekbJUVt-d(|dc%_AymiA^)Jl1JnC;Ks zghOXx`sEwC+l{{w4zXwbsv_f0tn>y=4C=!+5!_8A8gokTMLP>(2NeWtdFOr~8`|$mJno)*r(Yeei0XG4i{J ze=o!Q*Mvhbo4w4BQaT%WxCLgNc-=7sSsH%$!gx zZ9?}UdEAPeIbCAZTthKsA*_J4G+D;R<|1Y7ket0uV$428F>MdAkaIZsqjSYY+KCkf z_o~FW>yl!|ZCD}i&t$Ny*YQOL_>hACNn+v)wo(=xQjs7+id+EQWfrnEr7)i4WUz)( za{ow?D4&q1x8G#08B8&cu;f%^3UeL>p1Gt{$W%hfO#XY%VrfIk>G&nI0=9JXkCq|R z83!|k+>kPiujEWRHhPg5o`pha$V>tCY_YUwiBhiQY`zA1iE6rqN@>V!g~e>C)>DaE zkK|l=3VNC86E&C>GB%ANnl@f*qLt4v-{@6S;T-={`$j{ibt%5WW7bmlCBi}%wn}9X zt(Cz=^Fk~2byb*unIVbP;-JR$xA@*eI{gG3~h!;UiR~RuZr|V z+#)K3!j3EQg{e<0QbxxDVwg_9w zq^4JG9*K;(m@4*E!Wc7zWthvjq)aD1*A|rr?URUYPbEvz#G+)i@TosFFWx%z(FdD#G{e{Qcm@jpagzmDq zp)D3kB5WBKzOIpn$3`ypVP)szP0?hVjZM3M+Vv)zzWqP@B9YQ!tiFbG(a3*|T z-*&(woqj=RU5BG+>_%?4^X1~+K#aWY!FhcaEcKYL{k@@2^{b(9PkduFdd0vOu9cWb z?k!R3zg-tnFW5wvc+%e?KOX+I0|Zrws3x*00W zGfD6k@1PlT4RL?|k=f9=$Ax@970G*<$Je&6IPNyn;&t_H-hIbZ);&R*_dH^p=hy}L z?)%#Jo90)%C*HD;>+irrb+YZ}@-YYHo9Tz+Vh_tl$Bzd>Yxh%`T-S>qpMJXYJ*>X+ z246PuJ?|&#KCDrIuSX*d7U>~nnDK$ra9Qx(vhM9IpV#xx4)DWIF!=G6&oP=egm7R~ zxmL})y?Q5xzm0sg?t@aKKsM`BsrseFG`ibpB?G;KG9(My@&JTyZy?`?k7g+ zC$ZosTI46U=O=#ar!e5B^x0n#(}A+lAAtFRp~h>E!b`7Fo8-#Jgxwc%xB4W9Y#tO~ z0{7t{(d&>RP#-hUKs<26G|-Jb&}AXeT`kb#HqaF_$PX@vbjM38DF_3G#d6X+0vz=5 zdL4l^$@fE$ZvuNT3#Csarcc_QcY0%R24+YWdq@hLQOM^I@*p4L#*mL>P__dBCP@L7 zNdd1ZLn|@AkR*kciGL+p2!)hkn)gDx;KEwi!~7ELi;}|bR6;W0g5$-5In{zEgMz0A z!g9>Q^A^IEK8G(Sg|FO(2Nj0>z!dNnLmv$c++_<=R}H8W_pRIuut^HA{v3*&q`kWr z=wB3ZpA_-P9`F2>-D+XvB41F%BkLja8=b(qtbh}^&>HY<0IGNx zyU3T^K!v_Wfu#7PXqcNRq#bxcbFs-$^xO145wM zX}m5L(2@Z`Lp_0$Jzni|yoGwarG%eNlb;nFX7xWK^RsINgu+3+cu zO;P#DNqOc`Igq7k^OTb0l-2ntKaNx#m6$72WDHl|92D4WeuT%U=+Y=a+g&PJvM+&o zDyeJQ5LL{;V%l(WTB>O3l&cx_V%!HO?fizMs#~AjEI>&o@+E^W2e>JqEek>>V8=0I zksD+6dVz-gKxuU)Uh{MZas{d4xXa+ov*OH0*UaZ)m1(Rjj=r#Z28~6ftQ**HHq5jV zy@c12$odmmn#J)#tgzyh04-M77@q|B9pthsfYm_SQ!Ts(VGcPko$?@!q9iAlJd2Lg zscg{#lESDX)PLp&*6Ag|ng?)j_-dd4TTwF7IP%Oef%^Oj!b1Vp4e*e3h_{k6q?N+i z9BBvzQ*IY|Bd)7%p`$jGualy)iwS_!Gtj(GsVI&raxEw|FEC#!DBmw&)Ud3+%W*sq zd0>mR^2t3lLMV$WEN8HJs~-JS39HVJFsqivqK2SO2nzzc21}Y`V;&$(`OC!K%R+?0 zqf+r6lVsV~YGN zmOEqv7;@8{r-wjWtkBL6Y+nLeq1rETgys;!3Z}%qX7`=62r%>kj4wo3vS%vw=6%E# z9XOExaGx30!a+)zwGuJJHKa}e6Jw+a zLST$KfzOhLB-^D=%^CL0v1UpLI~Jk@+ojC+J~PS))`rLsf^f>IaL5mY|0%XT1WXj< zxQ28|^zxZGs);G4Lnlo}CGw)MV7n`EV%hN_2K*->Sp zhkq*OBC;A`_SckvT0$U;tM6qL;9@;wUdFG!PU}>h)8hF7Au<-0KY|itBtD z0&!lH@vCb6gfwK}eP@AT?!^jO4IV9kE0h-{lE5J&gcOEG2x@VoDK_eC^hIcfUPmaw z$(Mj?z{k!HwI*j(^(uCxQY zY!p4X54#O9D2W|DwAKgWjPk76gG0d7utFt8wd-w_;-SWzdMhd4C~yE0ry07bP^ap| zdF%DNOF#uefN^)VbqhQ`O&K&KXHyCPh7izBjbZ@&M%MjWA0e&;8}PshtfGN}00()y z>|BOQ{A~n-&@#==ii@8i83@Jf7Lk;YH^;K`I2nfJ0Qm^=8W92{CaTF$^A+@}@+KNc zej@Or0G@_`niCDzdsPsygD(XOr&ukH0${$+=GSYf+;3ID?Nur(P)01Yx-ZbcEnHwJ z9D3*#jU$S@t#Q@J&0a3-(5St}D2f{ZDrqK!E+N-O0rchSG?M|+QqfOx^6H`T5CJ0Z zlXb0^eOfK8o7x!D+(ivWub(9a=pi&S)YQRc^<6GCOrtd#a(y%aHe}Nj#4Q&aW%U#v z)B_RK>QDPG+)CUL>g7>Hx8FVoNw_#(! z2`F4qNVur1bBvz>NS0*r%mB10EhjtghB_TLbL@%2DGyvt9E0AA7%0~QRnC0+} zpgan}8b+>ZCb0JO2lr`KcjbZQ5$;tUT9~)EcQx%A2(!z;xJMgt%LFOQ1iuu3k$QNS zdH>gxVD5yv5tw=+jX|$cX^&7SSdW$wBjm&s8Qs$1s8FcGb!m^5k|E(??FY5b!>^~% zhRE)<+8LTtCw$b7WERmuL1i+Fy$!Z)!<<$KS9%NeJ`K@n(vW^n%6b!Kvvfz9jDr+x zpfz%U%y6*#$WYiw#_D1gZ3qv~5+*1J`vt>3S1$r=+tg#JRZjlh=U8h@SPQ-OHh$#N zN?@x`aOD7S&SJS?PphN8ePg@nBu$$(12-N|u z!fd#x0$4Afk`_u@vdIVpg!H2H9gEF}6&C#)irFEL-e?sHF-q%; z>F?8kA8QZxjajH=Z7d3x438P;uUnCJN0Ry4w(#8fS{Gqp)Cf7OY)BWUWC1Nd?mg6p z3TX_D`INA^F{P~(;BfUwS0`d{lk_H2MG0D|booR>UexyaL8*~kKosr#HUGTd=p4i5 zfM#d)tQ4%<{bJhc&fwvW)%VYv-5Z!XyB%jEVpyXUqdtpG={1;X26|()Np0usK!Yq` zD|kI(p}F6#zI{I&3W*l-2G)BSA=jbgUqF6B-6o8QJ9G8KA`T~Cgu^gnjC%=df3ci^ z);ln&1wc(~n=y~DT@{mAh~jt_Gpi6&g%>lSiy8Vr8CGVzLs~Zuf})`n)nMq1AKPV@ znI5&7=6E`s!au?^<>0d3UC_ZWm~QSvNNRJN>3-0VSVkzVoS9CF{*=~l>{=&jIy>w) zJH@;iww*0bIBXCO12~X2PFFSH>=*{YwrLHdRsUIPCNDq2zZ8vbudm_x0 z9Uz}q)TJJ(R-`uAD{oE1)W=H>-&>ZnAheQtw~`|#t@55zd^@MqZKcyar=@pD0#73^ z9^<$hxRS7JsJc|4W@zuyEQ?Z)2~kHfiz7rfE$^Gh*0RTS?d&Z&RY!mSRSz4xDjkhK znruE_wu57qq)6BW@yutjUM>Hd!LypCpb$D@14xwf9B zyOHrt@0|`SoG{9~&PBcc5(jsaS&nXhqoh{!#j@1>W$q@p)o%e&%&XDpbn)07mnykoj5)m;n}gWoQ@# z?91$;X1RK^{^&i@9amE)`z);-GKa~s?+L+cJ`I^#XHzqeM*KPAPz_LwK!F(A+*-ou z7~xPJ?`IElNq##;n!qDs!syE2kpdWb4-PB1>W%(rB8d=TSA~3u1TyUcEBK4;p=3t$ zA&{$Lp-cvg=guMgAd5*_%k0$Yf1-t38-1)ous~zpt|zy#hbZUKr!Jw0T{*6$4|9 zN2wvgqso9xRJus#(QWc)`a}KYSdIGd4yA}s$EbYN!qiB*b{r|uvb8`Ap=XRr8enD` zn)Jn2M#Ow!%sTas9r=sd*lLRGr|&op1$5>+70| zfrSd8De2q ze=oz-jCYC$mxgy}oYg>vCw>u*<_d!uYO&I)B^fGqq5F**T1bQB?iSfBs=7E9g*+*T=J|Lrhj#;s&NkZA zY?@x>lwC$m9|mV5>xZpXQjF@3l;gZMFy`eM%)ilg zJt=q5alh!D*Ae+$hWRJqV4Y#)e4)o~5KQvvv%w(g!qA7~dd14@GH&Oq%?LKwMZ*XY z5?7;W`DeAwcp+Y_oft(E4wG2Zc5BWx=br#Jx6jGO334XU{_ot}#>!3eT~(A#60Hjs z+sXuM)WJ1JD%g=-yOk!8N)mP+;K5V|l!d_-Am3_dr zDK8}FI!ILxxZm!u%uu)MKxX4U>wHI_X5Wbu_-H=}pQ*Jo^r|7vVf4c;?x*oLE)Z;i z9;xLxA$9V2Ijqc_;fa3`j$K9F?Fa1)ot5`I%I16Y z;q7h*jMiSdM>V?{t|xZ@?}w9Kgl zZ!rAZxaZRwK4^@n&!!5BDJYHnAA&{MIH%Pe9b<9eMeW!)EHz%D2VoP-2Z4R__t$+C z-ULBy%B({SD1 zIpfPMV+Q{wbUlY~8sJy$gBT9ZMaH*IV;-x^g4H!EO0keKj4(DU!2qW*Yi#O7*y@K4 zjxpny>C|oEU5;6*F~{mp>64D8+#4L@c2hN}=Vhk6C+4zt$BLOxFhv|^`?6nQm1sl` z6&VAY{xLl9t_D6BGCbiZZ>I6Rp*=ih+|5R7Q;cS|{Wdx-m+Z()QoeaAwtgm$Ub$Gx z5U7|irBo13jQ>RUn{f0D@5v&GP-bJy7B$gqpu`Ue5sFGEzxA^KxRA`IDVr7x8XYL7 zhA3Cq%$8~ZELD1!W-DWy%5-@w)h8`f>QT>%-XI)kZvQ46zsfLx8bI}oV}Z9ZTJ;Q^ z0!zVUK_K8z20c`*1Cr7XHa-L!;^C+d3C>kNQfJX$xnb$*71X2xtj#ua0F%cGHG#pF z=E^j^g-A15Cy;UCyFt7nlMkur9tW1%G|LP1pX%F>Xsr;2mN%dq8oOtYY@?-CwqRWv z`mB%bGh4LwnC6>jdu>L{8kQym!yv;G-;5QO-!b|98lL#3iAv}bw6b3v<9{NZLD8n9 z>|A|PXX|m+vi5MT+VMPU>vQ*@3;n^dEudRX{k0Y55#gKceg8j)CzA9fWGn-gOJ)O# zhI*a{%9UAKRZvT3K_t9q0rIT|=naja_g+<@inxZ@fmdA^ybIxLMhG=ws*JpS_ECv& zlps>IKL`f^tSF+;JQXJsa2}hVHe_BtHIxiuqO2(!qUB1Cmw!Hw`&MSm^r>k?2frqH zHf)E^mt)k5wrR=Fgw=R07Xe-RE%PODC6*wd=`bSsm$n2TdNthK36Ru*C{OIO6#>QJ

bYJChD_N^N{Coc0XeV6SGZQJFx9w%ID;A@vo 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

~rg4N7LaL+|b&jq#T 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 bG59?p*cm`@jqUMfYFZid~hHVOB2W=l>Q^)b9Tq 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μsrk7!$9 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¨p%oPVidwJ6T=Tuf{YTwv!8gSWCw;y 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

f)~h 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%0AXh5d{t_B?Vb) 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

Z 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%0DF0ec5{XJgbveT(6UdnLS@ zFm|d!e{Qr%(13t@8_<#Qx#K9B(W@ZWS&}&SEp7wvmz#3a2y}wv_(f6jW4(YYq%!s^ z=wqFJFdoB|J4!2S9}{ecywL~LSIb= znF@#L7F?n_Ir-{~_{$=HWpUhwFO*tfk}h+??2_W^){a+K++QnCN}qwg_O&ooqc&IP zH@{WHc0tiR@|c;1#sx(vIBDba{`F&i3vKobj}$F{4PQcSbG-%&qscQbCM`_)E$^^c znCV~>BoaFf<{Q8Si72I|Gmsz&J7uneO^{GqIZRps2@(o%s~{jj0zKj3ZjAvUP!oS@ znuQ#nz+-+bIB9Ty=%t>&=H#bZ-k>9pJ$2R|!O%dn{5z1(=twMp2_mfZFDcUu- z+j$4tA^;F#DNs3S*A68=!Gr3^K%ey#J-H6G@5r|s05*Izj(y_CBuJ3dcj}>Ff<$4x z1A%}e5zWzWijEsS97)q0$#f02OgWO@J4#67M5*M&_0*Bd!-+P{iN4VZ^1*?T#(7T< z&kg}+HeKfpubkM^FdM#d#Lhf`E5w7FRp|{skRWLfaK`yqiCEu=0SS_GT*q`>B-30n za^FZ#xtvFB_{NK)e5_OZ&v}3wzV7WVYBa9u01*^EnDQC&VEse`Zupws@EHeOA>q5eruoiI`4Z6j5%w~T3iy%e z`CWbK3%Ekaly}ZH;#?v0#LE8E5Pv>@KUx5U^ipg?f*Zc>H(Y@Y-!WZ(cG|o2umF+T z0B+hq-d=KM!9YH}z*9E@_+f#2BLakxft;j)Cj^6zb9jpD1xY}HXg-K@pCpyEmJ&e* zeYoT)kB}BaQf4UyE9J+BhG!CrvQA0rsSXV|P7*q6HG&cK=BQZA|NtkkpgGtS@6aQ5~7R z^3ekjStZ)omc-~Wz1UIym`QX;2J&nO8B6GCH!c`QB4mfuiz7{sBWsGI-W9i%E?CQyP&JyMNK8>Pe(%sic0hNO|s=syDrZKRwmx z>xJvnsZMpNrVr?~RiKuohB}^5^rX$%olr-iw1O8<7yY!XRH%D;ninu>qkqA9IxRq7 z&s7K(@>Lh24~s~LMK!^CC}A;l>4plh1eJ7cH&}{iIxIaMuJSfxI=$s=dUli8E`ZJb_*s2E%xk4FroO>9?m5cNLmA?kvIhSZ5f+R7;^VSEIa2;SaCIVL?dFlTu*PrX;x(n6%0J zR$7JuAv6WT<#oa;B?je)hsqW3a+kp8V1gvd;e&96<;~14;JHY1U39M)kQQixbL}0k z7*nkrxApt1%GGaBIb+NJwYidDi{dcW$GY9Aa%1@=BY4%`;mWNH)sK!=QJ`EQO;J_U z8Pzw5tAR-y)zj7JNt>XkYGBev{&O`)ON|t34L3tA@A2B3^R_jBkM-oc8vcx0LE>6r zl#i9^VJ+ZeDj07}o1um3xp;Z!}wPGMn&} zp}{O#R`+UyrHrhhcY|$9gS}nstCqOwnTFYb;!jT-T)Z1UBsD-<8hvIP6KNa$jw6c9 z8iNcG+4+rO8HlJBgb@cKhM_6;79!zlQ)mz(#k&cX(IiCL1fOm45O2yp-fUymlyBHv zrhtox<8s$8ysq2>M6mO2LSGQ$?c)ib#nEv@rg&eYDfOv~4`Uv2F=aJSL0 zwO8hJOGfKJhWMx1){)~M$I9RKT>UtC+-fT0V;SYgnc0s7jBT8{9|_gkxZbyt__VQg zek5&e+d9`aCDBGM@@bb@8>P{wj`{-X%un>(J}zZ-6s@1$-Dr$FrN*LJPQ~5Mk!eAj z+0H%J&NJZ5%-C^6O?1Cn2S1}InNNpsYln!e!L{-o_52;8YMt#*JI?rYwkCE+wsy+S zb@EDdo)`IC{i^el(dY8KPQ}d6s;!^L_I*}k?8?0PSzWD*xw-w0PuKm-uG<^C9#*jL zo9kLH)}^KPB|Px+bDuAInP2R_bQ#Qj@jCUzM5MdTvdhe<+j8Egd-%&2Yi{1|=I+bP z-HswX7O%dzsO=Be?tx_X?0MJi<-`7Du4jU+Hz=mVT&*|Er#C`G$0xHl#)r>&t~WuG z&sF4WiqTi7(Zgt;uW+e(>=xTlR(P*I8p0_!3U_g^MZ*E{jWN?h}W{=un zidNL*z|Q{6!8x@J zH7aa;`OwGF6QW#4caMqh<`TFzCgD3KDR)scYfSba=c)NI`E8tMMZaA!{O;CryzgPS!7M= zoElMRne-7ws*Owp86(4dk&h#hQGXo>_=t@A$P%)9I_cVU%C=M9#?!F*y|G!-nX!8l z=cjW;XYvnby)&Lkt(h*$n%Pe=Q#LTrY7UL-mJO4ZGxXZ&JBIs{dxEN*k8LVsXM><&Lgwtr7GqLwx4J_VM@G( zQQZCfCo%Ia3?gRK7uv8|uCCfqLfIqi9+UpeJbOXh1jg#lIAv;Nk1o(h9%nTE4-#Po_o*K=QQSIZhvRD`>c=ZlvY={x2RkiHB!6xL-e&mpR3c)2U;?WH|$oM(HZ$% z?t9i(Z5G*fzA?*U_q90#qC?`_&$7ge?~oHebb6=4t@zWsu9+P=LvwfR+)3KM z@(-P5c+nYucDFGRuLQFNOM=8+htBHbEN-_F&h7IxbSBD)&P#ulIHMi} z|Bt=1?uzTrw{!%FLP8Q;k{}@@fe7yI?(VK3xCeK4cL*Nb3NPH<-QA_Ino~u7*4?*n z-!;>-X07R$aQ^wOb@pdJ&*q{u5#z$pDiPx$a6h6WCQL687ocdSln|m>E|CynK@9IF zM|@l=DIvl|B_$=JRVpQ;;!Y(kr;}bPtzgnjC8K1uTq>jDwCpFT>PcKCs}aaWEvFT! zRVJsC6MH15mziEBZ&1)otzcBXT&572Mo9Sb)+-1CBHU92o0b3cu<_kSxRlF;`X)>;4e8T?}k+P}@YPm zQSZ455jfZn@O3v6w($XF#He2xy!7Lcz$0K*o-S582q+^8{>tEsl#?iV->dKeWkeu@ z2Z<7!wRbARHqj{i-n;U3saI)5wg8)G{}W$#0kOM9)nWXeUnb)!U$5=NVZzzJCxa*T zq3-^_ox$T+G&R%zeFo3a@#*Wy?-@KhI4na5zKIr8l3M!HV#45qc-q*_tURoY_}5Le z8&B0QUpG91kL_y_|Bd2QVjM234sCvG-TLt3eh8f6pN5qYe`W9w z>CYZC*ImNOi0_4Z(a!3J)G1sr1W9k*je=90i+X^k3Ye8|A$t3{YaabAFe{HV@)0N_ zGQ27Vlm6kU+B+xr)A?%|@#3tN_5Vx;U!&nmH;KieSy7yD+NBd@RMGq0QZ(W2Pj5El z^FD;nlqne9YurEvkM#bC_4(s<{%X&GI}Ii2G~MgMKnCA~Q$FN+4Eq4W$=Bqgu2!QvOIlvpOrU}3J-E4V2mCT{Jd?i$TY%+A-I#iZPkQJS`9Qn2Ym>^T(SE-kOux z+Vx|q&77+XeT4|)nJYW3+xA@qw?h}sGwsh&Zi4VK;{7mJQCV$fT6bw{ciAZS16MbB zQf&ciTsBg4wK4a(V;xOv58XC4@hA^DX?MdLPZcSHBCV(NiMu7>>!ww`_tTTP)WdO1 z(-_msP1XyY+QZ|Am_?MAfQP5wFN!mY>N~AB8?{%&4aG@H={x4lyyBH~Lvgl!3b*#5 z^zhEU@pa37OvLo1An^fY-4#FvfA%4(!uM5+&#z51ulL2Wez@8<8N6Q)DOt^#-$Nw7 z0a+NuIaWd18s(3W;rDA3O_rpeHsFNIe z3qC8)7pP+s>5~3yR=(+8whIEw;Qijj4U9`R%f*jH$4|Vq>a2_xSdN>)N?3rl^90i* zkZ{DWU^yY*PFM#r`1bb&?QfPL39km@kM2uu*(9D;cff;t#9fn`qfOPq9-7xRQYk9w;LkW+anMh~Z77 zd;~K12~9%!)aP0$)G?{_RjC{;DU4)d6z8ez^l6+OYE<%R_uW%@tI`A~(gsPN6s)9? zzep2@Q=Fp~XPt~VHKU)#|su#xRKU9x0!{EMdA*mlRRYI2X zvw;l$Tqp>Dr2c$uaAl&9IIpEB=k7SKE^K#GNB@L$Xe9trTC zpZ^4W-SKK}&v9sP*%f-Y{ltcs5regLaUT|GJ})GKZ=zj=7LwWV5KaOCd^X|*))$;& zMd;#BYF}=W*kZ!u>s9Bv8*co~s_fi|{8xup1J6D_kfPkfV)OQBRYwp2cc zR-n36VhNVPt230j5SC~vaLL$}=>r)&4zpHKGD}}hz1VX5$#O^E zFD4h|3`FHF3Kbr96(3#8y(T&Asw)sqivfx==|x4z1-qNVjj#KoPj%&|p^5~YsuYH* z4fe{kckGcj8T>nPAaEo?sQSrJU7}Fkpk7s`z?KzT4FWt>vF{2ls|l>p*)X$b4@Dv##5#Iv{`+N zUQ!WGaT>k=zWwK7voUTfKyiLyYcXe}*RgN41-06P(2Nv6j*qrR+-`MIZ1b>hd!W|p z1@)t|0W$c@wxBpYNt|{jUbv^q@R?6syZ>Mt%-3z-?1bA9%+Zzx%*r!1#>REkaFQal4!}I;q5p!SCf)V!OHoIjX0+zAbhF zn`nWaU1A2^V_&+4>}gs+Fi%zNMb}&|^#I)09h=j=wnaS+f|U^s-vJ;e^)h4ciG8nO zPS4qt!NpYXwSDcuWv{G6?;WK+r0L>w`##0No(F)ZD(~m*Zi>#!J|?z4uuJ#z`2I`k ze(bAf_ow?Mn)+ZFyno(Pr2%e@e$twO_YQdk(*yj31HdL4CA22{jnW`fDlCI%%*&>j z9%LgNWMvxS^v|SG8lp@c0t`OVO6G) zIBILnD{>i!k=Loi`qLwE5zWR*H}o(k7J###-0$4g(!_jJdQPU7=O_O&)}ycgRjPsImT0zCNicYqa7w5 zHH~LaPvlRBzrL7|;(%rFWsk$N947BJO;k-!)*6K*UrnB{Pc|w|wHSp|I!v86!ZP?C zhroubscrVD0U(2S2yAzl-fx_mmLKReqv1IyrzJ@@hE2H0m29Ov#CdtSuPjV#PQx&{Jxx4ZcB?dq@$ z9+TPaVZwa(!W{1P{7YfyXZQ>C>hna73u|Iyq~xD)rgE;PqHts%{ z-9t%Kz75@DXWv6p*+)-QzVEcp)3}EXWblECPoevC?E9}(4s0%ql&gWg*0^J7k6)`Vt?S%x|%xVp9Pb{H*94^zJL3#AC%ePSV-qV9lJ`_icH)De2hLVWTa^_2z7nTOLEar&uOqHaFu3=oRgk(~zBZ5md_hB`rV zv(KV>2^{Jm2~Y?s@mUh;OLtUXK|x|pmhZ~5f;8~=~RW5gvVHtdvh+y69<-)6rK9;MYx;(dx%V8G0v6~D&{^)WB zwYHJqdP(K_rN!mSF5YC~_15gQJ;L=4D&7E)!8_4^P=;nZU!SSqZ2~_6|E3H+p4lB+ zYU7_~@ULltvF?>`|KkjvfcufOaYM8B|5gUiU1{R^M+WbSuXKJi>Yw#rWbn2p+tYuW z!BhA@EXikqW$>(bQ8_=dA!7J_sK14)`7dVhCE2w1)Y1yMac(krLsM@2KV|TopZSRY zK7;R!yS5V*ps2ga;LW&@9p3-b3?AY62dullGI*#M7a_YDEQ6;M=X>+F89bGw7>~Pm zCpX`38GKidIV^)e4tg&CrwksET2>9n;Kyi?sctg(aY+#iYWcs(;7#ffX%tOcKXgcb z>*b(^!sNOYRPJozI^AtKy#TH!L{Wo+MSese#<|dg+ncReG6;*Lxa2GBc{6`Z?uaAo_XbD^&&sbw~_` zg{>sjhQ+-|bUG!Y+SNwoqj%1YDpxbAjjMNC7))wTsW!91fGoF+TUa{s@J`1WjyQ{9s!y4vXs*q_wl@`F&`A+VX_#O(W$W*Rj~^EI;N9Z zb7F!~&SW)hwOV5}>x9f~J@5Hu#-hiUhuLPC_=SVbYN98z?RsWrt?gz(E3=)T)@ZHW zZXGI`)n4nHI{U+39u|k=QJp%6Q!$2X2gqusO6|&KD~r?B>1v%56pE~R3$cQJ=W*Y6 zWX>dga3m`db)Pe;n<@e^E!zX>K9?S!SwyM|Hk5#6s3RVN+C45>cC?5-w>O+>52Sb# z?&SBmQ@Fk2MaSg89_jO-0jr@{RB+&*^m!7r&!M{0az1ek^5WrCM+>juB%$v27IAyM zD38fSCcSU}r9>UQw1SJ=vfoz)K?AdSEbnDNzn@NS{L}slZtAjre-k$i++|uGdTygn z`nekT$6nO$clraJ5Hw#R(($sR4+ME`31B^~@32nts|E3w}>x- zEtER+!%$o zVh8juZ>vy*P#jxRT;G^S|G7Zp=4Qou@G<|FK;ut0s~c{_UK*+KB=C{#p6g54whHWK z_48BBpSTf(0QBFsRpNXpzO^;spYO>&Jxd16qiqRy(M&lR7+?R%JPI{@^;h%gCr0ke zls^kJ>|V4`!8c}q=SK4R7FdtGem9T81RCO;R-Tk;uYrwOZu)~iZ_GwX;=V>LY8M2! zku^QS-#2D~o7MOTpKv~~F*_y1p#JM-wbXT6AsV<@p;6kuN1;Ie+@*qjvoXs@)S>l@ z8=;Ww(vv@oG1DWVE^qHPwmpoUdz4Ar%GdKP=Ks#N%0DrW@(-n8zaYkA%odOA7|NhO z&Jy*{mdxZI&XzyUmhH}#F7Fu5w>{2LeVilP%0E&RbDXOylp{adF;Z4_ocGoLPunV+ z4vxvAwdcnL-~Std#_!uIw!qD*`IQQ=G5foD6vmBEiz@)!h>idt(BKw~HR8)Q`mb(Q zihlTCA9efZ|9NBfPv%izWA?yOtK^0ox!G2c3Nc<3P;u%mhjSxRRo++UkxHk--p0t6 zvv*+IDu8(uqib#uk(LzI7{-mLnYWYy8?(|*U%KYmm}ndEVB0E+eGfy=U^go=p5z5| zgL_qI&V{}@m+#01&i=xUP!oH({yWX19DdI=@3E#l?q0iRRM8*gA)4|gZ;e+$o-NSv zD4k}S;E3GzW#UT7kGpB>VzJmPVZz5*GDeAlsA)sF0T%Y8A2#J%kw*Z5hOMNKfzm|` zV?O%5d?%r;?IZb@$>e244PUmj7-H!``A5Z>O7W`5N#jF3mSzC}H^P8CIfGJeni6kl z8p}XCf^=Fr>VRV$89Tjq;$O8WWHJ_1J#$tjRCUF9YamRmWhfrTe{Hpk-?smc*dITuc#ek05=jASF>Yn)jo09V-;y% zv-@47ed?}=b-+~3p4V>M3~;mZ1J&#YA-B&Fia=a(YY(Dy+7`a_+IU>n947I!EpY@w zIz#b~Vp$wk2`GZ}vl9+eogC(cC@wlOYfs{!j5}&|7c+ykr+#%zd(V2$=RKKES~4$o zLkX(TFg7~h}V zvp{I0KcsOkFLuIgvqY_MrhVg#FKhmSmL3W776ztES<`n?Sqr=h7b;{I@-{OaTWA3$62uzk#!Bv(3fa4 z7qE6G272$jW*^4fUwFEy>YB>YdZ4YkY0H|aM0wnK<6$`VRqM>-X{-A;(r*T`p0`&$ ztVzF`R(M`|csR;_v%>V+%F>{wtGQef35 zj$7k$5ZNG)mcV;-x|faJV4SlOa5gq!C1Q2LwzlDSbd4#e@Yct4& z8Lfo!u4_|OhBN|T$w4AMy^ZuQi!hJYGPa47myWQF4s(!;TxyGS($lt~ixNYR^jO!{jgAu1 zj`X{)VSDvLOZUH zPraQkp0p)y#9O^7I-Zv#eu_?g7!v;q>Jh)-t=21-z`qi|MyEDknec);VMk7F5-X7@ zBjM<++O|#NBc#N0Z`IZD#Nzu&vJr`QY*jDil8~tr?`^1`R3;&EC!tiSAY&&VA16NN z*LZB3ypNcS&9CxoBKasi=_P#vA$_znmK(9WCP7Tfx>oXgdUdSxl$GY>&oRpHD8EQ)20y9_$QP&Cej45Q$=kx_~_Foo71Fyltg0E z2er}^^;MEcp*+V|7Cj3W~{&Ro%kngre zvHA(F*xC0iv(h>gVr;WZUu0#U%ZE*5&uV4=oRH6=&&hAjF58fQ9g{OooCE5RFFnu6 zatCf!@&)p_Bg;8$*zyhf@8hd-y*P6F_~onV^SaY>M;^#`%fEjUmFG&BHxnb*ik;u# zp0{KxH))$6g_ytLBR4#e57x@x)0bPPF9>bUKRK6Oj45a!2If^{kIxGN+zak(%I?bl ztX?j-*C~6u`lmP7PZR~&3+%#@^qxF%&s97m~!v zJc})A>L?nPDkArlA;l@SJ}#t$;>f?YE4D%`re~1(GFfa=TEu!0z>%ZKs8C{jT+F*E zOjDc0>$bp}ZxyRyLLQhfnw zp2@NVGQ-3N<;A6?=AE*JcI67kWwxDCdwOLK4`uXlDm=o=-EySt?J8ur%6u54EGH{m zwE%~Pls7}AIAS8TcBNsu9b4KHwECxk*_9f^l_?LUo}A~V$4dFdR`DNKtu~KRI6t0oy0gpEoF1f3WLO8Y^`Z$ZID#$&V~3IP952C&C#UP zf?eHP#JclNmBg63D_`+VoO)TrdIWp%OS^hvs=5cb;wO{!l3Mjow#4o;HoR=EM}H)K zH?Bd17(hqFUR*ZdxHr7E7eiHS6j*K`6%=~~YDDL1BsUbp!ENG9Z=_@t`(WSn6tRhZ zO7zWC6RTDeYpy8WqnAGz!1YZ{yncbHRbVY*uyC9x7j83hI#`lXl*PW82C-TGk*LH} z^Bt{b)%T)bKp#(nDm8G)72{fy~-!EFOLz~UF#0~6QPnKG2{X|TsTF)d~ zq+V%!zZA4lY&!-6H!DUFCs5n2W@`YbKG;vnhp~NUs4Zek*d?z0l|@@zmvH!H`?_0u zilT6kVh8SW`wvFpWKhQvXGgxEa4c>oW_m}-d*M9$&RK-cDv(g-ROd6T&U$;HO2)1+ zaA%93P;p!rDsfkrp-}T>SHD}=07$S-vHQVt*I1ljKd8HdvwJ32uoJfjDZP8iPjK44 zrw*ZK!%tvzs^_*=&z_;cI%97+xaY)PU@@-uYgaF|RPXg8fiv8`tfL-;?N;P%@mukI zKPdYi`SV{~_8k%RqCM^}R_G^M?!%1dL#pZDHN$n@{=X)AIu!%76 zK5u~VY5?1P;4}1!7f)$$WodxcXz)|b;0vxn=55}0ctZh}Jf0a>ni*J{UK8T*shL^ao>>7;?KyC4FwMSsK68S{yA(f5 zMl^f*nB(|rmSkw=PW~+7j?lHk+`H#<4-(kUrsvE{W}jTM-DjRB0?(lbupuPOKkbSfN07>nla@YcM z0_%JHrN>7LoXo7B9hX@0m(J}M1p}t&ua`217RAY@r1JSW9GCBCF3IP!@XahsqpToq zFR5S8*gsyuXSmAU7&Q>gP*DH{wY-^iQc&A8rJ2;C@RW=c}td`$^-ZkP&dHzznYYsr~%@wY04w z6SmsTHoKJBs;;+s2R8@snL3rX+rDg#p=?hY^9;>wcbRR^T{HAB?>u_Gy;A#KGhs)X zXlHAOVZ!)*^z{yz%g&K9Sy?dIH zdnir}_Xzg04tJjivfOdnFTA^tO~LSNcK=85-pjy!!U8T_m4m#)eNreLdfh?5&Vi^o zaI*@eCu2EGAUvRk9?(HKKi3_mN*pq?(0w2{S_$3fM5SkPI!d^E#7{v-JA1^1dOYaA zC9c9DsB-N2<%mKoSk{T2d-gay^hlM3PKM>g+Gq$>&bVgQzF7s*Ij&jr!$wsQ>KUOSW>4xiHs_NZ#@Vg3&Cd* zyEJ}@5HrHFI0{H23wsp7xlJ)7t$;en>6|b39E0*aSA-@5dakz!DXKd!HDSwlx-fZm zQH4sKHG5I|1yWBzQ^|6v-*nLer7B6hZ0NltuHEU`T@}N>x_xvp)Jxy!bXAOcH32O+ zOzIe&reN(PxE>R^MwGlSF zV14?XSd#ztW@R)jP4w&~c|)biKj20PxZ`B^)mvB+ssAB2QZiDJzMO#nkGK)L1&Nue zzvD(YglJ$lt3PuiPnl2f|HO^ho~#Phnf#R-d2PqAO#$ade!E#IZdN*PsQ=|=HF($L zFWgAU17>8gKe&-J(|YKgwV&L7;zqC(OaX4>_nQ?{$3EX5+{kSyPNCm#R>gw7#(o2W zzjGr!aXxOMzjGs@-INyyl%i~KZUk$o2-?H(iyNU7U+4?_og2Z+WCSQx+xDg`(8RMIq6|q$h zc_;j4rBy!d8f9^Fvzk%JDZRN_&GOV7)2KQllT^%6cv8`-xnlq~EBtwjUpK4Ey;Ati zs$y~T)(I_ev$`HY51BkV(!9A@y>LC#y17~LF+8q~h25+YooerECf(eu9D#!%{AT48 z0MW~W->h6dmC+jjH>(My){7J_m)6UXI<=79D3=)<;AZ7$)0+d_ zthU849D$n^a^2oi6YOTSn{j0iyIE~cPkORALh^PT9WQoUotE|wVK*xp;aMmGE$bbU zEn7rR)jKbE3(h~lZdOSpCm8UXRm+1p_|2+n1L^?3S^daH3V_|Lk`qXx*wM@S+)X>? z9%|8YV7sh;r-I$A#?sJs`aD?>Ui(U8a=u3I_ag9_e+s)<;jg(0xv4)-=S{*F?)Q-a zr&xGI!EaW5dfvsFnQ=l`U70=FXA0n@Gw)aDLQRw zz;0G$CBZ?SoSLs~KJ#!<4+IC6@ZrCrRV_C zC2+IKYI~DE5MGd*_C}3PK;FkRtQ5FewR-U@oeV_Ef|p=7tG6Ano7KuglW5>(73vN$ z*QQLbY>*Znj2VS8CVwgfZdM&8(bEVzw5!NMrV)d28xL3LhAVpx^g@A~)tkLqED_t0 zVymSR9p>ZpD*YYcX4MtXaGPG#1=~0QkxQ2y)lJ>~ge|fQ19pI$RcREf zGreTWia`b!m%jL_yF@zmaMq&ux5mvGq0HXWld6`#s~1sP;BMs1 zjH56yBFz$1YGiCtoj9~JQeL+mVBpN4xS+06*34!6Eu2GsnR>KxVtv~zondru zRvj%;_RaH*ULGNkx+YpwGlhpKI~uMA_Gr{Alrqx*Ha~T|(~2hY6Vo8#OSM-Rbgi`1 z-$M4Gor^^!9PJ`4WI@S{%U3;79Wv4%LkdC5d!NVOZ!Ld|G9uIZ6d7H`No^Jb$h{T(54%OluMVHB_wugGo3<8zMhyR2?^-1VZ;>cQk$o&=IU~*VD$NWn5*B% z)8i*V?+tIE)P}_A3AY~i$0Hppyus5K_k7Wx&P}C36R$7*?szcIqf~+i&p^H!JE*kf zSWPD0Kza0NxCY5mPzTRYJ@sg)xoi zl26xJ zyA*kwN5Rx`{v$}I)=o=E@6^gyK}ffS@L|C2)M}O=q}M&6IRoF1Mc8F4iQ;Hk7Ms6rY1)f^wxLHI@s@fteG8uFGu;C;HJ{=*($K z_0g_-9cTb`_AI3HYCn9pVuoTCvT#ADkjQei@gnhjv_RpYu+HH~YwUaqxo*OR!12Ij z=VF=1X{;pC@x(O`vh7(ntV!T>jFZ0?5euA4E1*; z>!aoB5Y1U*)|ya04DE2F6kYfguLg(7pQzjjtKepHVgv#bM$}Hj;qQ z3CtTw!RW8T8p+8uzn?W_@sr zTvv+`7_76@Vgd@)LufSxJ<%j;HG7Vx%-L#T_`yW8)vD{oQ@2)|p%8<#Ry((+7T{I~ zMO4+LR;M^rQ-n5WO;j_YHdpWy2hKM4B@`#kHqR{-XSX)*Tok*sHmEP<6L)Z%|9ceA zrM5sx6mNv~U`iBMqV`ZjRDaI)@Z86Nn(dJ#kAvOXqs<@trnSfV@x~4D-7)2Jy$_D3 zq=`o8NKQi^Ho(#%?1-0WPt)vZUu(~B>u7({@guDR{Ifk9%s>0}O=x>ZKG;9=sN*Ms zU)J-^qNRtSl$|Al{^^pPWs(nnns-(RJ}e6Bta{{|Q_=~_eN;BoS)2Qy;;6G8{GjT2 zS7X|P63Q;{qer!pT`kWa)SGv;J$ld>*4057Nk7lhIn-4%)zwq-sO_k$&+UH4^X>u7 z`(VoMA>5C{nnK`P-6L+@fiJtq(u9^88YjTrHL6`xOWhvU-7^TnDxOi@b40@KtlbNo zJ<(&`OPW2in!+o%J*$s|L18@`n%>JL!c*owTL?XCOFc7;J-g3ENU?ekIDM$U@*GNv zw6^^`HW!I|iP&Y|3t76qmDW2j6n!xy5*5TLe((GDTmRvN|FiZQp}&#!BO`kwJGX3O zBj;xelx#D%WJG^6uVN*8Gaq!au~|@$^ls}X7~Np2u#F^VtEh{5bE~+I`~Q!%*EciC zEPva%(2@C>{lEyn zKHM+AT%EABS4bJZcnH7=6Pw5<|8jMv>ll0S$pM^j%J|Y(LAfW&3%^{Q-mjHlu1**y z?EOmRGvMkh@%@y_*R2n9F8)Vrum2uS_$Y(+4^CJZf+*?<>sAf6_rN+AkMneSZaNpi*mw2eu1-t!(;vP}$^w%_P}8#i!qpkf@DeNN??+31 zb9J6p&rx+6H36Lq_}VK)qI!<<&;ww!1aItSw8SbMHd-?K_oF2lO23bm2xsaO3aS~v zMoXwAe;+L&U%MGC84Gt~EcBs+jh4t#QYaVt(JgghO-30l))WR3uC*yE?R~s!JKA#N>NJW*(eRu+Tq&>DcxG&cdO4TXK+}i; zaKaK<(?^yS;7^3Rih#Q^PK>sNre{B(_ud>j0D%)o?0E%VF1bScZ(N-M_khlYjVc-Q zlhDq~m2YBzs}taa53xt7PAmHs#SfBkYCh1zT%A4UYp~7*^26?CyyI*g;&tiXs*&<* z>>%X$O;u0+exP%at_pN6fVEe=!=uvbnl}+AED+HzeV##foT$+6uHpAb!@aaD5Q6xH_+o?&&eG zee*kS;;22&e8aS*BXZGhSF>AMZa-%hXfu8YxH>bdH(YnmMxV`|qz4@DNA}v6&noY9 zV_fc}vRKc;T%EI!z2ZcxMYGx6kyQ+6a2>!2$L>SoXjsNF3mjM9K(8L)I9;rYIK4Bj zyVg2oz8=KCzPfNSx<&HjF$toy%)^Inj?h*oDrDRHQBJ!&hL16wZ5B(vxz1)S;+Lbm+n>fmq z+0zA$&6zREgc{S0Q`Sum$(7sdTM&jGAEp_{n42i3J71Zrc*QqnS$DisH`xkzMOqEs zF?Tc?S5+@ld0G!`YmcYg?z*(5G8G>8WIT*9J-_LysL*p2S6X@BGw-$)uaq_6 z^-PjDS)c3*pI|NTTvCqQOq@bl!ss)f`UsygOgh#eUl8fL(LKU&k7vJP}c5A1Dta1L90#LOTc_qK$zSLL?V*`$aHGmg}P*L2uvc5W+d( z{h{E`S=uk%)JNZdqIY#)|t9bNqKaNG#M31>03R>rTT$IaYV8G~Xa zEXgHQ5yr1XD-TB}EKwzF0j|z0`f04hNyLOBh|&(66OM9CxNKM2gd~oJC*F}yLei%_ zv`OmIN_@btgfIbfby_YaqG2oDmQU_FPQt88#?`03Kat$nob*y(5t}}R#5P5mBbk(5 z5u+-lRtoOw)Tbn%Pc0=*p_ca!i%w;v*L{>FK{k zrGLwolb6p7AI`9@%Cw&#*O|x+NYD6ACTC0k!^8H+G<&AkxvUkm>W7cij{xkfkcszB z^jWUNKO$^pgM8i}L}n%UWcr+ExexzHc_15W`#xSC;Dpn|tFmp~v+_4&GO=Nta4K4M zS(Qv$OwMFQDhOD6wf&HXooj@c1ICsqwuOzBxVhwXZAe$2=jw&$4ghPf{BN3U^VGF+ zC-kL<;GD4LLhb^+biaJQ@^Ri8;Oad8>RTSUZ7VZ{U7(Pj54bwd_=%Qc3S=$vFX^RD z09Pl&Ps)%ygh|Om+n=H@empFjPrhcjtJCfkQgtCm_)mNTNlcug z5UN5V2H~f6MVwNFWD0?`WF%taMW1nU@feC}p@>D))e?lU#S&UYjGLlwFN*1!i`WGu z7ywsiY{|S>G5@AG?PSR(ixN?WQptzLv6)XK%+V~G`K1hi`)=u5;!;(HGEE#@L4`8H z;}Ts1arNpl3IN{)@C0;pV zR@D{Hq$=QRuV%X)A)yZ?TUATw7Sa|RE1OA+bP-( zxH|1>2tI+vCWTw7Yj!1TW}pDDC}5M!P#cI-v!Wn27hAj4SvxUVOIjT=@UZTxr1lnj z`B7{g_d4j@PB?9{ju}z}xH=JVpYJNvOTDeTXIOOyRF865|EZzwNtY0`lkkk8fpVfA zb4wdz>nR?nfzz!1B}j0Zp|M}HZp``_fnnqOI6t(h7oSEN{k>~HKdKp)ZlaBALV49l zewbyjAwlLgwcl-7>qV|}n_JEGI1V5fY+zxwi zd)k!PJNu4ijrMHCj_9e5a?OsPjGg94%oTS!N56}-!*3M*b3^7*X#ydoews;7UH=26?>F`U<1^1 zn$^7(*E4_*K@MPxf<6i$=Q2(+1tC`b8EVHpRvz*sTV1}ugbgk!4=2F zR3DF9-xH?(CdJz44tT2IGXGJX0h7Os(60^P&8&RA_Q1zq-6C8uzos*BT(wm;(W_m(@LzUBVY0zrbGtTDQC>-CgtyqRKEIm(+AJv!+Lo6fEqpc&fo>&*zQhmFSA1ZqEf^PAc!L1!z?#?0nVO-b$cZttF+s-Z{eO zo>kt}NZmTyNmc+{o%s%f*SookJ9lPxu9Wxg6}ZJF>BQqe>O=X! zFZ{E|^n*a>;zU+lLwfp9bC!lR@#K}?u_5%ty5;yQ^s@@f=_kSy%fwS5@#S03k8N4z zzh9pkxSpcT2e>$$c@v*{nS8dWJ0s;d3m|~l_?(1L%sQ(;)bB!~>L7mUXK}Ni{Gkwn zR7i@-xq$jff)FGlaW}H=T#n;BpWvdv_Nb^}A4TQj@_GT_gtfEIK?PI>&q(HRWaYi1T-H6v7<;Ltam;2>T9YrSr^s4dt$O+1-e|-l1vi`4e!X><9-+4m_+5RW4&VPXu{=?NN z^ni#9sX*z^uFhYb3%IM(hA>OW?t{QTa&^*wd&2Ab;*$)Hq>$aL`s!b4Yl*4NaUt-fyy-m zWu|y`ZVQVIbFDn%qfh=%Nn50rObeL0SKJ9+1cv0y z-^1gd8Dn+cL7c~GISKi39pWw-vT-p=rB$g*11U9fp;!mmUi59 zE^5(kIv19GP*(zg6HZlUc?#o%r=CGYD}c_$6Co^fwMVed1&k9`RK9Bp=Y$QjVq##N z@N4>e9$bHL!cPe2pQY1sk?HfeOMwAS*z4znh3O3^40J9cKDqP9Mqv#DoG`n#ixG?y zUW+88*0nPO1Dr6>xj5N(6FY)+F4~Z@$h_Qu&czGwP#tG{M z(bx( z;DlMM1+-wCup7|1&?~v=T%;wwhjlK>0;4TVd1#vH08V%?Zgng8V?V$NAM8YJ1Dvqh zsZjMT;e=B#(76CO;n$flR{$scFjEM|30tQA!3lE((!Zh?^FiN^e*ttZY$8Pce{sTG zw&Wtora?y(78Y~RApI}YCs?PNrb(r_M%$$(SCSgpgXK{!5|ma5MC7N zFo<_*BhzI$QhZ>#rNhM_KLB(tCSJoj7Zb}wu+Bx^S9YLtq0CoY+6;6qd`p6(%**Q# z$qi|76c^CTzZ6peor`M473y-1EDK}vbO8oXt~t=TAm5gkOhV8ct)4|Rv34?$+m9Fp zNn!2S3|G%&yo{{bbq6{Z4700e(l$rUCXQ+g@>eILb#F{}oe&vS?*N^P_pe}`3svF# zquNIvKV9zPsyzTY7Z}PE=AS_Gkb}r30>@o9Hb!+cndLHKZd2}Oaq8$QG&LVQ3eCA- zor|#+n%Zm+Q;^1#ZB#3Z$F^V70_sbQ@irdrqL(tzI873blV%~0&sy%dT4XZg9Wufh z0YK-X_B^UnC4V!lfl>Q&={PBB9irw*E z#_+>LL?&H!jB_UepmQO%q0L1jpXO|7o<_{1$6q~I8{Ps8jI|92T2&GAIsfX+qI5YV~s=hFc?7qduK6$Dy_rjd3*9n@A;S7SyN<#ut6mR6uE z86%rf1^@9ft6Gim=JU15StycqeL1Hw)EQ&SdyU$&(a!f!DHerGv#sS z@f`f2cK^+%xJ81x!WK5>gPM%!K_Z^YPk3?PB2?mL-xP$kiD>jjj83i4u)JwDtvy6g zk6UG-NNP3XHcP^oUgOCmZV0YDGR%)#7ukh$5k~+lnM-VE|exO*QM%gM+RjN z@;sUPkMQj#kUt!kwmR%s6wLO)Iv3#<=ezDsC6hqsqLs(dR3*`VMaS@@+q1UWhrnS& zX7)UA`|7w<t@Yshl9x3%SQRy<~3W#5thWOT^*UTc^0ShQE2*jxzly^ zu!GwrI~3}Pk#)EJHc|bZrR<|G^$3*crxNu@2ddi@m#ki?ZMM{*MYMh=PJj zTOc7}pmYdBmr6)u015&I-O}CN(%s!P)G+i=!w}LX-8J`T#%o=dYwh)2d++0Wulv|P z>_0&dIpjRwuk-l`e;!azSWJ3cR8N$A?XZlLBPyMbt+-EO#TQAv9;m2G;N&}~xb2luN2nx6 zpvEJQ->>Sw1k8V1efxg}%zs(m{$ByJ>3?j=Aa{St=O0Q2?{g1+FBv2)%P*#<4UW5R!|Zwo8xe*f*N{s>~7 zK-59n^q&Zr9YNnP0_N3!EnpUCr165QdU+BfA=KCKF98!=)rAex|0o&EK==P%z@()2 zJr4v-2Fdm{lEOdh+n{8i5UfM@OcM4ImP(WQxB50H8H9v05EJt_FnDQ9|Gnfm^7Yh*ttKN#KDvda`irv!e8q*mo<=F zS9Co0;Kv0_ecNx|36u;j+i(T zX)efM1kBVMOt(%JB-{@Xo8WWO7o7$>)RjHapuYWH_M?F>PhTpysy8JqX&zPbM%(XX zf|9{oDqiI>ww)yZPQ%6R%8?#DzkGK7l@IFRs_v#(SjM_&XhX%-eOg*>L24-X$_9H? zpMd_<09W;V0?z9BoGAU)sPTOuV5T8fb=Qt25&}8v&&Nf6<&B!W00hkUh_x5&$3KFu za6uXT$ZfQvu=Qy+?|i#q(tSL~ z)m>36*=ZDeq`~qKUD1>E_G>gT_yfux8mQ%Nr;5`r$oW@3H(=YzR6kh?e#0|Zwo00A zaqbU*j!@lmCt<*H$1qE$$ zI7Yy1!{pznoN8vucsIHL|4z$xzDv>2T9*h!nlAQo)+2=3^^*SbLy+Q()Ua z?r2fHPK~Sf^mcrnU5a$wk=i?Z^ci1bjDR_cBBrs&d-+;2CLYwl>N>L6(TAfBLyNC8 zch}^r_O~2nX0QTgM3}?brzFeb-^!*P2tB@RV+Bl8y>C~`zYwW765jYmUhe39+n(A| zm2BUU#KQ5;{wLyclFy2m`Znac6N|)WI`HLIs^cRdV1CeHvvfYV?#$z1%rNXMMDD^7 z<}6%p%%|cqEaogx4(i))Aj2*ToFroBUAK3g6+wM_Ut2!Hwb$H5WB;SnzAF$gXG>gl zR1CE&-HP;F4Tixq{ZzUmxqglnyrdQXDa!7U#x)n zRmm%t>wP-8_s2O;OnsYCIX}YN=&5(f3#+$he5x6rXO&YoaQd`G_~;dT!z}e`hkdm5 zyxSA-dO&?UT@-HV`)1b%8KK)e>}$v6HR+)=!sVv{N(K_TeGz^Mj6N$W3bXruuiX4L z_jM*z{P!dLDX#e+lIv~{`%9MkVFb*`=f^4m(z~E!ptDyVaQPtM&@_NVRfmu}kpCW5 zz|4@lS`jFy97wDB?h^K@K8gsu7y0g1WDvVsAj?6}g9;f&ir|N(K^)v~@BXT9mvRL2 zS-pLF5KJ)_gb^@DBn7NOgDu!xVy;h+J zI}Qy70_Fz-vDcAdCr`o*546+|!oG5cOBaWkTD_~B4zti_ljV5*t<)j;U6_sJgXNMp zPw;VV4v1abJ<0HS&AB5MzG|WK@g#-tx$q)VlEMSH*}U5A)dO(STq6@n!=n$_gBDeF zgx(~oMp563^x}RU)yD1L9yQe$nR!55*ArQKz!N1IJ@z$nWiP6#BC7BpR?aW}-`elo?vGI)vz;*pJU&-JijH~jX1-@z9ab^_b`sY z>vfN0Je(;3s>;20@O}7v>}W;&$g6~)b8+N^tmly534bK`2FKk-vK?AQuC{-_7nL}U z7efZKze*YN_%PAiB;f&bA`5fmEI};HGs*89s4cT>Qp9v*M0ZNY#X5f%&1Bn&Ocu0` zzI>Q`WTxGlk?f@^B7DfjV~`@2nQ#~xJwfpOHIlu4Bu=t2`8;9ho_Xr=RN_ael+VoC zGEu2QQY4x%E^W26_D3<#)U;1WQqMkgwdY}n1f`z~OfLn0H-5-;UrL+;Zf-g2^zCcu zcm^5fY9#zoDKB`U1{RH@GPO_#8Ik&_NlWbd$OxOI6l3cz8I%ulD6?jsWNA@mo{D7| zd1h8dX@?@S>M66U`qLUK)gWrwb&2U-2Jv|Y>1{~1(EV)mlZ*(F?7pS@O!qQyujHhu zr4LE5cQE6@tTP+TzfK&o)x9PjA;h^VlrvAM*+Gbdb1N4~8BxCUdF_yGiJ4>*mb+@e z-5QlwdNuDvDzD>^n~^ym5tO@(%v<3hL1pF-Hj7`rpNCJyGss*}(wBd2GlB(yitLL9bXK_=2FhF76nde0(ltttnSv0Kh6RWkmv_}Zun zClz-cb7@;&@#QMKt37#ci$du-Sq97WbjzyAllf=gT+FF2EA6=)=vDkJxWw!u^QEKL zl0A9f^oVnC%9jqyBS{OHpOv|e(r;A0(ZMM>(^KYWK)h&Oaub;y+EK_yrR{J(<8sG) zqUDM>-pX1tN&EXGFQ4ao6INcg&YN1S)Voq()L3+8y{!JI>atDgnfj`P<($eY)(%*C z{eAtS`*|7qRX87G=AxEY^97}cwxzS(&-1S0 zcA=_`Ypg^bmZM7WaPsleaSPvEtm}Q03!^MYNmYk1R~|>RUa6||j;g^sR(GMRvs*6j zlg=owsvme;oprH#dzm{(x*=h+j)AHIkyS`d&AO=8IL+G_Gf;npD4*1)(WbnPjZa;Q z3Ow02v2WErJyxcQX)+8g<+F`tIBrsLZW7K`=GB0{f6^pjsKa#)YAjqKear!&Zq_w} zDrS4%wry6cZl-(OtZ}TQeB7*&0)4B|qG!vlW!s{9t;N7lNdVRInYwi;sO2l4k|97a zMO!REecOlC6xAwg*7_}5@e>d*ZQD9FLCL^Y(W$x(lG5r&-5wNkACwH94S4jLOU8|UKVJ;K?%Y5DxCUFH4G&WJ%-aZcl2p=4#Mf-ww+YhI*~pvT2Y;o)Lrsl za=4w&!6;OA!xdDqCl+K z#~9nUex;9DR{q9V-#WAxTi^ak!=l;0y4}as8K_#_FL2Vo^QB+NSB{4tF++zDFr`kY zgliB}iU_%%vJ5l>ikbsOy$Iz_+2^qX!!8JolY!TlC{<_%2a5-ESY;LL1`TQkLmmzq zUXs;28HCRaeAOH>ry)1C8)_pPvSyV5_3dvo!)Ad)PM2hCHHRx9Lmt40zGO;fL^o?l z5;!*O0{F{I(hhbbQ8gpV&xT`8q{2={GLwfBjowYEAls)$CKCzLjhGWoSm_6m--AXl z^=)6$OuNzeZDeJRWOC;Nrs2`XG1CfuRIO}Zi?4ifEJ`A@7fvJIe1Zywf|7wmo#vSG z0Cc!hw6|ug3+;{?KauO88K2P{f4M(A$10DA9d|GtTR9nT85>*wDZb1xbNS~Fr0Onv*B?2L>SMErE-S@P7&%SvgQvn$h}zD*T8_Vh*VEMM{rsBizw zp4F)p(YBxCgv=U@&kY#P85@h})6TQe&6(QIHxtcUjtiUA&ND&h>}eOWv*(@sgzdBz z?x1z%J!%)?WEK!_r+sSgxYI7u;4Xy3Sq9iIGE6N*bv+9nUnEan_%5(y17A$mdKPcL zM683UZ@)EM%3T%8pj{@UTPn6+RwP<3j}t1YU7kKaQ%k#2n7!O6Csd=gf}^wCR=Ywb zvjRUAY&~5$YFg^k`kA!6GMFpa8~1ZJX$5uq^QHICNiD%qfz=HWOnv+8{ne$*g4(oY zKiLGwY1anB7PoWnuGp_FE36*+2`r4SwS@KH$lnDegSnHt^uo7<`xTa5R%@%y&KKJh(`-eowuK(d4+(0c{5nv zVW;Nqj#_*;|JcrJ;w06ZyX8$gI@-KSK)_rJcvrVu^lsO9EkgU|o@rgAk@jBhxjoA| z9(_>X7WA_~?=29FJ826`Ywvq}@^y^gPm`;!3@F;z4?Va5xdZa560K)sC(^Iqp9gzj?}; zelpd~*{^--@a|-x?vzU6bj5*l9(`(k?sQWdO|o!WGSON2o`u4A@dcv`y%pWC#v=bI( zgFgh!>)DbN%TGal8(h^*e$}@@$sjBOuUGR|eOtR^SL;`Odk+zs;Q&eonELh~B?I>( zr@c47>f0L~dv8H~8(h`Bj|R*9#W7cPdHh1!5bRZ*-tTWEgEZJ5_3d~O!t%cOUnK*# zm7Bjx2IqVa^doHpG4<^{{HK3h)$=Z?F64<*z614bOvwOS-_G#iLh6wTM#tnDeE+HABkpbbVl{;Y3Lyf?GipHHhh z^=>M|)VJ$ySf66++rO^rKLaPuTq_sC*Ymyg_9Ldg-S9Hj-{}VQH9n@kjk&6yxjG&% zfT?ej$n8G{_3iRTx&wbu-~QvO9$-dLjHz!oT}%i7C4;vlJMW&|1|@?(>f3fd0ziHH zEm`Qa2$M1>8R+<4EcmOwoihV@7zXOw@Qc@e)wl0MOn=q4LCL_P`Vz$k_Nq>AfW4|q zcz^g+GPnln+fTpJS(}2Zx~I619H?*O-lcw6At`4L>f5;Vmu_Q91}{BAu_Xgx5zJNH zMVCdFyJOxpU$q#N47h)l4A%QGB?Gu>rVpmR-7AJE8IamwO9qQozpm=P>f7&FgF$^e zZQ(n%zWt@)ullya<{a-Vw|pshgxiCr^=C%@S>J9amB(Dw9~EJ*>fQ;#*!ng-xT?3f ze#czZ4??k5^%>;6xG2xdAW+|Cuxk^=lniLSlUPB0dqXsXqaBe-ONx>;t5kS9AR5Iy ztN+{;nGt>&T-E6nB?2oIQ^8eTp8xLi1RkZ#+KhB1a8+-W=-1RA09W;oD$OvV48MWw z_m}#VdcjpaQ6j_0^`pit&#OwO+-%HMojw_RRS%xdtUu*ZX#`hwccoO;X;)A(7!HL+il~tRC>ac%%`D1sH8Q+%S8Zf)u=H!j ziji5B`uOf(*n#EAG_9^X96{cix^i~Fx43hVr ze0FlE(#GRdDOof7>_X4?hS2$X!?l(N`V=v5E_3eIVM+#~d~Y+gBA^UUSKMAyzbzNW zmJED!sb7$G54U_!+VC|a8X#U9ZWYA;8W5=Z?)Hty3~o>|c!OSgOV2sdF7NjBj;CR~ zHe>|0E3z3{!q-dtX{19N-z3793zQ5F5>!FSV540JlngpQxfPvlr+&}VLE357vh}no z=Don)NVkK)c+468g^%MS@6X;gO?)=p-;}S~>+e<^8}gJyOdQ#_aAiB?iLbQCCuIM3 z)K(hisvds$A@ZqNCijTGQrTgEpE>rbuEt3;P|{*{OBIw1iXI|B$speqd_FSU--(#=p;eFt$ zKFj~f8hv4Gr^Nz)B=(d2#RsSpa8<_>SV!-mq9@OzCu*lW5UI0-ACN|6%=n5a4nMP;ADY=Wk-XY2CL+Jf0$Mx1_W-*_}7O zvrBohtSiV?-8~Mz*0M8HkGC23M&IA9IbT~ya?^I|#>Bq+7$_OUXHS5VL22g6R*InA z66ceHfmZvRsCc_oXM_E*^A7vX=-y@jiQ{A_A3UW&N($(p;v@u;f(!BG5*MQ~ML zGq*n3n?R#E84kf!9h}bZ3fXUPOT4Kz{aSah3bCP5zW+J z-WC##swXCExK~ksg`tko)Ho@&}=`W z;>f*8CY;sC7f8`~7t%<_@|_lx44{FxFeQT^DsWXVZoH48xd&}zo$;ptS9L{yGH_L= zYkH(nd4r>gBl`-wViWqQOY|jhRS#+62G8lqO}q$dMrad1g5)8%s^db1AQZfyWI%TL zDJU73USb9%13t1+6Q~5=Md1*r6#NcVCtrI3N(RRl6+p?r_M#jp86cW9T_`zbnzi{LGPo^o;CH#`THZlgbY@6Z6kGJN zX+YZf1KA~wkQRgDmX9u1^q?(9h)W+p$-sw536u=zTEC+1Yjd=k5)r8>wwm)17?`$N zhO}C(Ts8tF16#UJ&{ppeTtU)SJKVN!WNkC~t&SWLUawo76(wB0wYr+Nxx2KzgtU4j zOQcJ*p}jcT96-rnrp<50+iAPawYn{!y44Mo3?S_xaKZpZ$#2x{VT$6upk$ET9;FfH zS==78!e)nPk3(Gu-fsU+21|fn2&032v29QC5sOrWrJBOhWG*DRNPU!nWzdOzFNS49 zqwo+gWDqP@u_Y5%T2lvBz#*OG2rWYJ$0&9rk#&@sie|fXR3vv;9>Xf(&1F#OmniWkg2<0#X4=28uF;Ivve2?Tw}~;wv3($#57QyrmfK=K_b5L7+46Zrn~G zGI);){w4MYT;Sj?hU%`rRlCs zpT;#vH+6N_j%oLvV(peo_g%&A1H%SClc%7RcETZWFe6Ws-HoPh*d^;Z`{a51R`)sA z1{|dxBC>9L*PaWkRk)$gNp*S%?S#(GdK^Q0F7NdCC-o4|)`MRb&^A3+MSIDVDoB)G zT%hZ{o+Eh4wU;90h5x%=O1%0T&AnT^y)-+$H*?CU@LnGE_ul>~K=GuHPN~n7w2xk? z?v7dC;&LxzN*^;`>AjMd>&|^FngX8}nc49AALMYxH_AN3gUmhZ=Ph=>O#QHt!>pf^ zp0l(n<&TL77Q6U&PejuH7rXcu*hTv!zwq_{1={~dVi*7UMC6|W?e?>RrGJDMs-{o> z%@YxotjUM#jwFT==k7{05C#!lybk}4&-u6T!jF@}TNvy@osKVo@Ku|zwNZlW1D^z< z_Y!=l-gOXOc(Y9R9fMuC3lSv(>_P&1=Xaoe!}AZI9Zizqr2<+tzx%X>*_@5sJeW!Wig78sztP&E2D<$*f@+9^#$D)>NnAu{|m zCcNO2%8~XzEWB`+v^n;0J5A_P=KqE8!o1W_<$oo-ps;mUhe3J-rndWc*u~f!x$s}u zg?J-upmMh)-UoouZc)UavT8K&pc+g z9s&~)uWi>=-%nMDD$*_FD=c=g*D-MlCL-xcdCzf)CNbE>BsHtk4Gq@)NBa#fcOE$2 zmia-bULH?aoA1U6|DhO^*mTQ0&{;(0?Q41fw6_F5R)9}k|Jy{wmVN9Wu#5jYKsz?P zpej-dfcD1-B+j-~_cuL~RTaq(f&geIG!Ttf9l?k2B87Gti-k^)7o>lbJ^Vd zb*I4_Dqh|Mw%vko-&oDZM6GW)HrHU6$6 znv)rE{=orp+x4Oe%PEt(pRH&CG%A$czLHa$y_`S9wSCx_R| zc@D3iHVE!5-&_XR#oI0Gix7vi`)2bN-=@#oWtwQ8z5V*-_iv4)->&YP;;T5yTR4zM zn4iAlAuV;R5^=os!Sn`~lT`S(du?VkZQPg1ac)L972kDwkZwZH<;;`j_|($ueuVQw z24}uu=bX-Q~Bf&;jwYg!w0?a$!gz&%-tg>!q{8Ib7syXV%XTV+>=P$Gj87~ zoZM?T)ic?{IMC7yjqjCt!6<3i3$EvtFJTnR<-ObDRq7#!tHO{M;oWf0yLR6&gWP8Y zU>6@as@nK#EPbd#eK^nhz=uDUkoy`2G83N%MSr2 zBK!Ii5q?qk{8m&9`uF_`+P-aa87+UH>bh|KK*j&|tY6K>8?S=5$K=mvxdQ4W{PC>} z_aXvp=KQO!I1)*!Zjc9-yZMo2yuWA_XgU`_N$>%$o#sMMpuKM39q#uOszIMx0vWjh ze?fax9;7B3^k7ksfjihB6<`+x?{7v1hXU*(Qt!z@ur3z6U{wuq2iS$A-m{93*8scF z*W;xKwE)<~fv&7os5%zA5FZJ>=Na(YGq9gCj6cIo&+~&qWEclim?1^j=L@c%2;OUO zhb!-bw+O+;k>N%Z;kJ@tNqga@rD0CoAvUTJLaJdN6k(1P5k_v|eiVAj6p>P4p&|M@ zW&pboi->C14IYUU)dTGX40Zv*k4*K{jgO2H0@y|SJAhq01K|a3-7M8;UVvR#VX+Ih zsM-UaGKv@ufL##01K0(pSoE25I51U#rh^!Ey_mkpx9zI2Z1^$5o{{bqu`*(@;{do{>9Cd2!`pCOp?s&?UxZQ)-YmxCc^x}>^-|Za4leop7 zHF$lb`u*a)_zTSM&QyLs53mcQHoz|M=i+BY~@?Y zXV!ya9w*C2vAta4=21(*Gf7d1ic>>Acse7lA;m3om@*{zTnDaZ`pLvG2aEaao~uTq)dhdY@t+lwiiuqm@dDkIN;y8xD*C6(2!mKhqw z9U+zTvoOO1mK6g_&nL`8RkA0kWwofK@~X@& zRm-Y_rTSJBoCM{a=gr7v&I>Ebp_67C4b3Y>rXNXhT^uchqu*vOMy0k;7LFJcJo#AE zb~W$KVSy%3p^!H_)BU{RsMHweEOF`Uk3Zg%r%aWh!kL5>MQs(yQx*I06tJljOfQA2 zf6RTPUdmLJtD?@m%TwBNNA+P&X77}fsB$lL5`t)M>*exP`tpz?)sHq6$@FDW-WtK96%ke0-#;c9@l^hp zEnWz6Naf{@ud0mFt;qeT8c9_Z*<7KOP+*f-S-i}ZQ&km;S5Opmt?&umX-D*^o+5iCBU0iFXE~<>G*E-YJEU2sf zsH$}ktzE5pHBVLdZMJ6nqS{ZJI%|Mke0;SvT4$9~i*sB#!&5(bzY?EF107v&u3JZh zV%f#vJ~*oX(p*QT!F+|f;cQ@oM^XI^A7(K8;ZJFJ*~WSHxS=_*;q2`*%rRVGC6X5O z{tONd%kekYcMT7Sn5p@iIN%MeL|n8nO-WZ99}(e*X*98^a9w7BHWoIC*+K>RxY*&) zgtx?^$54Kmq6;$36H`!?m}cG;&S&uEIAQ47jppZuP4*^@I`I3fJ}qJ_crRF5@K7y1 zZ=2r}wW`KIZJnFUZJD&PTc1$3SUqlWh+)!$H(8^rTj{AerES|PuC{rzvdq+MNwcEZ?;y$S`@L+O^>#1{$1(F|eY|7Wo()l^A=+$IXQr zOs@=~(YMaX^Sync!uh?r!}n_26$wHW7Lw8)LNE^MG`#4-!kKOe_b-Iu)H|FF#FamO z6Num0W7ur6(&qcIb8rfZWFgU6hvrgu-8F<+^e06acDWU{;~c=1y_>D>b>1fGHdlae z`!Kqo;5j4>FV~@07#js_VJTESok4A9*5NrgomYIDDNt?3q#c(}nCo!5_Nj5|4WT;u z4W}AyVb#5LLGK|fU47IzFhi&$i75HlQyjE!pYv4H?)M($(GHx+PWqGXOGf=|clxJf z5XaOw>Nq&+0rq#QIsI7>nU6ZBY)Phx5Dte|A72^>Eo`S^>0~wPdt23b@l2o^P5Zfx zCZ3;8JuC2j8Td2J!LG)>AGQeV$AOhqSGI_TToZdt#|D*IU926etnKL5PzY7oes#X# zFGjG7HJk(4!+u|fKW`xdVwEd3MnskRtAd6i#vb{PjR>Xme&<&X=SK>qjHKEr0PKQS zbR_$dGQcjlU6F;X3IMy{phuR|1T)l(eiR+89eW9|i-)sFsGU-Q9qIud3g-K=X$-}j zGTK9<)XqP4zZo^i|FS!Fj6oNLLjP18I2pU=IyUw5#i-`^E&8zqU&S9a<0lcrt41TA zXeQpzj%~+|)YwfZi-PdNi}|sM8!6*BrwTv$C&`;9@GrkW$4-*zP7viPfbasT>*Uqi z=NGkpT%w;Oms7YBck?A|gld(CjCKm&><3-$^UL;A4+nlQ$2|ww#TnhH2LjJ2jcJiw z(^sHVTyoFZYp0LtrUfoPXQG|yik*PeD)4u)u1*q)%drWK&m1UDKWBT%V@!QZVD?Aw zj0&5)eC_Nm#|+n(S*=rPC4sr!+s8!mIEesUk}=T~s& ztc_oojL)y=0H9sYN?>7jX3h!4|l0_RX!i(@?ttby@Dxl5eH`*_yn9=#uU{W&LdbGhP_%p=R?=e_qi2 zIVB)HqP1F#`*VSI;YaQ2InmYCRjGN}wSt+S+i`OJ_G`tsYlm`DTjOi#$*VZ=i?8_C zuQadWqb1RC>xnvRM8t9jr|TIm>sS3HFKTZ@(yf!{$zG}3NPuk6q9tzJ+zgsor*n{{ zaoCK(-DJ*_xI3}woxJe?Ex-IzU~37w`BYGXJ$}ngXOpj6hKZeR^mNP8X$z7k&g-yk zL$`(Zcv~uu;Td|{O=tV1wz#DBj^)gjiu~M@x}7n|j#jtWtDCz<&}|)U=@$;WR=B$c z4r1>nb`6quKC{nj3hp7GyXM4VpW^r4=O^g{_qFKuJl576>-Jk9 z`+oAG?l%vVX7)nXB=sE*bZ`%%CLqBR2QQQNzsE~P3La`g4^sUh@$rX}ItSV8o4)A7 zx!lFKfo}@yAXyGaVswYFuS1poOeyH2moA5mXpsu-W5JojwyC2wL8gX@<8t|aq?K_WRhJ3#-0UdS4Rn+ifo@OO$bj-oIVISS^p%yD2Nt- zp6-4UUW-T5E1v#4fOe)P<#W+&|2cMHA#e%jMy`6L**}|zV6cmpRNrX?Cuh>RwgTO&{Y zZX!}-x+-{v;7Iqk@WSy~m#$|7zl9g7+4)+za3B5^UT7|oahCsmA|gt({yTQT?fm(7 z>_UB$r0}fG9SRHODD*XyC=$3S(*1D7^t7C!oiEPtX+78%>i0FpGTYph3&>mK! z82z{K0+I|5p=MMzTdMx4t|aT#=f6!v7~b_`!V3UsA9sxl{ROm7=;(&ZYXhJigcqJ& zv-o2o(xGAT2heVjZ1D%sP6IXnBfQXm-x5qjFhINZN6SBec7iNROn8C&eQeoO_+YF9 zHoVZ1p_BLvXpiHpohLhT|Ak#FNqj6-yYEnl0op}>?tjDr?caQ#VkaUtBVnTeyQr8q zzxJ^b3$)YxjLc8p13-HM`ntxm;)|Gx$c^`#MlD#N{e7_wCcMD6Mc9M|+Ru;GHHlz> zcI~b&2rSU9pLJ|Df&toLho#u?!k9vu4Hjr8mNuL6#{lgw>{zO2u|T`(lr0u$Kk^d8 z0__armKdP@c;p=?254WSw%Eml7dk4!>i~Aau5Npb0opTq_q1{FxP)Sr{ITH$T`@sC z4A2gVIK71h+O=?su@jNc75=}%3l+^m*zkgFDDDePcp>0*r*i@pyD*0R!Y)2AUcL9} zBQKbUIHw3#Uy%b7k*Sf_`w4UypxrR&e8HXwBbbP=+aj-Ffc8cY4^0fv?s1C<1GGc# z+8ak;f%etKA5<8iopRpW3=>}X5d8=Xw9kA_lW1f=_`3+DQmzG2w+5aY5mAxO4RC6f$qG zlLkd|0HB?_U4spT7i5yyF+jW1mxuv0n22O?NgDy6UBhq=6J8*b3XYkF%%9JT!~pG1 zZKm(}X4@M+clF2Z`NVT?fbc@pr&vsQp{f-dUYO0oOhkId7BLf%^p#VJ7hcMyX6xJ1 zyet4{r({W>0YLkec`VRw6^#Yj%deQS@4eQS(KX2NC+xcZxOtIZGD;zCH{=785;cV_ z55n|q2na7^_8CNhiO4k_UNZy56zhlI@8t?9G&4WY#9$X@@1y~CK}x4sfZVVcVFuv^ z=KRduft*h?;V*uGiAdo^>_o)f5<3wYH(1sN*oCqY2D`}4UBzM-FQ5OyF4F5U*u|v~ z4Gebi$N-C7G~udZunU!6*u^~xEOrrw#V($TC1bFQ=tL}baV<~}gI!d9z+x9@XLSsA zarg_n*ptu)S$ku1DpQT0=0jEeZ&oe9L}V6%nTV`?b^#NSQcfNe2D{*mTE}1)J3d(K zV!W&JWa-m4JQk|`%ft2O&FQqSRKLdmC{}mL?Xyd7p%w1 zsR4FT&XD`$i8qp&I9a%m&ZFrti%F?UC1l9=eX_YFaYeLf42`zM6@v2#q8{u51x&sP}GXsMBp%DwnWFReTi5laTn#-_FQ*+H_J z>F}%==c}?D=tkTZzjIqZXwDz7GthnwBHfy#7q8&rjQbiEzB$e6 z&dnrFYZ4W{IrXH~>d~t>leov5v;5}|@4TlqO}wcfV8mwK=Uicu!fEFxXkm?*HQo`MDirSL?qUm0Zc^p+RRGIXxuRqk&hB!B0}S?0wyA@ZRRz5 zv2ldEHj|4IU?M{6@VF|IJ&d+kyve#4(%U7I(%U)*XDskKBqUPMmor zXuWeKZadB4=G2S2!}B}ZohRt zb}6vVcI_bUpqn^$Jwec}hXP<1#IdUdbtlu@@kbM{VzwIuPob*u$Mf%FHhb&rhpa$& z;Zrmwyigh$f4cW6dUvDF0bUW0MyF98fQd*9<Ish@Cxh?;is~ebCgSP^VuVnSNj(YOv*5t`tB{7khxKGS4IwY;ue&s)P=JX@gFANv zCG?rQY6JDmGmjtjw7A02kqx)#8f_{X?m!wZ7FN^gG$vRz+;eI4r)XqM7XHlL$P5*J zSl}K%>Eu7$z=A9C^`PMaU6V^B2D{L$0N6znS_g|=e6VT+*o7r`6A!dW4TD{Xs8}@# z;6l|Ynm~BLxS~lI0+AbOg6KeH51PbWAo<*t63GxNZm1L#LVLDaW(NAn3Mz*y3ZZ~L zr)wtLtbPd*)l-Ek>WFe3K$TrYc_W)tl10V&n$@7q>Z;8eGomAEjas-Z3KXJAI1R5k z#7HZk?-X0^jx_6ibScJ4rMnSEL#knP0Y!I!u`mJ``;^#bD9mv{nnOX@(8XX}L-fgWe zIueHqt!^%DyBFHPMC2&F1)cZV-3uWxsM6-UEwO6Z=15AvCvrwMY7!2x z3v~8340aK43t$&={#fh+{O3Q%mxSWW_~8QJO^@l~t`%F4Swz=rvd6@B*LpU=5?S{q zv}+S0zY6KzVey#P>E2^0Y<1~Apq51@cOPvN>_EFWal22p<$Z5;qglGP$ezz2y3gjw z?Lm6*%sg;(dysTJ=Vv?5h4##>bQ3oBIDPIRlI^@O`+Oj|hd4(T@7fE3v7W0tGQ^_2 zJw(0N%sMZc_2TjOlKaYBOL+k^?4`OSdo|R{u>VDJOz%xm8LDf2PtmFap-t)A4(YyM^MY}puQH~Ojb4TxuYcXJ@1d?V+mrss{BShK$@BZV z{YxzUoR_3ILi@Qj`+1t5KWtW*^Xcbrmg3pz7p&6kMewm6UpA5Xvc%3a&~K zG6SlYq@I^3QPT`)?8vFk4g_WoXwOP2UmI+(9e8^pp)IQHOEjo!B&lIGSkE{3Aw@zr zWzfxV@Z%H7w*$(xF@wgk5+CtiIl>3O}PIC2@Pv;V;KSt^?xMW-8BQTRl<`XoV&rFWp}8 z=HWK7VP9RC^Um-`#o>U^7B~746PMv&R;d7h+fk2%@rwn!sv4~fM~V(;mZ<8NbjRq* zM9z-r%Z$YPD#ct=tF|3UOc9M2ReP5`lJZ0{%nYf*hfJ3hO-Vs&5h1f=l@kY$g)zun zJkcyXbrnNofv-gRlhORKkz!ft0^LzXII>JvqBwL^>KIvR1SxA)mtz^NF?yA|GwQE7 zT7M0}cw3{?XSB)nRlO4Gd-Z6`tVoS33bHcVt|?wwf@-5d!8KKV`91WfQGqh3o+sjP z`Y|qBRKKi9yOJhfHfnG{tlw3WLuPCQPh_xUjEi~<6)QF}I~Ku`JvQMhjJl@v$aZYX zSG7fS++Ykfdrfl6Y@7u(wty!#k)lOMG`@@{yfC13k8gZcR&5qf`alOQL(t+SgeoPUxQgFy+LRZrUN&xvw)XkGXG4s`j6-lS8V~0J8t2>v zYKi>s4bB%xnKjz-6Pnyf?n=c-6eKo#lRq{rOz8-J z@D3IuS(Mrt&1JHLYA;Ibju&z!q>(C4?@f{jX2xUs-?7ra7%MT&1VH|GthDhzY^=m< zB>%&M;qS&ui8~?(vl0K$v-uBWrK;>xxbe}?a*+YW)#|y_(&jFp-wk?U?N8+ey3+J23d;4!RdCzV??S2v`|xe~92w?Xgmys#1Z*FBrR#!8hN zzMoBFubh9>%Jrub(<(4mU~d1%Sc!5oz~is6lGwSKXLJPZQfiNQajTQ>asH{q^e}Qu zzKGfk$<{y5{Hh(R#Ms}y#q>t9LrpBzuQ_s7$W$MUm9RY<$45+Htb|cw?m1Xy!1Z{7 zS)jK6&9PEO8e`8^-2T5^iQ!;F?`Qn~9V=bCe}4MEI93Yq&Hme1$t3!|9%skjDKS^| zFQ&@oV3ZhZQBt;NMmdJ>rNLMUx%(fL7>Tofj^%B#xnINoxe_y~*7@~sJ)3csn$l_y zUsmg(i|jjvdo}C6c_N&*Cl1X!YItAd+5h}CR>HZQ|Lr^<=P_Y(J+557(+xuz1Q;tp z6WLuDWEgPoMl_Ol<-2t+PF}LvZ@R@c!ze5>g-7%14g*_(*PCn2zxQlL_ghq}AN-}n z6b87<{M(e61!1bg9uG{uQ-`Oc2P?GurH#kIF+*#tHgZ2T#_y>yYw>p z5RoodlKH9=!vYMf4LrmsF>0fSgXLW%xfY$vT1SUN^_NTY-7!6zqv1BW(!%i06+Pag zksiO&;xyTx2AG~rS7~Wk=TBpsqtVIBW#z51t6!s!usxfh&Q4KMX$Y|jRx#Mm59-y*JP z6PMczia!3;vw78}@G}2+_JRLFbNBtNs8MXsrVH=>a_rIZyby6^kGtG<;+E~LBUTSO zpRVmx-jl`W{*@v&zj`(*K#7Tt+{SrsxBQy83fr@ZKEWz6LtVS2RVP0`?@_Z&%k5Q; zVw9MwUFzJu+9OQQrh4+c{C*?V>AHt}_0)~-{TANSjR61Z83y?S7)FT!JsZyMgD#uX zt?$G&3*w+>1C*F_d4A0gxrc*Qpl9P>gHd9Tqo=#&-JoaFeKdYlo0N^NS$8LXf<6pa-CV#S|jz0W4#k=bO_bP$g9ZeF~q4!%cN(}lK@Rf%{-KV=3 zk+ZA*b;tAapl73f2U%Bly4Q_9Jwl^#$iJQC`i86W4d3$Hg@|v2<==>gzg^z{Mndj* zmCKP##qqkOBYA`)Ww|5uup{lh<1KQhJ6uk5Do*z-ofso9JsY6JuGmPQ&7j=P5cF*J-97^)hRfYl#ogS}-7*5iYz!sy-R<|?zma=5 zfu4veIGZ*0pWc!t2zu^tD zRdRoz#B8hh?^4< zUbhM)j|`;DxVK&&NIT;9tVEmUAh2tj_#P8U!IL1m44GB4p!)=JOa~X44uX(mL5%uf ztdtSNK_J6r70kbA#;Y&;bkS`0TQCnr2h&tyK9;P28x)}VpJ>0TCGM9kXaU_&MKZ1cfA|*09 zVLMD~DA-3o2E=SE7K57gV_Nm2VT%&hlF=m;vFUVC&Lhzykuif-;mR3Nh>?gfG=Ws& zV$58Ib`N))3nZq~iexb(&KDY^bw1`D=^4fsKI{54n)AWn^OXaADev~DYX|YW1)+@X zvA9dI6Q17*tfPDv<1bmqUg1d~L%!HoO(2g-pae<`GJ*Cm;TC1$9iBuwHH;F&7?sFe znaF}nWIIfJK$-N2Cy7HX>8W)RS5y*DWfC7UN#HO^h%#B2CmEuaEM|>SVx%gQWsu4A zgHdvnDHIWs?&nfo9zyDbWXi2llp!gs#VH!FE7TC7tFKeuz#zLqLO8eZlqhlZtWyO; zQqF=Y$n(^*F9cpo$$kP4oUmu6m8n{lX`c;5zEa{isHHi3iR$yDxuapJ#)s*iOAuG< zbW?-0GXZIVFp=HKv=GAdNF>BEGc^|c+ds_UEKYah$&5p$rV>JeGc(Pkge;MnQA?>Y zgjs&fB-v6~oZFfClv&k>BI$=&4om4(l-V3JSy1LP=U!yCNeM^8(xFmm6+9$PhuNfL znSIENA+MYs=1c@Lo`V#At3l2P)8TCCFh($Pv&2z!nyh&x6(R|BdgGY zIq!Z}LGpT<(C0LoqoRu;DXLyY+twLE>uEWYMN%Jyt9Xhs$#4j&@DxUiB-Kj@$Yi(G zQdsq}URMb}UM```$~se3`u?Iw0uMx$GLPY?^ii@Djx=G;gA#@Nd8!}t%s)PRx11k9 z2%=xl9v_vs9|@W0mU~kPdw~%lZ$*fDMVL)RM05q{GQ|KT=BVO3RVC;fC97Aa+F+EJ z%&N-l(aPMT%6zJ-Lf)!k^{P^vs`BWn%BrgBQLt31s;8=MdhMJ|?Lu_zQdRBBXzl7z?K)N6 zCU4!gdfl!~-F|f4VO8DnXx-^i9S(K$VN#aJKg725M9T?Qz2`Y5)f}(rGl_vu$LIX=JW$WI;8u9XCFpZh8a;N*Ya1Z9$^8 ziKn`W57i`a+$2N|73PCNG@xLhBoPCZs)ov-pmN91=hV$F`I;3qnw4#v!A1%6Y&1~K zTF1?=saxLiwdfpE`Yk`Zq1Iwh-SRQr$MCr2bGD~`brKnMtGR8fWlXCz=-HrJ?T=f( zQMWnqwYg|udNv+0ZC>c=HXl@*-*H<2=-KeKhiJ5i*|tYy2by4eHh_luP7O=sgC%Q# zwI3`!29{Y3%SOR+k74=Lpfl7_tkF?w+fg3VQCZzl4SF`m9re`kMm{)H1Ky%>bKL?C ztA@jYntKfI(XgMm(TQMrc}2Z*IHnW1lGI<_Iey$Z$&xfi-8G}pHD}wk5Yx3(jp^B} z9(S!%cZ1!;wnq0Z=-I?{A69oCqqB`me;=J@-#t4_&xX0Ck7cZn?WFGkP5&eQeh#!| z|5LkuuGoH_F;(3vOwUG$1|iIkfM_Db><|*5XH$ca8AHgOAfD3UH4xkwc;vWgo90{`<`CQW;Q8VJ7q-6#l`A&mO z<>9NSn8f5kulHRN(*Oy+0WV9IcZ0ttMV@E4%Mytn0Yfnb&X;6*)D5xf? z#SYaLi-G~P7`%Nt8tI}L>*F6oXpRjURacpeA#27^V`DVvl7{gUsvd05X3lPWA$EK> zyku!?eD!3U_2atzk5Bg}fD&VpI6{5;;}-3d^30DrT2uGzrx@d=m}{q4#;4d$ zrykHwKN6Vc(3*Z~Kg|_4%~Lzg=Qm9^J}pE$BP=ij(VAJn8yAb4k*b}M8K03moq0|> z`%++5QEOJ&epV%JR;_kcV;szsW?$3Jy%m_#(VEkD*`9`L6== zrdspn_Vbo;^S<+Q*5mW`r}N)v7n}qZT(lP4>=!(2;ugGCYbb#dbGi^v%OF9!7^1Zp zX1^E_w-{Bs7&E>Yce?nUb}3O{DOqbN)qW{GZYi_&|FCzLU2z3!mVkj^g%++Mg+p+M z;Oh({+KJQ~TCoLT(ZR;l;Zzt6=hg|}vl+as!KBq&!P9N50M%GWq-%ck<&ZY&< zX7$f5SjY27fd8d7%l?ZGQ?ZcYeLB+$m*8}A2VZ#rB@o_T<&+hR(kNeN5 z&B3pM|Hpml|D4+Fn%y9H=En5)xchHv^Zz}M%Yj0W>bftf{2zJTdwDSG-}5;9|F_y~ zxOYz4OGpxF&pDR+?|ED~DjFovjglUC6(%M3p2y(}88E-A%~9JS6rlg7+AQ%#Tpj%* ziab7q2KZ&6R&G1c!<&iI-HIKVhwJ}83sSlh^7{3j*A&pc2p*@o`AIGn4f8-LkJe{k+ z5&Ze=NPVSe=64K-o)62)pPc2{LaK&x*VhzZ8zba~`LVLlGb?=}9fr8R%O zY?H)YO|d+#0Wt+NG?a@j_ldcn|~ZPWiVh%S4oB&{_vVA!O@+Xg3w)5--^xWHDE5a9Wrn}U)dxZCSFD7%T z4Q(7A#1Wa?=R!iyjdsMMCz7!2W2p%d9>MIQps@feo4oWQvO5e>Lkn`h%up7L; z?FUlmR9APQZ@~a&9j?KUuZU3TTvDCz&d!TYs-dAp2+ne$9&|MTNA4f|#a?I3F84xy zvWFNi`+8b~GA0lubVxDaUJ|IGAxX4g?|>KVuM!X>39s@kB-j-Q*mNuq68}ksVa5ei z`R2l99-$&+SpkB}4U_8F^iEQbY&`UCvOsSb3Ub!)e3P)oUWjbLi{f2$TsQ~=A_R@$ zVUDN+Wu?4Bn_P=af^l-aCyT;^$lwGYqMZAqVYedSnlOYwK=7r+7bz*1K5o(37-UUM zm1?*v?$~S1*jxNqZC95+oMQA~Z&-WBjzwTO`}fl(xJ=M@_$8$8cyWkV9@RzBzD6Mc zXd{S40Fhxxrl03JyW7!xJYX{(^c3&kgwazNaAg*Q&>cw9ZS=K0GB=Q6*C-qyOzk zdgXGa1tgMeCD4R<2v7s_!Eg=CVt35&G!__WT7g_gG!P+o-r=|p{y+9;fK@c9Hhlr* zQb^@e@ZRYW&>$bmT(9ra(rix{_gw~5JU~1A@48PI^LQTU7QT4Y#uRudZqk8M;B;Ge z8fPtFHV+W&=L97bAKwUPO#_tfO7W==wdQg*f5@mDHcHpRHgAS207=o$BmKGeH6*|+ z_sd+HN0MJay1TT>arL-xv-fceCwBG!$wT|y0$4ZXiGC%)2#5&p^8qjZTpj+&arGk* zQkwR?FF_#Oetr?-^)clz-PV~V1SQorR63E<{rl7sO-eIdszv}lH4qbM^Ti@!;?cXs z-8Q;F7LgEFy%~^H@MXfnp%Z}Fu%F<+^y}xoW%oXMU13&=rhgiu=fg0K>#(D^mII|^ zx}+;Gmj)UlVO3Y`|JPEgh$o(&Itb3+hr-a{cdtwl;3oo2hLoE=U#cx{IL0Ek6KMJaAtcH z_{CLE`F5u}wbVfYQYLG7b=b{Wkb;hYkrK$SQ)aenVqFCZ!oQaCKOyAC(RFHs-L z{J`R-uUQa572shM-Cf`{KKI2=Qhnq`vdU?HNpj2^D z&w(EIA!gKvw9hO$vxD5Bh+ztNnHbM8#5F19BQ(<~!2JCZXy)WU64pvhQs5t1?-_2g zL{-Xw&+Tu_K0>I9E`y416|xbSM=h9+Ek618Nks#dxb_8bo|Va|IqA)3nMyw&kr z)g>}@t|}fo%R2kVbz&<-90X3{qtp!q8q6;kqM7wd);U#|uAKyf$@xi?j^9#Pl zXrs@vtJnK1mPS+1iEB7rVQ5)Xv<|+`N?ibNbEI%%l4o;7O=DVXbGTu1)=RU$eLW3w zO94>}>$}>FjGvL&B4||fpUUGr+lDg#HIHj=1^SP+2wneNZ*E^+Xq1)XLiyW;M%)cV>6+Kc){Sh(m&5z@p2v;hmaTMy+Hi@8dnovD^E|sLv))s= zmd~p_##h~p#J$?~?X0@JS{TioS-qMpJzrLPrJ#ESi2EeFdqs5n1nqkgtlt-`u*BN> z6l}1V+v*kh`b8ge1!Vd)ZLqkr`gL`&0$~I5180s8t4vK=vLZB)?2O)$Pf3} z5f6e`1{`e2RH7(E(uLV|2l-g@VeJRK8v4DmD4-T7B>_U_d_#B;70)#=m@v0OATJ(R z?D=qzN}ew0R6ay>U6{pZzugSX3k4dtkSnHV!YiXI0x(ju1jEaR@f?C+Sm47SfoGek zGTXYDs=$)eQLLc8N*l5QsIXB&C<}ss4=*|V0Unv=w(D?14>Kd3QKZ2%z_!&P>=I8d z>S18w!Z`{YB2H^WcCW2BI?9C&G@{2c8cBYq?EPEb<7 zVWd%7Z!$2mvz~@E*TaPK5Rzm`9lb3u<8sh8G^GGIXSu{bNjwGIM(;wLY|a`navyf8 z*CAM_)O(mB-bVlSV0i{IK(>w<*+*_za?_**mT=9E*NtoIkyfcAmvX~5atuS1Jo4$i z=B0t$YKyGfA@ivfgq%LNS%G-=LI4^M^QFqY#5qq?Qut=L{G9w2>Ioo=i(t>Zy?Vkv zpH;b%gN?fv0y|QJlGSBa-@?u)68X&2-b`i}(%Yf`__5wPhgh)uGXM32Kj6FI;GAu7 zc^~Q=0>&Jiq4PvWTsrDtrY+e(bY_|vCDf7|Dx`6`^{f&5$ud9ArJ@VTCdaXjUcke9 z4R{?T>Lhd{v0}_D*7UO-#?VTLCWRdzL;6qJH;n|=h5FeKQ|IzzOuvKe^}HIXDZ&Z- zUA#-yQc_yK{@P!(wfP3bIkRnen8uY`K_DR=z^)$TPwCm4^tbeA4qxEJT!hX6(CFvB zS-HYWIr{5a6E0SsDS60C1}YUhyrfh!*{(IPee06^$vKBc@TX{!#+Y7#T<{?f`wNiz z)lu-l5`BDHAav{vX*8yBWN~Jlv=XGy2rRP=rCV^)B=NU?uyi@xY0_G)Nl$@ZarzQ! zuZgg!WWLw=N2ZW^3C<$ag+u_Bgg=9S9}}|ejba}uzin6VQkt~?ZRK?kf#nD{e9oG$ zC5(~$Jd9HQ<>=V)uzY7QlZ4+$|JcH2vt)dbx&1hT{y5io_tXCIlH+mxdVjUgiLA{^ z%lNU_`iY&*NtZzXZ-G;j)#Gdb`GGf`=8jW-`qOc{zCQ}bQ@^^~^v?$0P8P@eCp*sg zPiqv<&sd^Pw-x&T=%0UHJv(IVJ?J=}y2|?te=(osdp$mMTj_hJF#OPQF&%pGHhyvS zcJYdKc_VNM|LGF;`vro*C1U3#(#9ol;t~^biB)xh_WcS&@rp3^3Mc!5gz1uC;))1z z1z@_SQoP2Cy(X=?{)m3fU~o+@c+Ci5x?vW)q5giu;(NolUBZlyYJWj1b=CT>+Ax2jb)3h$5p8)SEKemM10q_ExK;_mG8{X5*eN^o!f z{eC_4-n!~O{`}rk-YNUu@%w}G#=UFRgFEE@eJ0lX(}VxSy%PAFh=CuFtFR>iIGxwtZ&f_2by%KwnM)q5|_3PWI=!Ka$w|DiVjujN77Uw`qmS7ta3Q z?Mv$cuf{W*|Ft~0KQ@#1u^s#`YBR!wYvcIk-hWV=1y7fz^NvObvkf3VZ?CVSZwJ{B zc#3MFhk=!0AvnB$+n0{Z^Yy`q%K@C#^#4L4r=aaZ1!VpZMdx|0uEW4Xx@1F=?XwU^ z%k^NCnAZRAYV)49bQee`K?*7i_H?Qy-*?;ygPGQY`0$fTn9WgNznjUSluiPlj0^xB z^G6?}_%-t|Qv(VpJfubLN;YtazLp#o$C^!n=b)fYfmb*wPmYzdxsHmnTP~i8jsLk0 zq{B(t3mFoU|6EU{0=sRQFV2vGoeSmq`*sY9mj1BE;Pi=IjYb+}l7vF`7F+Erxy;vD zMTWl!)OauTLju!s`5YR0uK(DV_9VmfGx)S^KN&5xWF(Pj6Q7ryJ|qQFjMa`OQ%R2d z3Z^jo`7vUUl!r`oIh-?zOgZ?iMiPb;D=z0FJwrn|MgbO@mrKAS`ygd(x-Np0ADJQq%4C_=3XtDDo6-$%;napi zFgyk!F8z-G^{DJGB^!XELLns*fyB0_DKRDT54CwCYk@+x)&0dpSg7;G5!?zjxp^5XCPeD~tt11{6RYVT{@LYU`@6!2_AvE4sDhuS0@D11CC z25hs1qkc+$1{u3bh7Fw+LVYs}YMxWN*JHEevAbLNhuSPC>N=r5(l|LQzdyLN0k!#bt@4AGdAF03*`}XHts7(wdDY$GP+gAkD%>_h5r=s2A}0ODko;hf7vnzUmEk;O z&ISn~b}PzP2gD`hVsb1B1~>uLuST{IpG-uoz2i{0Xq7Sa(&99?n1jODl3_SZa$jI8 zKN^v*T^Xg3p?IIsv$SS)o;MC)te?>b>df@f&yy$d+k<$MlqPFKg%Db-p+hzr4z!HdSojSxAZJZ<680Mz48 zXHW(moV0mi!wGu2dGidEM!&=F5>O~s0*0?~`jBXC4DNdf#e59MJ*7$0D>TjGG6?)A z0i!=*l{b6J3%mWf>CO8x3pu|NR6_xWGmgjhN}zzFp6(9v5LV58l%6_c8BnT;iMkYn z3kBdd!GHlrsw0dCX#QuKDy~+8*EKwjFaD&clTN=cMQoT&7zvS6mbMr1nG^+%JySHF zlnIdcM}p@hC0A^S^A9B`XipU+PvYF%@Xa-eP*xZac28oEeh5bI6KAP$DAg;nRTEs?gS zkPa;OrFB{tm?R2mh5aR0jIa%cz22?jOP2MA&QY=zb<-Wd5lh+2pxpx&E!Hs1fdEYg zbWl1OLLyd8waHx}Sq*jSQ7Pb-%tJvy{>sf@=>_a^eXMWo0h_F(_fQ7W znaBk;3`eF2M9Jx49`R;?B~4==#5BqT8eb6#i<>-^=W^X)AQ7`Ao1=OhLICsTnq3JQ zRdx%_k;xY<3dJq?Azbu?iJ3fW=_Aju2QM*-?jy|-SW2U|N?MgbC^;B=>?`zOXN`7} z`AI?f^jvTbBcSg_<9k4T)VtcOy+AmiGdBCUpF(ZraVklfwIyZ*KlwtzwK~n+^8i8S!!DEQBVhKGF zFk*z|lq320S8;jPxP22;JY+rOzU-#$YkhgM5Ur-OuJpHMg66#iQ!lGe0bPwYf9!~Vrn50Ton35hB0@ibeR90R18F3$seVX;p zuQdtAh={-wD+zWrgFG%+Losjco}AmrJ;u~Y6MC##WQSXFc)g`VG*kk0@7dPRqiX!y zCnb-&7uahrWz-MP$h`&nx&6yYZQWjj|Javy70{T?VCAntE~HJ>w+MS%%pFScgD-wG zn}|1uDMU9Eq-^Fer6@LS4a5KbCH6vvD%Mzuqx8!K{XXpH3TTc|xqgtV_0Kc@PK$Pp z6JMwA+xxyWstS`=_vcXM92hy!EHZ(r7G~%Y>}VvS4nAL1W*GGqhH2pE5Q|plo5tXw z#6m~JFqSSDC!tiOcFNYysI;muDPhr4p3p-KHRv+u4>cssojXX~up>aZ8==sy+Cbqh zR52PyEEbt(1P~8zhHN^j6Q;|sP);Uc$PeyZRdyDZ#zN^NmXof)AGj`z+HA zvETQlMeiRus-!b8Og{NSCqPhc1qAXD^XM>=np=~em`Ap-nCQc3%ES1?M1rcz5~_=E zlMu=1!_H=k?~!{>h**Y*njEiw>9=OOZuL4UBXX~bh7GY{@YGYq7ha191y6DXd;|&~`5lUhs`q6b#FcSn?cg6BhM$+}_?e^>6itlJ*t18!3e#wN8u|AYC zh3~Xb&x(%trwHU{WlLv7Wqgb*W%=-u-~rArS!gge0kg%kF z54oq3R6k3@^KVgo=w5@_;h($1zxYt8Nq<63H5!nAL}~f8fdM@7EQHNyv-A|-1b_oC z2}#H@1Gp>cxNDpjTaX#NN8o zExwU&g{|N(R?<}l&J;me-vBymMIlmB*=?NI6fd+0MtXfXBpqL+cSJKi?bGZiWC_T& z6x51RH~pB{AVyk}!Mkw7c&m+}HB!7U4P)2cFuGI>%D`DgMxAG;50E0<9Oeq3p>UU_ zH!a0QxBTNaDgXiRCKhTD@Ev!_Yb9Wvru|h_cw3ap4jMm9Qh1A#o^Q>jByEbg#!WvV zKt+;HlqoBI0T;J2)DTqRePR5Sn->(;o)?}{K@;=#OzG>%$n<6-CM5 zGVC+^@9~l1l?+8M_uOxmh{j*iFn;1Y8>iL5E?bW?|YQREHrCsUpm1ZT3QY@e)DkE*FE-y(*fDtR@T?3XdFn8oy2G_J? zP}V3TMdL!4e%7X7D3z58NReay98Hf+Yz~Sf(zK2X{zwkgEm62j`$P##XN6=I#>P|+hx+%iXTy>g z!wVN7#ULBo2BxXD)mDSBGukNA!Hd*#5{hn=p&N+ zVC_+B)^a#)z~4ptVNG*d$yG5ek9ZuHtfk_9U=~qFCQe*~UUpXbVsqh2OT$X*AO0W{ z#6pVdRJU;kQtT*afK^^|=WAH%lRz@_YI%-`OmkR&zo42nQCs2aNW9*2=~m(*FA?l=%AY*Y!Qqb%d#z{owV(lQ*7F0oR2aFZ~;T=Qdv94Cdu2AzK?zxSP;a zn=oMH7miI>^-ValP5Ax(d*@BWluba{3h!DJ5k1Q+RlxRyM;lug~@3M zC%lQJzJ+79h3jIt=eLQMvPDp|MF=*WmD(bj-}<<}MRLE@d}(m@x-new$%`o3Y3+^2LA&cZa0|V+NY|P&g677V>LJ zd55!-h}~?5OW&BgXom-E%q8%VXTX?ken((@M{wU*NWoYTZC8ZEL^#G+ta686z(iER zL{i^G#BNvG$3!N^M7+aTx^h>(!$fM_M9$1a;mt%5ZBGHbt1PgmB4MhmzNbEKqH4CM zp>L{Lw5J6&)qpqE8ZcFv-_sx8GuSu%reJD-wr@mYW*B2?QfbODfImi#&Kk0B5fg`! zyWdc;Zw=nJ8Q8a--?!V}|9-#!1OC7s_rQVbz>)L7N#ej+{lLZSz}4lzE#$yG<-nup zz!QAnHE`fPf8eu!;Cp}I2Y={~dl*1<7|3}TBykw5e)v8&8tQTw7IFx&)<>jG*^eAJ zjGDK&`MMo_e;5mY6c@7w3ek+`JW7-}N-A26Q9nv?IZ6#VVy-_-D>}*mA7vIb&<`B_ z+&}tte{>IRO!{_|OLd&bc|0l_m#=e^Q9`2CXLdT^V$(-*I+$`gTx3)Ic04k0IyP@J>aq{JbUFclHYson z#yy+nJev`)Y>_ydGdr6P+0S9LTu3=vDmo*JIb9w&Tb)0{qB?`D-JfmzigYsB`2)05 z@n20kB<`j;&+D+=bU8m5Kw`k@KkIsb(S{R70N54mvWIdiJ8TZ&FD@%NzI;TgZae1} z{?4&%w`6B`<#Lg$-ZAiJ1r0-&y!3k)Wyf6HMXJ(R&STs~k9^vp`m|Vo*T~WtPqM*BzPpItm;a3a5OdxQm+wSm8r8aVR!TO9TPqyi#XbxIcq*eh<`pE^YImc#M*5VV~P zo#eC=r9KhkFGRY_CQ%>*MFy7@v|8y$2&jiidkrg8?X{x0Gjr5PDxz?N@toxp$;ui4 zBwvK&&F?h%h9T~RO1w)^Yxx2yzp@JJQ9e6mez?_izr(CihVGU_bU41ZyRrIid2pR%xNjPr6j)5Up-Jo3)Nr2$({3k8aOqP5+A8uFc9n9)(E7CIF+`v&fdYy{hqJ zK?bz3z*)|(MOlGr9@*PBt`wan3B6!7T`(;=LRDG{(X~yGJmS}w=`oo@gu^5Zcuop& zO*4SWS+`#JOgk6K1c=?1B|UYESImCY<`>BA2sfOg5*|z65WN8Kt7xW^)mIXP*S3qD-NpXu!h_((iY0{xc9?0~#ylYkQV z({$Ok7q|2Qs_tSeMHrgg$0x%SPSxd@MNb6Q#5|0&8t4FfMXB^MCN}9Sj|Rd?(S`&d z1`SaY6HE^8D#1K*Ze{{c77by>#osfSY0T1ANCP_WDh0tvX05CCMP|``9@kr}`dn3U zss#qHLm6=*8@y#dQpHmJ`9yX=?h}0}XB4amT761^@Eyzi< z-6AIyy=o2RlFpjIb!Me)l{5KL-QmM{8cY}z3<8)4e^Vm?>K=uan8t9cTOO5KrQAZf zr!$Jc7EVg(awCPJ0!4<{k{KWwQb6M%2c?`F1Z7KT_q;br)@x8uKp_q4rx?!>3B_cv zx}}*ekV$2=J-(%#Em0{}sj!-}C<{2NU0&9{{JdCgG?>6(eNVq!Z?#ZsdvedP+T?IB zU19yexZdXRaD8_2!1S#F(?A9Q#hxz&2?L;Y6g)bZZuvrE!r(Mfc9{kSD-x14Es|`9 z0D$EBHrQQ4!|ABYGCk zlY}&kQFsz4#NM6;0uezHc8|SkGMy!|21;R=aPSAIDSXfu0{uFJzaeIagrdg*dZtwN861wgutqaH1wm#BWW0E1UFeYWk#5W z9C$H5FCx|cHWoW_506mvE*g7=X-?Y3SZNUz8`HM)uQ8SlG+*C#gmLulN^B3H-ozV= zfdVe!bB7C=N@rhM5Ox6~L18@PCk|yn&=m)TFeYaG^`0mAPK+|z9%Cs^q9QGIRs-gb z-nd&vEOf{`Fu``M;Q#$(rY<(+f@pNJWZ;w#Q!eniaQdK?sy{{T+9?!HTxe;GJ zmlkGteEwbfyXAA46m&ck6rhcePARkNIFaESXMJ3(%93MtxekTZWO?oS@`=_821i0o z4X&(3Y3F^CU-daDoHm_KTSgFg)sl|fzWQ#L*xU2fII;pt3IvzvOeq9Ud-a=Ux$N-I z^0`<=pPNOqNa60G;Qb-8_4|J`FXkRQaePBw2-RQaJ`7ntmVO)^FO~rU>!{MGg2knf z!2)jjGovWh*#sf?U#l1@kiA^XG!x?2C;K5Y{f22jn0~HOaRYxF>Nc0-3@dOeD)poh z+Rp8SucSuMc`g#mtb&xlnI&Fb0BZ?J8wgTfD_$X0tLZ6KWv=8ji3aDasQvvf=PJVY zjIU7o{oY*b?kDYB8{RLkT$}!N;#!&4s1%tM(kN%2Jby{s0!Cz#~McI`yxP@huV+twhF~W#LaXWsNQZ;P98ccdx+e#Ez zcZepp(UN#eQ7r94cE*h=i@IPVE*vwP3Yb<^nX2GnWIF|H& zysi!v_)7{548vVoG*%`A;5(aPSI3-|@;e))`=TY6MO`BDWOC=3=+?F#fNBEOgmKNh z@-P;5XYeAzIU{U!!($X@|biRW?-MWC|s^qBR5?xD>ds^hCManPcmavIzwKRTkld zu8P}K_^h2U#pF4irru_mX7Raz6t6B=cYsDQssOXkZmDpTB8RgMYv$A|PnKOTod3E_ zl^4gMgfZSwR;CP@zi+r{H0MQY#*?f+KT+VABC8D9t0{zHEw8gMK zpX8NBO7!z|d_ofG@>nXi5e}V`Kq+-yz*el;U9kip2pdx<*0IN!?xN3v5}Ed+$1lqc z%VDG<;dm$@h%8-?6_)>nccR=4cOrRto9|nlW%;DzklVG*SKe)a2L*Eu{u9-&N|qQ& z_-onZeFz)NSJ8>%k?9Bkp_n={_HTXw7zbn%8b8Q$BxJKiT*@vPsTh$Vp7I$wIpXfe z;nGY*LA7Q8v?=Lx!jTKEQOO7C{Vd8?`i);)q>~BY`XYV?E7daXh}S$r9%&RwoMY`s zC(|G?%QHda)HWV(KxF&frt%l(xbR(?M%1GSdvl_i!;c!ABc{WS&erHF)6(Rf&gi&o z*E&UuVoe@KBN$b(8K?SqoXIA`8BqbN#qs71=W{x!JJypA(~TYX?Myy5WgB4?C5F3K zOb!#R8wG#yJfQ3}eNoFdpDHQ4;TWp}<6pjQqBZsKVV`+0ly9LrHuaLcF^A1ymWswV zDMETs>{VsTw*~rV`WP#zb${<~W1`y(P?<4DI1)ECTT+6*ys^Xu((jUDxx2%}AUR-U z?Yc+r4e=KIP)@Sxg>p0*21qdLsXLi|UNIZd8L*G<^Q~yBe8XLUx2G+rsBLwdO1WupQ~+$;lh2Ub^TspvgxAY{lv6&4%RkUN<4vFjc4nfB2_{6qdDnXuyYE-kN zy0$$=U!E~zlHYNoZTp;^JmZd)j-B2T&$m6Wqck}iIum7Z0$!>8qG8L zjCZAUl&$KWU*_v7?M1ww_pZmf<=>Y3{t%-F|%x{j+T-?klc^rvCjj_ah(wmk@2?9(6X zj+-n<+kq(h^HgNVZGm9>k!tMoTv^9mxo`W4G5X8WXvckhXZx9B?919o$3q*W{UQ+E zYZ767jbFccE3xYD9$V*AK~eKfKGW-wYUi_GNXuPa)$5sK=gX&%j)z{Rx2wd?zxAh2 z)qkqq?&>;U&x=VOH<%z#Go5eu8aVeCRgl-4PRQFv+~#XG6dDK`HwXH2)YTm7z(>#r z&YTYdAXpW#zv3V`^&B|;oR_^%@OB^smmCCz4OpKX#264DC1*T$112K}sS<iueB93^IVb%TA%k&G3WCoAp^=4_kdl&+k!8R+m-dr!ij%LalO-4sOOR2j=TYkC zeZ?oEvLmAsA)uzp!}rOfi6OIgGlDf$SYAbUQtQKz7sES3!fiIf8#W>;HKLmzVo2ED zw9I3?C;KFW75p6h-8`Fh)c+BArcSl5x;eLaEaIw0?z8uS(2u@A<|CCPilRJ z)p7^r17;t`Pbd@M{6t3hbB}vvSrYQBt4W*38r89O_)RLx$n@+Ub&KUR^R@0YqAU$z)T_^57f zp&QfSiWJot_thXDxcN*&@CLLH=LYa=u36?dRN)jlf zi5`%SjG-BIE{M4=p&8iyj)5=}H7$rZTk&<>B-bZ}gM!XC*o1leiUABxi+c z^wW$CGn@?JHsv!C6|)KqA&>NP`V8}C4BEhoc^BLK*N=-K6^k(pODPpgzZjN_DwZo5 zR=^c29So}j6|35Mo6R=a9t`UO8JA~gmsb@V_Y9kF6`SykTWFPAxQyE*mD^N|JB*b( zoQ%5ymAev*dkS{R*x4{t-`4FI4_qL2nwk{{A(e-Aj0-W9N59VZKQkOxGM*IKwG@3j z8K^wfXE+?MJX^OLPGLMhXS_(UIlE`Pgs z!E~p7(IQfDXI6FZVSQ~^_29$w{R`7$4AaxS*+UA`b5Ru|X4Nye>cwdPsiW%Myaz=v zy{5ypGePbzNR6r>@YPTVMt{+&p+8+>E;GR}F@F#=gyv#~mHdHHTLr684ac9{QA&sxIF?6GblJ9)yXto`~09fih>`SR3IjAwYfB!Sc-zbF$c_cTB^2U}eq@BieBI z+86pq3Y8n~CgiM!m5VLdMqG1uLdYeg<_nuoX$^<@O(9A&y$ma__%Ew+xw zQ-)7kHEOnx2Yr#Lk&Q1KGNPs|%Xg7VxxgksEtjzC=o8K=2w^L$M-$r6;K35-LT48# z?iZ%M6>nz~6=WBi&=!_t7uTpSG^`Uhua}Tzr~h6r>3dtw!!8xeE{(p-pUN&%%%1;L zC(~Fj`)OIMvtDk(DOjsWRli?kre5K~iLRer5yGyNh%14>p^VoM`c$t>-JsH&AjQ<6 zD##)6lU+@b<7*_gtOkd=xw9l`gSu;jMz0~+OCj3+twyRdu0w-Xaf5d3($&+db|;7K z2~c~GLvNvhFSJ3g?sD~jh4`1D9_o4R#OU@2VrV5bzK5Mx7x}`%hdB2f=F8T#j6gH*J-gyp2wZTzarv&IVjA z2*LK|T&}KMs+x_ip%2bCV7JspcPwMc>_(5O#?Lz(o}FA?O#KdnT;9D8Ul+K12D#i0 zxO^AxTpqamUhaJmxcyT(+~4^v#RorX?m)#mUoP&Tg*z`v?%B{gZlt;H$H2; z&_=FU+UwBRrjTN;@N75RPuvkzk2>GEBeU7G%wqv3p@8B6m#uADD&wE~O@9R*BY7Py z#3rk+xy4T*-0|kKLo~*f1tI*q2}8Q$RJ`t4ZaZY&wSN^JW6|p)@OKOscX^QDaH7fW zo`F9qlq97_WXt2ihhfv)P$Ks(g3Wov8V4K2B;wbRJh*8n;NA~v2H88`fA#NYOCiQJ zeN~V~G-eema0=({m5&lEj2v~x4ejH$?_-jJm3cPt5=lVgl9Lno^3ZkVF`LNFCC1TO z6)Wq(JUDmImwY@_NM|Lh83AC3hrZb54nk@cE}`B0mQQYISy1)`>(kAPTWBRoYJA`J z%PeL@ib-_na8A=uB)meFUyJ1LrfO;@Zy;I{bE32=>XIY7Kl^~C2bI%UUnQDd0 zF~uhf#kjfZ(*o{_RSHYdT717FHrs4Q#x(o+5DoibfVbi*~~KAe@6>b7qj{DQ08zIOz`bF zAote=ZMB_$sf~EIGugQ6;P-b^e*c=DM05hmdnJhwX{u)V)V?GnVX{d3+Aw@6MPNDKhe=U*@(Tv`tiIVCg(s+nT8pg%m$mn4g+T<~&(Rj3-RO1@&QMDmwptFL7mHD+@y$q;Le zDueD29NrWgtvd6mqOYwfIr9EITRj!-msC2fu2=hWbhXJ99lr6)%e-kn40}T{sMXuj z?2QLwNhMSG(j81kQP;Mk=v>(*Mze)O!K>_+tx$#H#p>-D&ejW6hJz{mnJ%^~jrMf~ z=}V4Ko>`FBeJw6m`<+347{MS<7Wp` zzGf};^{Puc(}Ssk**@Mc4_5~Zor3kQSsDH-wv2Cx^vq>@P;5%wa0E7!-3X*nN<9GD z)sa>x_feZJB%V`d@}Pi=xWAPMj4t&T!wjBLFlccA}R{7O=AA| z;-EGyOPx2Sw)0xzp~!V?hK7YR6_z#0>N=EldoDWGWzq91 z_T7c^t9GN}8mms7dJAjTE5WI&uD!{rYwl--536n`XRZcbuV1+~{69eUA2vKO<~6<% zaABcs2I6qK8HNFhnl?kJ$2GU3S@yZNA~?=9cVn5TmbMc`IeGTNB+ax;WA$Q|h68N8 z=l3)1#|hMQPPdj0e)+#?9p;3SEFb2@3uqq|r0Xvq73KP9AD5K=T0Z_=)1iG*-u#~T zR(8K>pH>f(tenOZ0)^2C!G6?2@>OUWq4mu9*{hrW& zIcvUHf4PWk;di2h_so#Vn>gBtSLJa(PyNMu-FM=_D>_JJq1yD{C z!KsW3Miu^sY=|#PFdi53!NdU7K27xFd0gmp*(U@~d@)kA_%QKVUD)U}F-pexaQUn` zLq7=lO%q@~v_;wNPy8KkZx zBGp*wFO?CgHOS}!{TvcNPg{>N=`vqsSmWWJ1P178&qGfZc9b->jCf880{4 z;xI0jfbl>#tPJ-g5zL-p3}?G*vKucdTFkg0FZi4kxTj$3YuYh&p&MRg_k8{pl?mtT z>exA_L(v5qxPUwa#1{H6%b;|nbh%m5dwg?6?u__2Lbx3197+PHt_d)d8d4KBjTjG^ zeA;+Y5sBI~jd(M~xy|q7(6%E5h9_F6EeV(~%pqJzf|6P;ZeKct;4?X1dak(rbur?V zr2?(W*Q^1R-|n-&%>r7!W~AMa8R%)~2w9>7;y4^aF{S7{c;Z|rgz}>5>9pxA)tS%g zOWn@s)Fd;6n3t=Hf;nv90t2O0P@J+lE#Vk-u4Dop#U<*>O(-N6K^f39BWVGrfjzQiv!{+3pYGwi8k6f08s&D?olk>2R3d?6d zuxgWH-*##WQRx-5g(FNdaO3yh2TKj+v|_bgVjBA?2&#D#$My?w>g$8;KV^<}8KpGu zo6f4(5v|>bq^67)3|pPW`z0A+K~>^}F}>{f7LlYyG+pp6i81}YQu@=6u;3>&35Fi(VjV#8@zGMys zvpiz3$<_}TqWH7_d!i9dYzSJa#@F_PVnA0iwhRs;lQKX99OHlmeMV`oJ!PbC*CT;h zjiAD|9Pv@7xsuJ_I+n|S($Q*Z5XaD7DDl}4CXfKJozDV_;u4+trgqG_%ptb0D_;j} zG+;|PB)CN%Oe?!P%8%BC8YtEJ65 zgHw|&)Y;RIF37y6Z4fCa8=#S^i$0az4pO9a+6h3hbfvJ_Dl2;n!u0k)yq$!|+5({J zZU}r@npu-pJsvS9!OCW;9qZ(HIYf+QO6UNkTw(q z(-Qf|-U%XOzYoOoN40lB2tN?`K%OAuL;Y&;{vBS9Gvar?NY9q+)=-B|o55$!9^rcU zMJL448={G%1>$Y8mwF&Pi~a5YZt|rwr1VJMdmQ`z(Zgf#ly!Ii`_U)mQ7)aAuQs&1 zQ?I(4zz4em0swJ*>FTzQsc-|?AWfwL&zF8q{vIOm6omm30`dgI@*)QS$Y3~hDc|sq zmudF#B-N-|A=xe<7tj(8yHoghCAdpfC!ZN1Mp*P@>NusF0lIk7f=c0DtBe zv>NVI5?~X~E3j5?(Xx;(ID)*u z=>`)5ovQF5>S8BMEZ8Dq`siZx41)J&aLE!N^8})`c+ks)rv7H)7u*of7y_Rj%^u7H zA^wmcTo56aFocFp3SIFPkH--Sg7@gDAQAuw^y?P&>jkd^pK6KdR1u(dL!VZ$AvEq5 z6>TE`Ko^%07cH;>^$7r4>bd`Du_WGX+mbONc+t(6Yu@sSS}h|uFuK~nvT{p4lAz@h zKnyQWrA*@xBSO!T>gP0K?`SEyGO`%`smZo1qyn-aAaNuFBM)1zA;NJY{vqPXfFm*D zA525ySP##z4Ezj2mvl)m!f65*%d!q~_2jK0)yyE;px+Kq-vMO@}Cuio&xPRwvi^B z4&tutqu_%P9b%7gaN7UiPNTf?!Su^13CzgCk|Fp~tpLCx?+eAY@)TVupH40G2tqO& zYsq$wBF3re7VjpPvO9Qb+HN8V#}LFyC_$_;HB}RJMA4SSqxzN$$JEjs9ft~SsUlnw zHegbi^b+V!tKYPcB7UqU4)Y;cZc`AEIP!9oybqg}^0bC85pm2R32`q8@GUGcA~^6> zB(e|>BAz(Pt4gmoG4Uw-G|5JWGr0Crljd;c)bTB1G7dw{-)5p3DX0}! z^FINUa`+4`5)!4hz+qTQB5Xkkc|!5}@3w-;2nq8th;bpRt}ZWv^WXv>wKEUnA~#QM z4{bu9;1W8eKsf&_jWP!!+72`)8jeFXBBgrECPYypP|C}4qDF<&$a2CSqRk_MLkd!A zS}G7nnQOBwG&7%0vrZH)=IiSqEhk{KCR%bsfxrPj^0tKZ(`;e0>f+DfLhC?C?gF$- z%@lFqQ3}Xl6Hv^P?oI-7sicbYAc~6H4pboUP))%p_#UFl9&NFX1GUbP2QOl-{uHU; za3WGvPmyX$Bj+1usiY8sEH?o@g7DRnDo*ohPB8+-;8d3`H6rqB%g8`dE28?;lueV$ zBh>1@6m6~6Y8ETfQmL~t1wsrdb>w97G_Y+?6Lrb-DVM}9sXTB|*VM=kk2gn?(wgsA zC#e0-G+O_q)meyx;&c%h^RD4?F#u zdX z)gk}v_9bqjZ|@dQpVMLG_8r@HvTC(#&sK3q$UnXIaUu5=XAKDU_E&K5aH&ZjBX@H- z_povzBylE3%aPciGI2ZibWsfIJda*ZqwRd|L19-Xjd%-t+ z#rG_(cYMwFe96xPk+8cE7iQEqH@DxbBSae%ZH!MRv<)jLmqB z)A)?lxQ*HPjpf*l={Sz-7>@CHj_r7l^Z1VSxR3exj|JI}2|17p8ITcKj>Tgq0ASm2 zB9RYykPUf~A(@gTxsoyYk~KM!IoXmsIg>wmlRbHqL79|Axs*|PlLbeA3FnDjS(Q8r zXgrE%W;vE=S(b76mUY>ddAXK-IhT7Gn16YfhdG#uS(uUen3dU>nYoyqIhp^P8JeGY znWs6Lsacw_`I@!anz^}}y*Zn^8Jxd)o5wkv$yuDy`JC0+oY}dYXW4EWdE0I{Fw(i5 z>)D;}IiJ@VpZ8gx?YW-;`kw`wp9k8X3HqQ7I-vs^p%+@Ax!FRsmbPAbqA5CyemDT) zS)PMaeM7jSJ^G`Wh!h1Pqm}r3^QehII;B-QgciA#NLr%{N_}H^rD?jRN64c_`lT)J zhSOJvZThEy`hza|r5l+7UzmD_IH;9+sV4}DbDF46w0%*Usj0fE<7cRex~P{}d1um-zV{e8VApXgrZQfFPbtW554X_q{p%#8DhekXXOR z&p`c)#80=lQ+&qdhm@?cr4LGMkuUFtJA*r$vuQlYg}h7f%Qu?S$lHOw!B@tIyva|; zo)lbo3lI4QT%@D?c1_&LwS3D}WW{$xxh_1iwH9!>yv%cFLbvzBiDr?De7jT zLXio_oN*10b{V~mxp1r*G5S(dRM?OBeGgsLmAzTk^aB6sLMKfZBg#)OH-s!-9O(=X z)XCCDdZNkB9D@T7lgd$xE+;1N-YAW_h#qs?yz9Z9buw%V zRNf@ul&-j)z3nZ({xR`{RM|u|=%h=Z0?*tWF6{p^XW{XF?<-|Zk=`U4GOmX668Q

H=+|`YujFdjkx~qau|8HLBF9RI6IOiZ!d&tz5f$MF~;jKY{@yd_9Xct=hG0+q!)VH*VEd zK-R?;pg-q!Mglj5)LB&73=X{%o|T z=%AoWn?8*?wd&QZTf2S@JGN_k2?*MY{I7Bn(z1K|{tZ01aL+&K7Oy)zx$@=An>&9F zJ-YPiv0F(1k|4?T1X65;r4By4`0?a{kM3DMz54a++q-`cKfZjltu}4hL`LuY{rvm; z|Nqimc^wB}fd(FkV1f!R$Y6t5eFy)cgAz_iVTG-o=aYpRZpdMW9)1X7h$4aq zcwCD5oycN~F1`q3j55whV~sZ6$RUP6;mBi;KK=+~kU|bgWRXT5DUxw{;dK|1PCf}` zlu}MfWtCQ5iRE4x7L;X|UVaH?m|~7eW|?M&sG^c*uE}PbZoUa;oN~@dCs$kYR%f1i z?#XALe*Ot)pg;aW$Z-m4sG^Qa zYN@84I;c-Q?TBituD%Lutg_BZYjTC^wPdZj?#gSgzWxequuDlQY_Y~3i)^yWE{m$C zKQRk!w9-yXZMD{3N$j=SZp;5|x88mW?tg^VWoWqOo{Mg}>aNS~V%fF}Z@lu(OK-jQ z*5vGp_wLJYzi{FPaKHi&OmM*lAB=Fq3NOrX!wx?Tal{f&OmW2)UyO0a8gI;T#~yzS za>yc&OmfL4pNw+KDzD5jMmpl@Z_F~!oTYa*+jDcyIPa`;&piL^bI?E!Ep*XDA8mBf zNH48)(@a0@bktB!Ep^pYUu|{PSZ}R$*Ia+?b=Y8!Eq2*tpKW&9Xs@ky+ibt>cHD5! zEqC2?yG$;w<o4cdd+)yg4*cJ@GO2Iy z#vhM-^2$%E`tr^{4}J8~gF5^4)?bf(_S)0g{Px~|4}SRK52|Trie z@*fX>2*e-?QCkMw+Ypb4L|#SaI~&2xtDKlb2C?ukV~C;^uXrP~R0%h~XyPxN7#W<9 z0*ec(AsNqz#x(y%1d15J%|UK+!;0Kyj*^i~M#8AZ7ELjaeC*>6NwEbcR^%V;kU$c$ z!yQ}1aUugj*>M0orn9vNawivUcQyA(@9YMhf<)#zN#UJsa)_Sx>`7RD5*b^Nf)uT&Wjhu^hKGFQG8mcWMt-56gLo$Z|1d~1 z8)6VU2EhLy9M$JQ8X^VB)aRa<#2GvVdQRE+Fs3xEsfB(a1w<0$9|*~gLgLuboIX+l z?f5818~MmiishM(ltMo_gi}W{Bs;v307M?CkY;Y8HUUT~N0J!;Wx9-`8#yFH9yt)B za&sb=v4<#q+7M7mwV@HQ#}*!08_3wSH$^PoUjGW%0%^ydLKP)Dw@@3ga?}=wl)^#C z006Q~rjc7{1t7T^5ymE969ypz5K;=Fe=MXsZiVDMBa$74k|H4~wTETR0!oJ7aftx{ z0L&=Tjyl3LBK2X&LQg8k+O9PKo&_avYik+HA{H+Vu}4m&0MJcbN3Vgskmb-*-Rx>t zK2HB_=0cJH+)ipS05}cn4aFPAu_R!cV>vE)bJ~iJUdFu}x~hDMI}yc>G$FU4h+1*m zTkw`OI})I4MgFTx|DLrC6iI-7x_B9i5;qC0WC(3Wx?Ra!{#)D1(0Jsw({?;+479AvgCo{9 z(}OE~;hSMB!I|w~hMGlre2rTGKp=4wYpgWQl)Zr!ek#$_sRCaVH$5sHrstGk~M@HUJ zcmr2A0p;nW=lpZOI63fyFT7Q{_}>x_mJCA0Q)RdeNbR(p$c7ASJq>x^AzP?6_c=B| z7nuD5+Qp7HP^ap0hR*5UysoGu&r&RYuKAIg+US_jT z=X~S^V)(vnJNe9S{!j+ZL{bRd!hLYS+I7eL2Re4Izc42@Opc(R4Y59TH|8^hf^&b_D?P1qAd} z8Li-Eoc3-3zRLS}I3k zbb(+wmRWXDbrjKpWd?&9!A~$(gB<69^ie*c6NE)*ghMe;Ad!U2HW4>SA&^B83t>^V z^;Apff}aKxrIbxrXkj>racy*j1+;2h5{6}HhJhkO3o&((VMsv%glFg>%Lj*ZNQY|z zS(Sww4>f&tI3fwhhkpo&V{%sn=2cN*f|F;d$cnA#iiT5)uPFbEvq+2I@`<&Gi@B(a z%(H5&vWve6jKR1pJSU9BXpG0GE3t@-%gBt)s3^CHM4af1(@2e+qm0#vjoGM;W3r0d z=#Ae9j%RX>;Yg0&T8S;)m@BkMSsveW-|*G>`X)kNGG?W9WnW=#T#h zknoX?0ZEVrX^_e>jt8lbwZbwD>5vZzkr6486G@R3X^|I+kr}Cx8_AI!>5(5fFnB{e zM7WS8xhy}^MLLs`C^=Frsgf;uGb6B46L34mvA|ja#@#jX_j`Gmw1Vme5sdx`Idp{mV-H$f?1e^d6$Nn zn25QTirJWq37C-imy_w2mFbv~d6+ljGW=+go#~mMxf%lrnxjdYrKu&o*pH^Enybm0 zYe9^y37fGgn_H2PvuT^RiJLAVnz_lFz3H1IQJcRhoWn_+-AJ6riJZx~neL;U&FP%U zxtq@^ozwZ5??|23iJheRn%T*n-PxJJ>7C&zp57Rp<7uAfnT_Cyp6kh;zi6E837_$a zjp`|%^=Y4>Sf2N(pZnQ~*2$m$38166odHUq1*-pv^l6|8s-T3Ip9|`s5BhTm3ZWB9 zp?&tA6^fx58ljx2p&hy{V7DOB=%KPRASL=6oG_v(N=pEhaUiOqC*hwjDx;_3q7+eo z6T(byv|BTpB=xw1JPM?s0!SQjeZJ=)Je5-bn3_S_5faLzPdXxRNM0Brr6mD`ONvVv zwjrMsc?^N2P#}qK!BtvjFZf`nnQzxfvG*8DA zAKh_7(nO{p;iQ2|r~rac9mP=nrBVzPOiQ$Dxy5D%wpc%^gI}aiGDc7Nfk!`K7WrX< zKcPsMYGEeGO~3F@ilnBHm`;V-As5Q3uL}PnPE~Z(*G?74dGo|nlExj=wh#vP4~OK0 zXU1+e78Hb(q=%Mv3_*bKW@EWVfwpjC9Oqi_c4!HZfXy|lhjyd$aTyZ`tBk~(OE(4|yYm4LReRiI^A#+M%vaaR(M zdlbQ72Ky7dM_u^}6u{=K?ZHe}g?{8ZQYES;7OSxvLS+kKu>IF{zr;iXApti8b#}C^ z7-4iocYXv*ff@k>fVM`!+FUthRFvu-b|GB?wy_lvqqB5+J*z!x^>1h@Lm%}E{B>6q zTM^(E6eY{28F7f{W?sE?QYN;e@1g%ws4BFK$&mq51u6jo4|1$b!a63P^97ts#2F|Oe8O`q$kze~Le zQelyi5Jy%SR<^4pK^s8ePRJB?n)VTn0cM{zZCrM{{B&=o7Ph=wz40p?rF2r@1XjwH z1kGe`CGoG!v_xn}Ty07boofHTc_(jh^hJi`y3k8uTlWu_@wgk?x$;ZF)bYLgDtY5uzlsTZLEA=EP;k#1pZ-BsPeR1zb$^NKQ2$Z?(lR z{Hg=G!(;3mx=Rrx)kJx!TXDJ(XpDm*C=x(XWNyqKID@kq3%_Kn$KugZatx|@Q-B%B#%E_p<-VtqjYt94w$L%e8FF!t%DwfR4zYNUAlFPwN%*E^| zv~0}Dtjv&7%FFD`&#Wn`49(L_&6YCE)r`&A{3Xb&&E4$HVRFsiEY9Ox$wRn^(l6c8Fiq1cEz>o<(>k5gF5S~W{nI#on9I3p3ysuCO(gNG)J^Tw4#Lh) zE!9))9==S~SB?MGz9zU?&DC8kAx!PnVJ+6sVb5c2)@NNF3XRrl&DP-&)ol&ealIH| zE!TBz*O>9vcdgfZ4Hs6;*MAMzc(&DnP1uF48FX#fiLKaKQPzv?*pKa+Ukllj9V0+y zZI-=-mc4A6O;((Z*=uFS@|o9^P1<`~QbR#Z3X0gJ&DyO!6Qk|gv0cVX5!&qO*RqY< z2U6P`3){Kv+rM3dw*tq&P29z86OC=$$xR+Q+_h@0+|Lc&f;!mIeaorcC(p~Ot4-Y% z%u}Sg-JsFi-wmZ%yTo5b-dMs<>pV?-N?*M zUSPZ@*ggNF+Rfij%ElZ85m=W^b;{rq!N!zPwYzO3@8l43)NyoV;Rrr$B2`Qnj-kk1 z;9x5mJjPN>l(2arLpwr95#^;tB^It_Pl{?+Tz1Y_f=c5h1*rs5IlfK{5d|kD1s}_0 zI*v=$p{(Bhpw1oQgquu-)_zkJSvLl5qGf1G{J@2FXv$lClJ>S$5(S1fRoN#IpQWq& zrc7o2w-6fMOFp3>c2B^jMMFw~$mYYF)dng@Rn}C%1!p*3ls|Jy`G}2FstV~5<#Kual&p!m*G;Y5U$1S92{A(-VQ}wQP2VW*|F6Q$J z1ohohk0DfW8)<`uCaf9)e?L!I#VUhFtTI@GJEFG`(7Hd~{b%700NN9Cd!rT84 zJl_yroE^tSx%u1lXTjcI&#H3<^YJwjJM+eYF7{8s>uc}!;%xJ8FZb`v?sISV&f(wd zspNOh_i+K>J=^wuFZea__b)N+Ll>ZNKlqD3&4JJOkM9zNuM*Sl>;@Y4kdOIX5g~xr zg`7`to)37N&vK!!=1iaYr+?3ikNT@`%XQECuaC`p5Bsy<&5lp|w_nJrkNdly$+pk? zzc0U+5B$Ub%f3(i#}Bx=kNnFY{5Z_~&mYXP5B<|`%EnLq*H5O(kNw+kvDVN1-#??m z5B}zubs=f~<&XYxdj9I4{=2mP?%)1k6#sS#|Lkx7^^gDZfB*WQ|MU+K{{;UA5Lj@a z!GZ)4{!@ssp}~g<7c!g}@!&#>6fsuhxY47-jvzlm3`ugN#FH0At~ALKrAw79Wxkvl zljcpEIW@xES+gh3pE@%REeVup%AiS)@?7e(snMcBqbi;HR4P)dRIyg&y45Swu3*19 z4NG<`)Uyl&tYzD_m94jN;o53j*X~`sdG+q)+t=@3z<~u1CS2I?VZ@0QFJ|1>@ngu5 zB~PYY+45z~nKf_b+}ZPI(4j?-CSBU}Y1FAP+p@>nb!*tKWyhvH+jec-w{_>{z1w$h z;J<|jCqCSGapcF9CuhFgd2{H`rAMbe-FkKG*R^NozTJCw@ZZIUCqMt*e0lWe)u(5_ zo~~Y7?OL^qKR>=|{Q33o=ilG|e*gm%a6keJH1I$K6I5_P1{-wnK?oz1a6$?zwD3X< zGt_Xy&E%4cJ`O_^aYPbJH1R|fQ&e$97F%@jMHpk0aYhm^CYyBfNhqU~a!M*w^l+}Xs?>5zF1z&dOEAL}b4)VJH1kX}(^Rv| z`snNNzBS{Nb51(zwDV3p^VD-sKKu0ZPd~4e3s6D}HS|zK6IFCkMjLhXQAi_walRjU zq*PK&Gu3ocPCNDVQ&2+{byQL<6m+gqQ&n|UR$F!TRaj${byojcV{G$QA8XZhS6+Md z^;ckn6?Rx+`8*ZGVv|*NS!SDc_E~77m3CUjEcFpcYO~dLTW-7c_FHhn6&K1=vmEza zbkkLLU3S}b_g#1a!$Ue@eDl?JUw-@5v)uRm6?kBR3pV&*gcDXcKuX`lc43Gk zmUv={E4KJzcLBzDV~#ua_+yYm7CF&*-5mL3lv7rDWtLlZ*~DW5etBk^Yqt4joO9MW zFl#H#b!VW17J6u+i#EDmjgMA(X{MWY`e~>|Eg86 z%QhRqhI>AHZMNHX`)#=6)+=eb>$dxDyz|z3=Ba<)`)~ii0~dU7!rzU#aKsZ=d~wDb zpS9G8qnCbq>IsJY_Ug0OetYh_kM?)( z!xw*i^2-PHc=OX&e|`4b#}j<_7f!WMdoAR732!QI2z@V;!lKMmy$F zk9*AG4~ry5J_b^dgCwMenpj9gCQ^}$BoGxD`AA4cGJ6zZ3nhPO$x0GLlWV~wCpCFV zCE-z$qawgA(X!z5-M zWm!yQCR3SGOyx42`Aldc@sQD^W;LxjLq}dyo7?232#?uKaE4Qy^lRog&3R6As_&cW zWM@0wiM(FEQ=apr=knHBPkiQ6pKaS^V#@!yPk;tgpo!|IWOP}kX%1AO3uS1m{y_#Q z6jV#uY-mL-dQni>gA8kl=$P(_QILjIq;+~|TRNH|iB@tTi}~kBU7Ea=zVvSPAVmNq zkOZ6t;H0HVX=Y;DmVdOulZyGMOpV$)gXl6LNA1`|oQjdllr#aOSPL1FpwnOQ)E=Qp zsx2Tw5TR~itBZ*zQ_UJYfowtwR|SF;w!oUhD7B}GS?XDTwFNS4VxxNvKwkH{i2&eL zsFu;FO#vH#2n3)NNsz!!LsQew2*egO-NY8Q5P(gPq80zJM=S8kipCVxuA{}=KV)`Q zwvb`2h*>RQT1(nc*<%ZprR{8OTU-C!4z@BvO#o!wa@E6f6|-5j3~?*jj=b8I6r`wa zUjyqm;~J)=u%&M2g1Qy}B%rNHNB{uVBG$qL*DhnNi$r^x-Pcw(qXF1zd)fP5_r~`! zn~;Ebe|y=@_~S3>4UAg;K?*W#p%wLDi+%%83()qJ75^}BCJmEN^+vdJ#_cUz>~Yhz z==LGyU8+FvONzR7xUN7Qh;hG4kbwPS#1f`ebWdd3Rc_U{D~`;6XRBeLhLt`Ct(NVs z6-O2a`Er0wKmu@V4=Dg407+QsKXzOf*r>%GzmP%z5SRi$EqfcmKpxe#%$i{DDtl)R+4tXEyk z7$;*EsK^b#7@WI>T(ttQ{`IHB=;di(FOIyMUQ4G1!(H!MIlGf)3uA%M-2|*90d@uq zDIUF+XJ0wkq5|+*^a|;3Gk2pk9k*wsVC2qRmkb1Mi+=6f?Jzs06#;&aKv*$`EsWu? zV-PAs{2|m0-D`Kv~~L0$)XzKgf_UOWQ*I| zhCH{F`5}4x8eEfC=G6Zw4}i?t!s?c%c`s_wu#Yz3RUQ8n)kOWVk30VJy|p6Qe31ZP zSdQhp006uU@h!2%+!l-b(c&xzx}!?&kFjE%y;=_d*WashU51^rV;6hbCllvE=Oxl? z>9)%m6LC)3x)q((D=TO!vsUn%tcFHa)&2f9wH&tSc!7IlGKkv3|HbKl2bFm%vjr(c zehZS2eB|9qc`0aN;gJa|)tze>wLq33uP)4Wp&Qs!=gQVV9V%j`%Xrvl4YJ0ri^4C% z=$#8D0Wyz0u@;*E#&S0a5fDD{flvGh*w-<6hUGxUz-}lDbqt<2%tlSFQOzotAhlpU zLpDKup79-7y(j;_*bsgf+xv(2<;T;g-A|d$_Gmt>puha(FI4cm9%x)K3||NUEoe8*u!a4DB^*mV z$jB;PQ!N0*HP&ba%IY_Q@DVF4jMvjbJ;a%c%P>DeGVe0B8RMjXu((J=yj_B;wMfFX zGcy1BKi~ga!9C2A)~E-2s0UlHMA)#0P29w_5I73Ky2}DFf2%2(Q8%FiMaIa%&62*b z$}4;en184T%i6Ob#mm|#AZ$7Lh{CPfgvBF_vbsih%$d$AvSNe0 z0PrpVIL2R4vS@QF?qasK2rem*LqAfohoi4(0{{&}wIr~rdb|sJc(jGgzIRNPu*-{h zBP_+*BuKN1+p)&IpfxgBFwj$odlN8KEHojUNR_mi->VDY^Txn3wgjlGIpZ!0Rth$it!B z%8ro&33#^b3P`+=EwHRFNYgGH<4I@(f=xTO>`DSFY=t6wHYuPBDFA@MYl|(=uI|c9 zu9TAwR4mOJOgSt}!i2PJObq%`tdz?^n6wae11(Z0LHeuAjncPud@%8IyT9zrk?Fg= zh!4(mNc$Mex!Vgs>x<4Z7tf3nE(AH)ysgY^jB``01}m%tIKj)vtI^!80Bku{i%s1e zI0gi=);vzVNlfG{6E_jf=6p`)?9IsVN}tTInv#IoM8VVK3;;{8u46A-V1-s-g+8o0w%gqpxGSSe=_RLTHbR{WBthI=M?2HnE+fM=o8Q{yw z0{xcSq)#zvM{x1T1dY(kz^liU&}{L_0F@A2I?0kl&y=)K5DifgWefZqQ4>AUm4q-~ z5k?ekQ5PK`ih5BQol$ojP#V2a9QCvk%~2lhQAD#*BpO2>9a19I5eF?&Bu&yF15zbz zQYQ_l9eq+Mol<~OQ7XMsEY+THq$<;+qs9aFPmQZhYLG%XznHIpb!Q#XB6 z)R8Yag)cgtQ#-BGuR{_ug;PH5(?>c|KMhnt9i}}UR6{*fIcifxT~tPuBP;)HR7j0f zV=B(!%n^5xR7}m(-6>Q}?bH_uHKYtxP#x8O5H(X3)lx;(Qzg|^O;uJ^RakvhS#?!f zZB<*1)mp{XTbhRS9pC_d39HMUDnX_HIwmF zeT5QEYz_AE*R7%pP88Ud`&WV$Sb#0qfqgH8Jy?Tf*oO_+h*j8xZCHq1Sc%10igj3x zwb+cU*opPnjlEcq?bwh#S(8oKl3iJjWm%GKS(trUnf=(9rP-MsS)2dOS)AQjk?mQO zby=PDS(U9>p8Z*(6zgt+m>$t=g&e z+O54>u$23r^ivzU|uwS}i~|5;yZ( z!Yy3I*;~U+T*YM|MO|FS)sQuP+_iaB$*o+=9UzJN(#zdk&TSyX?Of0eUF~UH(Jfum z<(|(yUDaJ(;0avTeO=hyp45$9+O6HvAzjeU+8tzPWS-snAE?d@LgwVUSsUh)4O-=gVV@;zVlWg6j4 zU-oTZqmf?sjbHhdnDCun`$de33>$$6Q!0hu`&HhjVvKHUi!L3R6H}?5(hG#Y=PWlB}gJ2D_HO?wyG^3fzG`Yd@5kK2t zIn3L<0L`_~9&9(2+x8;gB$kH`i)3>MmM^nx>z~bMHp^Ghu#1b5<05j!H zkh_#ZVW6rhyjreNY_lHqU{TgxKPw1wWViVsE=voHQJ@Q7xWi8_m{nGb_sA7A4!E`O zg~KXfzQ`3;@UtG4WeaWKV|L$Kcnbi-E2<(fU7E~1t~?1hE85xW`zs_G%mm^nml3j+Zh8Zx6uFlWmv?k#=tjy!?(QRU=cOqluqA2 zBu70nXP|*BG~Qzp^)^zd2XOWa~oEVS@Mt8N{z2f-G12H@iq> zwE(ptMd`YRUccrnVnb!l(#V}zHMWp5w#%@1z6;12Hnv!2Ri?mSph>EXKS2J_$97-2 zPU6h|wz_cbOncwV7C0)-?00sHre?22-UL=qK3&^6y)v-9_DpnMZSB=7d)AA4+vQDA zLEdZ&Rv-gSn63A4?zS+)F}OpPnXT=vi+}&4Eiw?QUG|$?{+V{@X{=-}kz@;R_U_EO zYOD@q8aS@jl4IlB>jcOAYmg7!w7H@G$DRCE%aT)g#0-tdk zzwrj$OdQ{F9tV`H?r|Uw@-u;PAunZ!dRj2lsO~cXe;~acB2;PxpA|c66tAc(3_kp)} zf; zqHmO6d6qwnIB$8Fm-9f6d7A%+@+qeg2d{aZ|J|A2d7lsRm;ZU8ukw!{dZT~yGe3Hz zpYxtydZ!ohpnrO)$ML40daIZ4o4Z{M;Xe8XoD3&zx>KYYgDj|BD$ zzx33;Z+yy!LK+m^z^{DGhwQH3e9uqky#IXBCk-i%;uVXj(ofULAN}==az zZV1;Wu`X`1#K&jXPkb#Vu`}j1P{rtoNE3lTF3o!UzAFBPn|*T(wRvj==6BP~XMGcW z3xSZsqvo*ISS~NiZv6iFDpdf>ehP#u@jw3lg8u7oxQo30rBo^lJ8kek zD9&OoJ446$A9R2SAaEeTf(8#FOsH@n!-ftY3jAj)Ndf>BCA9iyuOKNhKq>}Evaz5& zQV9|O3Hb{m%a$%*!i*_%Ce4~QZ{p0Ub0^Q9K7RrYDs(8(hplWKO=_#1t)fn!LX9eQ zD%Gl1uVT%rbt~7dUcZ73D|Rf|vS!bsO{?~7(*zU)Y#ABRo&<^%r8Ffd;hz+Wn*#hJ z6Tq$8xB~+Zervd(VY>lH{cB08mE!=d2qGq&BtW~!1REz1Xz$-9!f-uDG-)>hm1>*B_bBTue;IrFQum(u1Oy*c&j)~{pFu6;ZA z?%uzH4=;W^`SK1ENZDkIlmsAKP}2oM=4fdts6*N&L#k;j01`<3!kZL_k>THdq)3s# zVgn^n7bys)B-cX;Zt>t|NqA0Bn(9hY1E?i)a6Afu1e) zP-dBVRJ}Oh76kPtg@hsHWto2lB{8EwmjQO8l1nn#q?1oJq?D9FLRqDiS7Mo^mRoY! zrI%lV8K#(w5oAwjP5lF75^W6h%U|sjRHQ+qAk@}Kzt9x`n*=35TmTZhlmwCi{Bm1F zHtK~aLBIcL6k3P^{W4&gAssr=USras2Kv~^`^Rk43lS@O@{Z~WNd7!r<@gZnSEpm7Psb`bAFSnpX=SZ=%bTfy6LB* zo;pGsrEBARL`R;`MtN?#8OR%j=G2av$KDcOEk@mInxk#>Pb=<;7Pwq#Qk1yr&qF^m z*-S-Wz4g~)pS||mS4kzONSX=!sZif%xj;L<9+6-bKec@3GyS#685Gg-z{7L z_=tbk+ygLx?~0YlQYOFyA~1mpTp$A*_>xUr3q}Ai7hKRIuHiw=Ll=w@??5%Yi6sBP zd4;o#xbgxpmw4tEDaptMdpE28pvN|DF;%k?Ac0LN%`Ijli35A+LnV>zC_fw`5sPTV zBO;Myg)tFD^cJbm=!Xmm>RqAGqn{lmKrX7O5EeaFlM^$w1*5oA_=qQM^rlWmY@o<$0PzWkXiv<&Vd}vaG;Y;=RoONg(vzYT zX4A7~N?YpEm%=orR{5h$YiiRU5)e)&yD3k5>eHVB)gagmDp8AyI)!Q{oVl}H;-6~hR>Q$*A^{ZkXD_P5G*0ZA3rss53THET@x5729a-Ay? z!%Ek?;x(^&-78=F>aVJ%)31UZEMW_4*ux^WJ1b2rV;k$($3ix;lJ);dPNfsr$znFM zn%yjCJNs6o%KlCreA+TAX9yX)QKR+hKlZPGo) zYu@vsH@)mEu6o<+-uJ>czG-!?eCuo9`{FmhKV`3e`|ID{ZZp6F9x#CmY~TYUIKc{D zFoPTH;0HrE!V;b^g)3~~3u8FL8s0F6JM7^PgE+(@9x;haY~mB6IK?Jj$ZiezU+R?i z#WDu!z-F`(jD@pBHMYl%cidwf|2W4uwy}$W-2PmXWOGE=&2#V)inb!(8SokJ-#>M)R4i?B*)NnagQr^P1l*=QhU~%yizf zo%P)3IsX~Ycdm1u0bOW8`}xp>9yFg7-DpM!deMo7w4)>a=t*PR(3IYErV*{_PD}dJ zqV_bYLtW}ikJ{9#-ZP7@JFgkTI@YqDHLZI{-&*53*Sg*{uiv)VUIRPW!X7rU>lI!X z7dzR?UN*CvT_yfHJKEBoHnpp*mRnmp+uGhXx4Ug!vUxk);vP4-%Z-p0U)J2}UN^hj z&1-18JKpl1H@)49?Rw)o-}>J7bAQe6e*-+=0*CFf(>?$2gCjiQ3O6jg7w+(fLpgsCN zJm)&!InUKr@SX!b=t3WQzEV!~qa!`(O4kz1m+thZLp|z^yt(Y%`K ztaW~SZ=3?#%Q7S0{lPaa;MSwdDu3RuqOZ9ZhGpkp5u&oDu(Uo)8@p=i<*n+SUY(e7 zh@S+K_&$ztuiRs+ZBUAT;~xswi{HE6et@5Z>cQ2cf-~Pfu@uz!5fyl6>;g)%JxE^R z*{-;Zk`@(B&%(podG+*e7-L%a8Sk{f0Y&s5oQm^t`_=<1z55pDV&?0~0k?~|aXbXU zv2B$w?{|!uikmmWOviQYyDa1I?QMuzs_Tg7PBWn|%NxalnlRL#y|S>c;gUbOC@

  • s8~rK{}o2*7_>zH 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

    z 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 OP^-)+f3QbG?Ee8Dhn%4R literal 0 HcmV?d00001 diff --git a/docs/docs/guides/integrations/imgs/instructor/instructor_op_trace.png b/docs/docs/guides/integrations/imgs/instructor/instructor_op_trace.png new file mode 100644 index 0000000000000000000000000000000000000000..91b373cbe2363e39f1da1fd0696e15b32125b4f5 GIT binary patch literal 377822 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

    ^lARRVIWhoR9K1YM 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

    I+|p2;^)SjWKmTh?Ee|)hbks>+WnkS_ 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Ð5t*BRciZzWn(b0Ju_hml-X|Mcz|X z-{OKQttqF{CQn%n5V6|H$b$vx~$<>=PYKM zKG-i)sAYR-8!gUeJVmMPL_(uTHsw6^XhcKZrZ%N?+nM)FPOmG*FpqCAw{Rd|Ubbk? zF_jbpq}G^?7U{-zByg!Q=_jKayUwBfH*KhcV$f#PI6MTfUL{=i- z9N<0Uh|tI$aUaO&13HX0o%DtUGStbPj9it%)$+%}@tXLx=?`@830>$GPlq>?;Jc);cgRR}^ zqy_Bm?ueWoH%AG6U)^xA#Wbf$<)SyOzJ^0wwbTO$>~!7^W}EJXiJi)!t@e@C9>*M7 z?q^;b*RzN#2yt4J6OP6Hgj6V|S~6->D2NtRS!8F6&c32!mZ79*W6eGG0CgRnn(k#e z!ym)a=!Y=A#iA^M5$f<)Ymaoe;M;Ocp-o~)#9r&P=DzllSHa!mrzeN_0q$bGI^F}IeoXq_G zOKK7HR7nPSWKNFlqVf*u+Y%km`$?Nw2aUe>LqOc21(P~d5m^`rrf9z zQ9XutvDz~=Z_>=r40d!F=o?34kpdipt@sSaj3#lW{CLzIB(XBjb!F%t_=Ov?t#rFG zi+R*)pI^AZ)W5#ty*zdGR-GV#c+Vr_hMFa)c1|X8R~$IBCE<6XUp^Ojmep_u{I&@1{$g>$e1EFCQ6SixjuaQQ#9Z)C!4pDK zBfs-Yx&=`vpHF7{A-`2N#C!KK8@!Q>pP@62pJGQY_?~4Sec>qb4vv@LI;V$p>=Qm) zD+6SbBdu&~yyDrkY%^!d!Wd}wOXtc|eBYMBIT{}yKRe`AH(k17l_#U?rUD!Z_66NhNCmjkQjc8^d7ZAO~g)aERlnqF(O8zN>~O9@M9xjiwfWC8>cRQN}uVlK|gARN4xluw30SoNRK|?XGn{BZQv!7xzZD(aPf^ zT?J#cA`Q|h4mbw~N;*$O{tIkvAX1m#zi}z+#(MT=Zav_bHdJ^CC?)0Q^H%>DCRY#9 znX$u%dy_#_)N-Q3HY16E!gCsMYO3RO$NcfNozBR8u5_*W7FCfiO6Sp zS24^jJ%1cF5JkYdi+F-3fbIB|_Sc~y6lJwfaJ--%+X z2bcRm6W*b`wn$JM9N>&LS3wbr{oBUzLq0uIM~naY(Z9ZG2T{1^4hoV@m_5h;6}E6e zMJ(aC!Kc4k$sle+HtG_CDy2&KW=QOh9}0w7vS}esHC19uuZi+F|H!^Uhy<#Lg=#@t z>FMFx`}tMFV$U2AqXJnTg`CYm(50mxHo}AO*NvUO+C7#c%4ybK{=M%|6rTiul$#&O zx=5;;U+x5JpSgjlAo&{D1Q;Q})l%pCy@n`iH?>VJe(IQz)+G4{thf{)@{j4Me(e9v z9$h^o-nD!#Gy}+Pow5%V6;`DmE8bg=_CFri0kI+AaS3vU+vl7WFhdf!tlyK+m>XTB z@>$?pT+)z5B4Re7+I!^xdQPwr@0&+tTqIA-A5m_G=;kc;2%e7i6Ab3;f15d`jX0sg z>n*G&(yD&*Qjb`$#JNK;OGdw24GxmH2sdj-kpF&ih$R3^p=Y;d4*x!?&<;FA5`b!@ z#Vb&mO3z`ADt4GnKn-#MU-Wa>|4y(+aO3xXKYMVUWLPK&yqIq)ixpCOCcluUtX;3Y z;jL32rW689&FW~Wc7wH!_`i{04(&S2*SYz@iCFiFWkbz> zPLT%+3(Y^j@K5~*@fxZHZ~$j8c29!iWy(Z_z2cN(Nr;f(2kP6YN(wTBLBvnaF+Rd&Ad9-(Zik@md{jL1EN*A3#{P(|yqz{A11^^}w{$F5 zPBSB8uzZ_;a{T3}bvgD1&p^~GJq>$4z0;w*al0>+^~-zVIc94IO096-IMkbZem&b) z(xc5^RE%n;Zes>d({zV{WK$UKA=I)gS4nH})3>XB{jRKm?2Qm=^Yr&5R3}3W999=$ zl0VwQnY|&PB0}JDQhvL$hszpbnJw4rBqhA!V)U1&3Wp$UV93udzkj8w{kprqlo1Hn zKnqI3M82~NE}m#UyY14KaRa-S6EACEr2c=JE=l12tlp&~k#t-)6ovwe&7OrXGmVLZl>Tvjnp zmH&7(lF~Cjo=H33XtK7QW%ooG#9dbVvhtcYO>2HUzux#+p6syFTPM+XF8oRrbhg@6 zE_N!${~#rXP;SPtH+kaQ+gKm!fFvce!!gU8fI7RK3h5e}RJ+pVhB&W>;f}do+NQJd zF)0WYVkpb7xri3*rD)Dl0LV|RPN!2Yi24aa@sYp>D__p=^rp!^ymWDqCvrvOR()Cs2U!d@q18wE)k2cA_|BPJp?#Nez91v`hWzO6e!f}16 zkCj>~C`K%3(3_hiX~8l+cWyZxe_13Z`r!#{7+fJ;Zuf*Y4b|EK6qQhDF$NR4~*1e2-B<2oZxgmZM}&6*qD(@#m$Y0-0`B0!85EYV%`W4)ddG?!j;I1G(x-8vDM3>w`R}QO(F)Nqs5q?k2R)SktaT zOS#MZ)^WVbGj{i^c=enij{k?VzW}Pb>)yvtk*-67NJw|5beAHX($X#6CDJ7g z($XSGHwe-yUD93ueT@6YXTJA4^Lu9)=OgEE&W^R$UU98!NvL`A7y7SYJoj|w_6N1b zYg4QyOi^B+O~^+=WfB>vxKv`8F~iBwpSy(`-^~GGD>W}5^HW^+?gMBvgT=Vj$Qt;{ znL4|!;J~b%Tawb+INsL2z(^&=hs(F`)P zYi{chLM60E*h*Qh0d~2Ig|4el<1t6J{pX@1wzLWZ?|hUVdfp+I;1@{frO&KED@cIp z{wo;~1f_p??nieH`R6?R{jh@r$4@DUhQ}@q!qk*Z4bd^ZYQ?2V;dor4g({v0=`R&w z>i~vgZM;%G><~BJ9?6E}mp|KPf%(m9my*15!nVn$b)vUa^_q+@Nl6&_*2x>wKk-aS z26(5U9AUS;%)AZXe1h4sfa5V|m36WNp+XU}&spUvG}=Au#_J^eRsMk?)`PXN?m{lb zR=Z8_p6#n8)jkd84+mHP6=AJU|0@U&$i|hk-T_h#b;4-&QbSUcCrSJgbgDE(hD*Xv zlD&uoRF6n_i+zWEErW(=0#M+C8{({UoU<7;YqUb&xr$u| zfr5H$6Qp$-len%%myLUo$U{+`5|`|XmuYY0rm8%pW%t;R#P--R-zyhDR*&a4sR2nx z{`f~1!{cF|j#f0CLEQNZh@`}i&rOw!y~)$u>jkVPM#pKlq~n~!0;bc_Ce99#MsFRl2G7!~mBfNPEekC79m?P2Ang!Pioq-u>v5B^>gGjqf)AUH zodMge>JUK-J0&^Jd0W(+uyXN`y^#F=y9pD2x2?y-AmwO~MiunJIx$(>Ln2rj4s;Sy-$DcTuHFV`1cG?uK%_Ds&f zN}iQ^|BYyVmYu>HtL+&cKIIR)aLh`0h1fj8 zswMGJWN_MPGXcQtyLYkja=g-iocSyRL`P4epQoD64|8VTY6BCLqtnd|63PH+aj%s_ z{_karwl<%5C5M0pK6IvB3A_`<5^lIgtji+}Vr#?=_`ITgDj5(fDnU2V_Pf8VCuUG? z>TpNU5cj4rb@Q2D<^$jxQ4nTf#eB1n^KD7NF93Pj1qehq;)|bs71wzsyFuH;&JSVWR+=Hd5)8Z%gymaUO&iA4xU#aYD zd*bIR7tN~{e5NINt0wU_5>#hctl{n1gV?^{iw?iOljQ(V-_Z@Qdqy+uYatS_pK^6y zmzLkP+SySDNV1QXwd(%<{yo(CckhGD!O~@|UinD6TrzO$yVAWF2`-Qalfe_Oci%wR9VA@VtDRQ|%S++<-&n<*3^8m^8qRLpEH= zrwub*9}~J${F)h6UJGsek@59vgsKC)=?n2UyNr+Zwws3KN8ZX|&CzaHf$Pm8FWPbk zlu#}L=THe`Xh*7S`J{*kZfU)>&{;^ZYA|ejTVi)K zs|$7G!EV1y{PgAH{kNPYXckk8b2>9P2qwG?MI0YnI$9V3l6od@ctOqEjDmmdqhDvh)tyAqFc(oa2!QN4S9H^$ zD1I%jg3w$$N$Jy}`ue&!u_vK=fvRLFU?=v?kx5kZ(zOjX2%xMxqtl!4bwUTkmW{>D zbeyq^{i!m+IB6|<6OLY`zlI3Wg#!UECf#Oos6jcJH)vLXlJ52Cvq`*u2sW{gxKTPl z({_#e!BboP%2`sM-8WkU_=yRn5dcesd{s#F% zPf{<0rT!9S5;?aCb@wz90b6M=PyJ>)IToWn(o1Q zQq)2Zq7akZ?XUW^jX)^Ol}IY?bCF6_4IuE4C#_Gi$@YF1AS!j=1nO7t0;hctRbQW# zrI=6d%VA15jBeQzxjebjk5y*4II#G~Ux6wvI-eHP1i8q%;&F?KLaM{G;-$l5tdudL z!}ETLbT8_p&mM;W9RwfT#WS`ols9&XbFAgAEcgk8ww}v&#)S`W#>}@IO6XnzTej#dc>Wa(y3m zc!Hg=%k#ZUpDKSalVMM*C5Z2YDBj~mDzoN??b`XgZZI`UfTLzy1td8WTVzjCxEVoA zb0q!TG;(kbK=dVnrA66v#y6#_c`+!>_XI$-Gcmg?{LLy14qY{Ojs=wR)Ev!J1T4Ah zJP=dp=VAj;mlA;uQ)@HQd(zMu75)5hp3l{Jo6xwSAOprqa_2XZ1Uqn7BIN2flW({l zAawB04{0+LYECr&^!q-T!a{mX!m?aa%Zq}qIy$IVthoAZ$;=|IO|)zW5f`V&O05$T z4GDHe(uHMTO5|;OaPCa}ve8qJ0K-;?$z1(mveEEJyq&toy(v^o^lAS6xP*nxL&eFJ zW@+k6ZK7N0c}KowWrMNwc?o5TAoP0I)_RnLK}z-y7eLE2L<6}Syr;_Mb7Ogq?3#(H zev^}~TCo<>HC-Kk`ZfqjmT)FCKzcwfnoiT)?DgO!_IfL2PU0K*Zh$I))=|A>oIZRO zEse|^N(rSlxJQMZ(Kc{bzm%E9>Lv2f+wcv?_f+T!o zys}MF4U8FvW5Njgy(30NkfyU#Di9br%fxV}5`^EHs!N@A%U#=<*i|;XZlxGm$;Cam zoEb}=5CDb6Anc-m7OWBjAWE;-IXxaPJZoQ}T-O3Mn|vaM9BAvJVrm?nA?9#w{33y2 z59sqgi*RkFTalgI*;mV|h^*z$uD|@U8_Qxbr@x+=wO=0!ypAH#W!H6|c?mR}XKitK z_C^~=x-op(YLufKzyz*+j^En+J5B!V%|hkNj$(n_7|eonD;%|<+U<8%oz~D)_A=@~ zDFT{}2kXoCp0C#d?njqHdjmUz5&L)Pd5{>?(8qY#@P9kOu$V#4;0+5NNFPCpb@iRB zK_yiMoP$d|doV~{%8_O6HlKxjo6z5)J>C|GB6$@S9W|tonsfg(UviEV7O7+&3NrHN zL~jpm`fnffq8{)8&_?Qu;Ip`O3)kqk!Jbhg2?F}WQ0JBsD=d{$m(qYcrb8)r4_a8* z9bYuzU`}~drd8+5W}$-n503b2f}jd8B^Vo{>q&1d&@b<99Yjr%%761oo#RV$mWB!M z;Ri-}?V`!&Cd0urRU+!7ug@TaopC$xrlVADH4Ns=NjeJpsy4)0g>U((lc)Hpqvv=% zNA5JqKtXIttPQ*h>1!u%5!^en1rrMMl_c>Hi)-w8V# z54vz|poX2ALxhywv(j3%sODbsh0y+OvHL$MWgtA=P@id zHyoR&B4p&dPbA=<0AUioY}0RWBQ=ipsZllpr42?oy8uF|=|z8+7*G@w5A>xANX~B$ zuaqt1nPb$ujNVqtE}6Z~S_k4a(xW79P`~a(=BO zEe*lQ*eaNPkS-z-;l_(F;jp@z>Xi%V`!_0!XRX`GRD33|H(~t#9JT z|M!a+RJ`)RSx11X_`7i$#UaHo;mST=W*VhDX!WY1?#IUzXEb+Mh)^4d2RQ{2SrRRrj+8z3%`}IH~bx_(N$&0TeYBtav!OJKN8?+ zvzmK6Qan!((bm2uBlmIOf6dG&Sl7l-n96S#?GmI>oJ9PH9z(xPJ3J}RhwiT;Ch1Cp zo{=~B#wJ(z6}6yAe~c9H{(3MocU-v5)-4&?7KE~|JQ}noUNuL53`30QiF^2r??sjK zwNO(2k&w^KWkpPbT&thNiMg9Q{jHI-XqAvbBW(9M5|s*4U}=GJNQ$LBaAU1m^y9tO zt#2CAySP+-qkFP043$tM1k=ReXc)C@iigR)tV*RE(Nk4u+c;>(1N!ep+38x@Xl$$* zyT6mg?(|IB<1PkfK8Jw1xP#Rx#d)l)t%-aa#MkF5QHDrYWa48iw#7U(clFtWS56LOl`JKD^wXrm$V*lKz+l5O?<6Ysf(>!>hw zwBEC#d6Dx2cQRS?3Lbu7AL_RA@0^??T%~<0BUV_SC<+~YEEG4F$6v%@IrUb* z{2pw*!Rd%nvkq;lg0(;y0F`dol$$CXBNu2lyz+?EVxV}{(eiQ1(V(G|J#9STAm&=KHa6%_?|@=1NkM{*?&5$%_?(%?mq52PXyG6%gyI0ZyBW9^E=yKT zPcM3HDCyP{^w^u9HBEgXDq{&%W$P4}xGL#YR~p7kFV&T^A)YVp$%;&P_EYOOVF-sJi`Mf&^^6>>4J^ zazlaL()wdYQ^&O(_u}+5Yo2&vG$rpEIbMX-MQ2!2{2fmmp)Z7roTb@2VnoaAWFhy? zjZ?m60`?LRf9Dxq?|12&e)(a)O+HX6Vsmow@gYp`^N+WfM4E}S5zO4n91=(+7gmtS zchp@j6iqZY&(Yny=CAyuEobR?;x0n2?yFQdNgQ&app~Dn;=xr8-xf86bkYodF^QN7 z$H9CwC@yUYdj{&ww7SBTimQP~tCSk~y#3BNwxo z+AE774BrRg0-5}HI#Q8DMKs8_XOt8lS^dvk9W7=?4+BCIH|Cjl6qIu%QYBb8Q1CF) zK+#-5`{q%H^*KFp)*D`{8c&)&O@C7g;JNwz;fcJE0tZ!Kt-|`Ryu$AU3^YHH1C8_- zn0$~r$IeI<++8RIQ0ddX<%EZHdr1urTT_lgY>W&G?&}A5T(;!G1(L8z_T^p#|syh;e;z4ms|-WmP-7D@F}v5_*>)bw>5 zncvRW1lGU?%~va1xaF8NIw$nOIh3rc!ne2y@`|v8E)VqB zr9)W}2oO<*y0=5TAv{l{hIVlb?vimdV+8ABh_D%p8kOd$RTt=#Hx^kQUEaElme{os zy*D@Av>hFVQGM+v|4P!-G{14;`mr0{en${YZ6>3eVP8AMp9lrThPMq|>$vH9!ss@MaDmug{!yN6umz6I(791F@F zE^=4%4aT$Ln(tl&U)>4Ep_!rV+CTqHcgM?S>g|#XZ_Z}`ORXLeW52XNZ|D}N59oxarzu8)dz~Sls7#2>hbxGl}NO=ul4Eos0 z@hhU>Ne*xz@=rAx|0M4~Qt0N7pdd(V5uuNwH(&wNZ-3{w0f^1}^1GVdn)NT&D(Z*p zv}P?Yh3(V_Ne|tnd+K zBHmx@V^4MAjA84|vQ2(O2QcqBn2nl#!<*K3e=IIW-y9-Wi|ngd`_RfU?IiBhbrIet zF2J8AJBih3Y`O!t%XCiE+lflhW+uyX`O5q}Njq~>1TK17QbX+7Y0qQ3uR|Em6BFKm zJ`@n~U=PVAH-{PtGw~edAY;kPbEm|eokvYu>!F(7pf!aKIfWIP7@5~6l*rZmgwh_n zmVcyUKje|<)O+c^SG+_Mb{P&LVpjK!{OZrH*tC!uq6xG_=B`GZvk`%Y|*n39*%@Tj2N4oX=t+3~R`-M)7vJ_4{SHb+};Da5DI>c2c9CijlB;{9rA_}KrNn5owJJPI3V zmj}ODX#bzJ%R_zSAq^+zkH@U=9C3c1!?hWz&v*QerRHYp4(tYtCM<`tAE5%U*({|% z|GC^Ylm3yA*^Vq@B1Mz?Qizt8YcYQW!TTQxh2rgn0Fqr-9E$kMc~xSEt%TWHX~U#@c!AmxuM)=Ue)aj0yA(@~JZ@2X zgiRk@mF*oPQbmy?Ur3^U$)naqD8)Yk0m@M6V6>nB9PRyio5uL0yBN3&EWPjNBJ8Ka zxXd5FVbyxk(MG#mWi;)Sbh^(JBh8mHS$5nT!=Jk4_5gmYuI1t(E|Xr&tHbqn%=lfr zmELd95B+F^+-;b$>C#H4rkd>|d377!@M@ki+bg>gd}oC>g@^{-L$kjc>UtHfO&ROD zlWVw3&Rw>%R95XJLwWcizhO{D{K~(PN|alo!8X-I-Q&_3cz68vrP%aJlH4^` zYi!d9kL5wm4y#eESV65{(<<+@j|V6oojLvKmy*b6hzpqv7Z0C7c>URQx(_kTRd3s5 zYZDlyHeEFv=05!#Qh_$l1Wevalca{P&YHkLR&lu))GWgX`GV0yw>m9sGv9}%LFWlA9{a!4|dh@%iSB2pVh$Z@*i~)tV z_0Xe~T#bxdRYN2HU~O0oT`cAgjsJIPQh+ZNO#_J8b>l{ix6#b}Mx>itlWu~wel+Qy zLhp}HcO?1)7La6i`Zcrymsr;$)9~liPZFO?+uge>M;WB^2Kd(5TzGjATv!TPiE5FeQiZuE{PPSfmyM99IQf4Zs5dk<@5N9L;GqoZGZ3nhxJ~BKO@fSaM zYQOljt5#A*{UX=Mte96h+k8pGrI9QHPM|30IMitNRX=8NbJ}fghg9Hue|AvmWv zy*_9oFU!Zdy>mG--_0xk+V5ik%4(f(!@x4?c{o>FO>GR%9zL=?yURMmLWzzdS{I>! zi}c7_DT>qmrSfgBW-$t6)VuM3aIm|}c77w!rhG~v*gy=sfdDg?cv)!C#@;p4=y{W` zkbBSTjop=Jx$~l#Jcc!AHLc9yU70M#e6vo2lWzI~dZA1_ zO`+Ey=gX6PYifxj%k}-2^bIqS>@&Jp@6(Jgssu@YB7?oII;*Rtf@g%*xlOMP?D_85 z>+iaC)p$8gIcHk&k}8mT=@EJ0BcexN4)38&@4xW-9UjA!21yZNEufml$__7bm z*#`ykvfbA>oSRA4R$Grz^Iy;s3m1gNvr@!<*o$s<$UOd3l7B#nrUyb)F z9jzc>5gA+0m=b}QP$YRdJx|y4eyEj`(fFkz_-gXrvwMzYpNo(DN4pBnNLzqII4uS2 z$y5D1#&zQl0H2p=AbZ}4WYzNCmkvLAkOqtfR%1Ii{BY%y{=6zvGkzFkmz{URm^e6; zOjV|qUJC6gh{M@lx>d4KxXAOT#Gb33W;>RQL}L2e4kx~Yl0hmdAeiV!jO-Nb&WkgtzS$=%;E&QJFIhlF4G8vEsTzup;{ zhF`&SpYuI~Tweh0-54xpi{k)K>FU?DH-e`wbmnK^dOdLTyXX7Z(~H*d zjIVu_lQ^uy5B`VJQpi&7-00(3qi@W=?eHKhpuTKBe(L)-gY%OD^`HNChk;lbOv)nw zeB_~R#>~LDM0O;5wx)9t_@dhBlIqlLpZz?e501_0`-!k)HVN`@qxpoplFX30szYJP z^=1^nxS+I~<^+wJ7*&NlxciKrmsfT@Ki~3rUR}v1UHO!qwi}=PewHTl@BFJbJ=7$} zP_$e8vb{8Oidrw-#T8FXpJ!ClOD9YLX^^ZIZdI07sp7y(XNj7B6`7LZHIPYO<%fe) zsvjBW=w(wQk=elv@Y?Wi*XhjZ$R*QSU^1=iFp~x|U#rlZM~!(cmuj$?u1ezQvM7;Q zOjh|s+;*Y+UUgBb=EPYHVW3DtFy(!J(7zgNx3-7l@j!{QBTcB=160{0E)|VSXS+Ja zUBtuu;X_%Djr0dXLi_GXMIzWX5dFcVy70J~aGI~mCKn7Q zV}n~D2(~s@fAti-fZX`G7!}fynbN$+%gJ&^!11i3-6@|k(t=1T%#HP1gTP|~5%6In z*t|j6cJqdd@-72mf}_WZBx4eQE(?7@A)pN2)Sl0jU-FVejYJ%qMg-p;I|JkK`ng%< z(g&j5R?UfYn>huk{!a&)kELHglF#ayQwP21{!t)bPq?9yW>D%_oA+ipg@S z3&iUkw#Kx!0f*!QX_gv=>tiL5^~%xRFm_GWHvqcRY5~;5AGx$TgCj5w*;&{;wF7)j zYy0N77WbmEf44335e5BsxG|np(*Bn}D+4 za%lz1x~2K~1(hpTZ=HFdV@JwG_0)!D_o@Y6!=Kh0?q=;dY!y1;&7{JFyHd%e8hN3k zL}&N%y9+q6CjEP4-h*ZXPc`9W#`*e8(_U>PPX@QlXcJ=+b2tklcVu+0?kN$5t+=pKfMkT_B!rDE z-l)#*=`SVeBLXASlnwy@)`dpvplJw|+30&c?zvS*o!+nCGFVMTkb7M0R^px_mQUqR z%x)M_K3XuL%VHME0)F29@x^JVIj`pD!JP(-tl4^ND{+`;L?7r$_C*b1F5Oh zX6y|0%WAy@hHK>zTt)__8uJ*MTgiKEgCKMwRG_(q>{7A!Ja~kP;3kaq9kj<_O&uuz zn6*!#__v@0is$k|e*|x&&JlDmOttaPdi)z;`UUy=BRrj%MEWR08thjaidc&wT5!!h z3z5GGJ z0Ja_7`Me@!O`WP0}wOS)>uuk_!o_eFHY`qZa?bfK$T* z4(qu%k-*5FvzFTRuEG2&)yh{&fPyc5Y*6~Ik+4HYatcOLQFbc=a90As`11pb1>qcY zf|&*WYb18iqXc8pI|0Y`3JKY@^&=%WW|cr7uwM?-OQlXH)1x$RkRatef_ey8PhhzN zQcnmU{`H}dC}1YQ!x`HCIh21x>_~mQq47PKyiOAERWAF+amD9ul?j;?y}9tAI@m*f5!&8vij`{^y|^ zL`;AU!|a7T1k0)7^vBKmwNAXCu)|736n1K%;NzYD`9mr&VYx?8ZS=QM^!vY0xxnkU zUP#jlB7V(zCv)>nQc%SFT|NN7=Ruf!^!HN9K+ot>Rr%=6Ke+j<2dy=s%x~`#hvjBA zt7N>frapqu@@IAt@V%F^M%VvrHS~e>9nhfnicg=~{PpWU(g1$xE(1no<8qe64r;Di zyZ#a+24V1;6*;Y-_M-ptqrX0ZG#Y&H6UdO|-()cVzK2u_=|t2U3b)}^`C)qw1JoyV z04i<_%W-@{VuMp0;bi4>q)UVC#yBG=unoaxP!L=nFIcl;PG6QO~Do8ju< zZBH82^g_%$pHyxfvg$Nz8hNz>hWUHfEKiI);<*aWz`CllcDepLD{uH>Xu|`m`(RDJ zSuQ`g`HCdzE_6+J$1VSsrhnfX`nQ7RaqDlTFJ-T+zQ=a{zNy=`ykF2FH zl@>7JAG!L2dd)bs5*|naOsa|p*!M%Tk6|~3fz}%acry@C`rOxBt z{`_R6qv*h#>*O+-Io`T0Z|BV!O8e!9QGjbm>cxw9aZKkyjeB+`v{3@-e1jqJMMl7! zDnvVn=+8Am$&Fl^jaWTqbV;I~b&o7n08EKt|I}d&X!%iawum)Sr_4jNJ2fZB%K>0# zScIWBQJNYt(3PnI*_Oq%exaMMM0wAH-8mxAQu~9&yt$&#XLK0&3()DsJ-Z_;5rd*r z+Rt^c>x2BFFfa(9eL-{+`kXF)oZK( zGw_BD&{;pB6c6kTTZ=Us-j-QBw;JU8{Pqgrk&wrp#TjA5Orrm~c*6|A(}JW^qKD!n#&ez!pHQ0mn6%TwK>#ct&o9_NQm9zSMWTxy;v2Zw~j=r0e9 zoKsLxTLv7g@4r=XFZMlH9sk^X-TSN!P>@*do!i($K#%(Gg=narnlzX5 zmx2V5ucU3?^LcU}gJPso6MCn^RN! zy~BSUlz%2HC`}EW@At(57Q@vSE^n=^@D3(B-*6Z%9Sh*oc$H{U19g=!k}C~jR5dcd zag{iIpqMN`!mF~}cP<9{0#beo#fb-*lpavoYWSgZTdM7BaGgD&OoNdG?Lvo~{D}-` z)~TXAoFQ)ZID0x#0n5cA~w&eqeW@Jf$wm5Dlm6COqEpEJSE=_1!xKmrPaE zwb`PE2*Rxj112uNYKZ{I-eakAl}Uq%ae}pDS-(WPJF04?m{Y@-tt1|>~M|JYMR$e-othlxS*x& zum5SH0Iu*4J4Bdw8D^5)$Tg`dzdzYBAU}9tspF zH@v-r$M!)-tPz?CL?uAIx!)RbP!VtcCE^UONwyj{&-8uhnf8tCA-nk}|K5f$$X}pW zG8Fr&Q|GEG)q}X$6Hgz*ugiUE`881Kuz>DJJl$egOTy54>|NSocdGVspEfDAeA-B- z*R@r|ob%=vTcDa)894z}vOGBI6lD%u4C#d+5MS7vNKdbtmJjJoC{x+nchYtGeFA#g zyOoVjf)qy-;v32wq%<3x{225qWW$h#x-KR&n2bO^I|itU0_CE5Xm8u`(rMCoI)1vX zsYY)GaQtW8j^aUEaj6CILrRkY!oB^O(+c|)YjN-Kv6GwS$-hmz@I0KwXY^sMwI&=E zH^qY#_8Qt#R-mT%pE6A#Qa67{*Pu(&5jBz{MInX)EH@+RUV0|Sk(hTb`Mv7J2~5ow z()Wn?v-X|Vhs2#|d_Zy)=Lk$f;75a$v>|Z`rD>!7#k39)Li_H`|=A+q!DCnLIFG%xl=>$Y@W+0M%)>|#;%LK|iA zclFKc{UDc1W*ghy{iI3av^kS|9w0d;xhhe)f)6^BHkFc#AZ~adpMFI8ubWRTDzN0y z?IK-$!W$i~qP!iUPVJ8wJHwlDbMu*;A0uM{b#Es+JBG=Im=V39aAEzk1qcDzc4xLP z0dC&uN-_h7x3YNEf>!fu?`#3clq(Ce0Xj3THr@+7oPPcK0hisu>l~@nGh)T*uI)lJ zaKsaWM)N?sn8p~b_+wSj8;CxpIPk{$e}FbmpEe%;b+!X6LZ09Ba3t}-t9fBA%QXK{ zY?g~DsRYZND}2mmjWU#mw99!z+X+fTGwAHoKbPZGoWquF@y*$GL;JNX@_B9Y-T0e- z?ga4Q4TT2H?n}i0Qz90ghu|i^8i)seA#KoB!6I~b;(J)`B(Sp z81SW5A~wHn)CyFeyEjdYC_zGGhzac3(bhC35fLLZGxM3i9P58A4g77Nj0{p_(D?lt zv{r)OjwM(0euA=2Je32p1&fY$^Mi9}pc5Lk`t`MnxFm?bKwiK6?xp@VO5(a~tfq`N86=+&Htl%~e%Hy{+nW=9`qW2+G+w_8;p z3~_~F*xdP+-|DmwQF3J2^n_2FYwk@mV^Y*Q4*F6`3j6v}^3ufn2l`9B$xx8ON_i>o zj0i*Q^b0lkQv%^41ntl>$oMGs_P3^M=IL+UBj@=OuK#zne{BxB2^?sD$c@QnXzE3U zGIW(gFjx<6?*H3a`+ak}MAzY|jBT0Lz1(=C6H)iDHg1P7F-{tJ7|(Z9@~w&)B^wRo zp;*$*z}g2y_!vJJ570kX-1DearxNAH{BOAbNNjLX>1}Ooms5-=L!O@qT6(}({^$5= z#KHh8qVcz(>=HlAQ)r4aeQG&|Q}@7QYtC=?ODrv<#1K`EiR}A)UgN^>Dk%YjJ@f9!qPW}09D>TaZgAg5K#%=BV2&vx*|{Zb_Kx<7~;@>!=*6D8WGTO z#Qk0qXCE%Sq1@FCJMQ%ur3{aTJ1+0wr6PvHVwfS}v1)apH?+iu33xb7Kp7E?A?juP zmqNQSjCbs?qCVnmrd|**fQ&aExWNF>Nkea*It`!(Os5@w55Uou3s2S`Gu;E{a8l~f z6*o(0MTMO0reJz|A;VX|^sf$HrMiv(M~6lq;ScGG86YIq!;pLiNQB}2l5a{3EtKAD zn)d0>gZ^$0!G(O?S0^|^HjeBqniQjpFe|mRw&jg>aY}SPg1=1k=;+{mHxubpw}}5J z8-WW3MWO|iG&Ef+y5N$v&p|E&eC!|bDsJBtl?`YdF@mo!=s7Z!}9JB|1h46}KM|qBA|%F=}?NjAh&JPh$V8KXM3v4x!OS zIV(F`c|i0<&i{V*Z|(RI8C3B}YG}M3qy;V#*NDHmB%nRGqj~G+XMuP#Qbavv>o7AW zHWtDE?EtgNfRvn%As9Q}Lf$T^Zf)vxuhU6~SlNqbhG5>o#zI)jTFnP z9H|lhcQ<0Y@5rIM0$g*@j&E8`bl^|+_Qt*VYxbOE=-Aj0;5s_lL7p`LpEWF9Us~Dw z2vtq(*MfpTjIXLgdQ@_)=Uv_;>N^!sjJ>NEPz)TJ57A)l2rz!_*urU2 z%DjY37-1N1Npr{c%3f*q`BocKYD>NcPbonwCL}<4B?=um!a{NRX4vqB2&n?X>c&J_ z!`frC|GKX*WNNDn#T&yd2-LxaoX(+Pj>Ii~W*|Fh^N(yC3t!}(G!*chCZ=UfW zdg$d&*>UlIOM@WX71ZR@H@sD>=Y=$Me!Ll*8=BBnO|O2*JyiuNsl)3Z=bCmKcv=O< z|I!5z0l3Tw8x8us$_4Cv$st9vk3`3Nz##NS0|s1;P}NV%=;UkMy&$?QYl+@gg1n|5 zs9Aho{LkYC(1!5}Y?r3a94DS7-wEe^^c|#%AFAq-{?JZOS3Li82-4Ya2iOd z-+F<0|Ne6EDd%>B%l=zJ9(R=*s~Nh$Ba*SD4Gt?wWbOforZ-g07R!)wt|$2CU#rOv zXBI%jFHOJ(>_BZz_OxG)#eCYVl=^g1ey<(>R0E$ zFB=!)x|+fxQb$8~I<%Y5k_2UC!&FMNR7u~mn~jLRx`X$9|Gx9q6y+fQdGTU@vbtKC z-q!w^=CcdrM$pPxOPYkuG%8_iK|gjSCfK&r)7)t5i=vrG<#^f9;}jm z3c-ox_c(jda0-;iQ(K_382MWXiT_oZH&rf#0=ynO3~B_6K(g`r%A)C_`n$Z);)*z9 zG9*V^FERCeVUQcsVX07FGN32YMK=QPm*o$3|3E9p5pm^FMSfKQ(NWG!ZEU9}b!?|x z6d6TJLSS$FT}kw)s%TR4WUO2(*6^J9x8O#(^;18IjOb$^Z?_)4PPRK(=8D9@!?f2~ zGRgj~D{5x?}N;cNr+Y-n{fEts|z5d;tGYw;mG7yBEZJwwk@S5GjEF|Hn#rrLgHfArhdy z`-UTi{L?Ixa!M3`axd|h2L0v16#6=Vxlh`Bm6X0;FX@gz-i1gONvBR1KkVgh6ms!__bKRVv*i6|X~p}X zu{FOoN_ma@&Yw>gAMjJ#Ojd|povx6yntVYdeks_Kz(@~z2{>w9dtF~ruMDJ)ekUbI z6@lo0#_%cp9$LiiJ3@dAH>I~iJb=e(GYX8m_fsftu51!ZeW}CRkN75{Y2mT)YKsXJ z!|&u`A(B9JC_xu_@#^EoG%kDb8k_l23bKW5nB!UJbd^FCDF8M9(QQ$sT4kyTx=D8O zbklH0@sZh`k=Kl2=qMEtjIC!{(i~jxH?2O zS!0#FIp3mR8(7z$F5p#s6vh!%0#yKCgP8d*cG}<)21dXv4o(xO<%v^q`(E%{et9P( z4cO9Fx-J4+f`X7V>m3T7UJWC@vrAyNo}u~n?b{h4Fnx!MUs!+V74zDe*JQJ_fj3Pl z$|qUDdY%1nhYc*Yn|IWR!HI_=b(m09xudXOamQO(t zuRa3&BXhJl*)OthPB4%AD3Wu+HqB@F@_3%4sQ9^lnNA&f=zYeKd1ZVKYr>7GHqIAM ztY+&~fzfx^XmAA_TZ7MLjl0YEt#wXcKfqq{ZHIHr4XsR{Z@1W}WDYWRo&j&x@T5LopYP5w@n2~i7fTr?k_L7}E&#g|E67>z@h1}-d_rvc~^&^JWkRmf_yc6WV zzOZL}K;S|u1k49bg}D^c`)EYmDxTMu&imF)y0zB2eC!gf)20?f8A2m~(Z;Q(ZmQh4 zAKzuapJQotIJ>+;Fz#Znm#Mlc_|_{J-7HaLJRYZFhwVAt-YRi2$w`m%qj-?jz-u_5 z&jAKYUT^KZXA!0Se(N1PmM(RDk6emL{Bsho3tKM7^|)R3@eS~qxlUVCSC(%9P`|iKG_dHq1V@E8)csq zYmV8DWfB-Lx+>6n`wPIJUEQPXqZ^I3OPfx1QaEk1+z*B&Sitql$a}mw$*QK$td}An z&wrXzcdivBp|4h~fnnhVyrx`>iBezJ6g~!Y`bt+nd-yEA0lXBRWtD94yB@Q`?cywF z-0mkY7%iUvu$g(s=U-tt$wI4=A2krTE!X6FID*EsO61(^&D>$;DM|Kl0%?Htpj*|~ zGTa^s*`C>MQF4~J-HhU!`_)bx+QNayN19#$PV>ou-YnlPI0`>!_Y{53eEnBs@24I1 z>o=I}NJA%&WW3QAqL-1lcEy^ZnrhsNE~Ctk|73A@)tHNLq{psv+VBu4uUU)yU~{ zi4UL32Tj5-ZL*{gWumZUQhRM)W0V|CnxudJNUoR6W|k%P`O`Y<0Kj=4Y$MKlT{k6g z_oqHuloOr$L}D^kV?~ccuQsL_tauN@4uj8WsV5#TdPEW(iGbZQKcM66a07KwQM4#P z@M0}5-Fz6+s1G9~yoR)fe2=*unkm@`8f7&Z81sksy&N_U_z&R#sK)j4NpG=c8 zRT6z^0$$CjC5jvaSdvFygX+mNvI)uUMcxH|(5W<*W6U5h+F7^$L1xf$wq6wT*h0-^ zqomfs|LMgXpFum4M}!}mp#{WdvcZChpZ9LT1B`at%V%M)HvmL%9TEOX3TGyXU4MVd5`1Nh{C(y@QM{Y$MO}=p82DVnaJB#w%e z)29alak(AhCdTAWPN)Xd-McA^Q>bCj);|~RT`mT@)~$G{j@5T{ZPd3K^{PuzQFd{@ zWz=Txr6%!$oFC76JjixGMcMn|M)HLsAJ2$1_734rd9juYM~^oD;S2HWt8Hncz-`4! z;{gTX5&a5HMjnrEzKm0|UzwWY-c&cnwhXjFVL`)D zuSg#1kAK-Jzvm`SV)YtfSzx>*M7`tzF1$_7dz7(V^QZs=Xw<#!+0Ot$kfR;dD95!} zn!~ich=vmYD!2R#>e_<27vIV*XJ z@X7gB?fj-N>E44q<2t*gDisu|amf?D+e%FB>RqwM<>a>y$v0TUoV{_hu^x$Jmj;OKGm)P|n9v==;jM$(FR#wGWkCDz zu-P-mt*Pq0)$GWQp2%BK<79LcEbQcX51a;pKxe(ZyQl zBo!4ExqB*iCF+0;Y@vyd@rpT6{6KH9C4=~#=M%oZ;GhOSM6~-z-^E!fO=s(?`PJ{- zk8(_RU8iMiB!^?m5=dUb_;?C#>P#{1pv`4?=KC{bBf@$CIW`cHm;m>CT+J#4N*!e9 zTw9#Sub+3d0~H`l@%??Y0$TgbLT97}2EH$7B)_SfYO%XyCiy8U$X2h~a&lz#?GLmp zDhg?qQltI%%`3;l?9>Pf^iM7p)Sl$LHnm^(dbD&}_ahB^~FX(oyF$vHkIF=GBZ< z&hvF4B~h%F>#OtX_WzHmuV9NZTH6%_MUWPdmXZbu>F(}MrMtTuq`OPHk#11wMx zW$QxoV@D?}x7Sb8Q&_v~T8&RRewXjvE&m%734>0C$f^8{#_&tIDjvUExsbXc8yrkR zrH8L&|KvtWk`gi)H_P?1#rJBpHpgkECV1P#g!Kb{2RcyJ4;=Ey$+zaYwtwAA2KRavf#IjC(3kQ#X>3P-@*m`-v!b+g*g zdRlJP?3+$xEABDy^0K)Zo+3}1bA~49xZ5sjsFqT>8STi+;TPI!Hv2oqIL?`h3n5YFcGTLJWzK6@R@lD?u$|+O zCP&%MaUnDTfmn6=A?+c}Bkz z7j{$?fbuot!UrP1PJjYCgXX*a6o9h~yB zal@=+dZSJS-40Z)D3~|I+9luFOH6nuU>##46DCy|`<{G$_^R!iU^Ry|OVK9o;;CRd z96$eOoXxS_D6#wNSyj*7C1;6=rNRuY%s|wqQ#y3wS-~P*s%;lPoFY?kjL4CA?~Byf zUa|Mm1D;ea9jX{bKA=wbJ%pC~rEc%5SkSFD%HjbxnVA=``JOx&+P8N~2>_{-#YwL* z9e{UrCm-Uhv`O*S>2s0(M#?vSV8lfHN5hkX9xS=p&ns^>c>1zay=ClOMjNpP zS`9`cH-h{N@T4^4@mHrBtkEo0)-YTCM`vUs0ME>))V%N{F&R@EI78y{w3?**&_3w>PjGNKS~Mx*_;pKL5qdqNo)kfq>L3(b-h`2u`mV#AUW| zH#Qw)IhT|Q;5LzAvEl_NfSD1Mvq+S7FLMGeOTP**%pCt=n1B3sZ)3eo9XQZWo08t4 zH@V8~!yjL3iD^OVc{mU<{KgL>B<#j345g8YE}h!zHhr^()_{d*Wqy;mpGvQuyKwvK zHTek8I0j_GIJR8IB^iw73|#;!M~Kyc_tk#de6{uw$jho4fErv1d@@}h?=GYkbn2rd z;{32s<8~{VCBB5C#92*6L5`WeBEOYz1@-v0i9AO9K*J`wG}-zcej+K*Vm|F<`SNm) z^Cqi9Isxd)P$nPlhjw$97;_M~ew1lWEW{oq#Lmm3xh6IhHGGdIVI$!cfra|#ugtnk zyOhz@5wNtDnhZwsU7p30@|#FLae+BnDI&-Oyi}y0YE{06G^{?^T)#{To4oNh38ve^ z+LMkasWjK|4Y%p%@x-PfVz1>T#4a>^GlS(H`IfMVN-&` zw32+qWa~t{Hr-6Rod$K48|X>D=ce0mXrg6HqZ4E!J!(xQuau*OI&EC9FK-$>Hop3| zOH3Ur4X#pwS;l;YSr@!#t3_V-8+UuUPto1@nk;^EouehT%A|amvydi`#c^OCaG?MY z4wh0ATe&|YUDE{m#y?I|4Y%17)5M@`S8F}f_;36GiF?&KzqDRxZph_z)sjo6W6^E0 za2C=zRa8S{V{0pw%DZ^zTE0yzE`6>la z3;@_^-TWkEKT(u+veY5J;^`xqQ1|86Bl}V088e?6#(yc|p9BCn{}5urUIB!mZYw48 zBdi?A3gc~A4<-v=>szv)?#UDEDdX868oR6G2ih{a2NHU3S5_s@H`~>zE}FC)A5Ri< zyGiWel**5L-$ag;_OT}CF%(VXYF5kM@VUEb2{3mUNLt@(OEL>qQ}Vo18~>D{`X`7? zlY7xXa#@TthubdE|M^5Usm68OA5*CC$gMT(2oG<|CtOdA;0?BWQ)O?yihOpRHh0SN za-*)x?gWjd?R@GiRJiaevu^+h;EQXQgzRTx%XYO!7gjHgVuk`kor&tJ~?&QCu3Ln3&eKIk=jy{W7% z5;Py(e+p&Sd2BMTW@yuA8~g6HR^L81%RP+k?~zmGxpVK%z862Eq79_gX$;St zcnGrYuz9-)Nn^Y>SZ;wEcNC?oGSp7tq3j}~;w|jBK5n19CmrAFQN;%nQd*H~aUU*L zSgHGZoTUDS`2F*uLlgBd?lze9-O_I68hbOlm?2UEQ-3uo#Y+3fS&yQ+q;i~jpX1mw zq4N-n>r>KInu2IGEnP!a?m72AdoV4&7@!sERK1ejyrkXw(4ttWn@pA47MtE@dMfXp z?^ny6MqGBXEHgG)0gQcd@+1r!=*r2lEx3f6!CazF5Kt@;uXkl}&6j2{s0r7gOJ# zWO`J(9)yGS4?y&)L0lzUVN!ft5Lr3hrKqRJ;ZDu?za;h0#D51aRk52$`BykV41L`A zUoo5f#b(@J9C!Ye6BU6s;}J-4azJ#sl#wz_McYax>Kz7jdUiaK8r!f9n10xuHbpo+ zl|w27zWjW_Tqq{-IhoP>FAoLH!MwdhMosDaVM$ADE77K-2B;y5gQh5>a#8~9rMeYMnV{Z|U^ zpsRw`R3;9!+vY$UQ2t@qWD&QkR$!b*V;cVMwd@Q*? z7P6i#(NXjPtkX#(Nx2jpR3U9i29tvOCMoy1K$dWg5JB(75HVj4_i8Htyf1NhUwXCQyk0_;k{z@wnp1ltMq%Q@{G-;{En zPm582Jp))GPLZsx+GFnxdrSlpFS39MC;2r%UFL(|BmrNNFQYK=XCfRogK@$=+{;ea zMF;PW2V2PZb{XH#01%K0+|A1yKx(Uukk6StyaPksH2+J{frGCG!7Q?WguH z37p<+1(=jhC48ww5}qK8gwH1^poWAw#jA2+&Sp=X-{+Bzz4YZ&O3To%FHKIQL;Dh= zl?4C@6*QJ$d)T4b&Zjz$YHJTib_dItfMT#4PZNBaDa@hHYP5=!Vn7+jR#@@PGm2_q@rsdBc zh!-AdOy?T=>u~N-zY&e%j@JqLj+(SEop=^YjRmxn)R=}8J{|t3FR9TxU1G}PsavoMUkysEt)!>{ar= z+wku=gN^a9cITlVkh4UBn_9>&E7{-a&N#MIYur>}9w7{Ksfb@A%Ya2|zS*G83<8|5 zJrExUXG_^m)#71UWOtyg=d-vFF^@>#hF8w4Ll)9`*i%7r z@=A++?NpjRyUVo>-bMYa;EwzuVsjJSaH2rK{ns*|io)#OG1vNo;7Ca&5`GqU$Z|mI z3kI{TTH-XT_0k=|SX|S{J~MM;`T1|ZC_CB!B@|cae>l?J0KxCi|D_D~nh1+;F8;A6 zS(qlSharO{ZcjxlSDQf;BFYE2`cCdzbpB55yKk^@*Vl6HzyqE6*)GoENmp_7Ar@CNte z2mo#}@w)EM{c)tAGbJ8PG{a>Op%P;rFqW{F8Zc2FO}Rb-I=D0}n!~MryB{s!NsLKx z+N118C_oqyeBk#tdeM<1sNd%ef1inC6<)ylH3!TEMD(Nto8Nq&BXM5EMFXTWL%g6u z(U&kexP8A&-4usuJOvi1t+H@>uj_^vVC; zt?L~0UHmny;Qk@JD@@2Vptz{0`4gt|`oC)~>QQ_i>>wZ!EHhn)Q)ekI5I_BSTPcWZ zD12JR3xzuE{`ibR^xgF7Zg8MBtOKx5e6R)-m>$!@-*K8Kl&MhNU@i&mjuX<-0IA1N zn^xn#y-QE8SMnnu==nk};V>#Q3Kc#r%)gtHWV$<&R1DE^^*+&r_C?-T=sQj;2G>wmV zS2M9vY(e~8SqQKB^JUXsS>?yu0r4L@nEx_kL5 zfs1xOUav2+c`xjEr;sSA9AzMLTh1(C#b8LwQDx*r{r^~17Cb|?z0_GscZ28FI_)h- z)0wLuxt>p7c1#VOO?$g6kU{^eb)r`OCx-xc4|Xg9M0YHcC~`M;Aw}&}AFjD&Zgl>& z%CbwRq6AAo$7Iay!H_wbpN!-sGo7vWGd)3?-D}xv@L-?}hPnowxSap>#hBbXeg0Gue5rAD*voXcf><X5$?T@2ktqmYn$6+U3Rnc5AJY7?Z7*^ zVq>5Pf`Q!cxKp4n~*Qdn~0#cqH`lETFQ6CK%0@<8tfgT7m zw8;;;;nR7 zvYso=);>@Gj4Cnca7m_D{}}w?#Qt(Fode;%#HX;OQIDCf+UL&kbgd)#Y^sV^DhG(I z0rp0J7=S|m<2f(Oe6W_(FR9_3IE8WEUWcU_yR~h0eWvg23E3-wXcO`ELCc}QCz$kX z)wJ6w&I+hf3k@NXmW0epir17yt$I2sO2huK?(kc9AJ8_P^Ib~^pcpcq9AhWvy>GW7 z$su%qv4Sa(d{f>=jG$SA-ZypBRNroo|K-61uDzUxR)9P8zM0p)X&j5fh&x&^3`u=1 zxLw+FL z5)z^+MOV0p&1U@1KEVflN1pd}=8@24+`7Mgf}won@~G7<4k(E3*Swt=Evmy21Y{YQ!V zY>TPb04M~KnS^x%^{2u9Ft5rT>)dS&J#E}h7(}%8N>5IlENa(<BqRutM3>CGP33aF~;1_;Iws}Y(0zV}QU38d9+XTF=FS!Q}t zi%cR^{cub{>h}Z#ffC_jbDt%;qK{w+?6r`^6e@^-6r`xg$WxU&E9t{173BI1BE_g? zfOJp_vAEC|w7=OM$&!CnZ9X|(Vg4)WCp1KF;SRf{q#;RQG9xLWzL#dx7J*3ZstdA} zic4#k#6Gi{3<*w}79wW~k9qfP9;Pmb;sXV>neS{6A3t!Ik1>(^KYkOatV6e?r$L*M znlo$S^gH+|dN>C;Z8UcbeC(a8P#=$XxFZlZuhSF4qL-c`VfXK~U(KiZ#%1tk=IH5B zzL%I+>)T3C>VbXCOtakuPS)p}*Eb*Jgy~hQN=`58T?t0S-22Zbp+HAY&{9CeCg7hL zC{O`}Z~Oll>IV7{{WiA$SNGS3cgELgEL6ZYX6wAHX)bjQmP)gc-x>1^1bd_j2kL0a z;*#t`oI-BNwHX^e_%KK;4nioVf0s=&R=j6C0{AG&S`z0ivX1$*Zfm!ZsO%%UW3hOF z8Zrw~Zin3XQ=45+D5R1ZSneNTS1oIL#*6)(*yLM&o z-DyM?H42OYMM)vJQm4VBA^Ve=8sMe5g8s})OXjMY4%VFmn>gZ1?BhaQySZoUDc*7a zQ>RworI7q>gItXe*zD0s|5*oyI+PjhIq`0ua#q7mw}hG_h`B49i;n=uWD5xQPXfp&L})dP zZY4=ieF+~9wELyU<_39&V zA_>5x(`*bg(-5WGPS#7fS5-1-7EE2Pm7=k}JpkdcDjT#j)k;5CRHI=k(r|0&cd(ab z9M(5S&kw9N;g7EPOJDacLIfz#$5*t@Md(XtvfWK1Pd2h)ubkCxfjItFXS3jS}5TOB%JxTk5xW z=+*1PbiR5e5O4i#cw}WqQ=Vs1ReZ|>2BTD)+x4D6mWi>iWxc^)@bUL1@QokARK8@> zOKIiNRqsv@D!Hj@ZwXXYOw(PDgML``;>pfdwS>!~IX61v(c$(_vV z-me0_N_k19U>0j39wi+Xz={TD?rp&-PZ?bUNnA-9SLg9(6Uw%Rc-1vsl#O_Z57LVdU5a6&=i%Sa6Q zCqM7`>D0&jUqp`ML@H!6EpWg zmwmN2fvxI7ys!oB^uG5x+!&KZ$4iR z@#HH>W1o=v-W$?zUiEz@cF8wWiOGhg1jO9Qf(-ZXW@*KHQ~4kfZAs_9O3QGB<7CE! zpBp5k&j+1dk*uQr;#y8czNV8=uUno&mBakf>nc5C2sz!_%hvNO^R;xN*ZvPUF+D zOP$9zcWOaK#k~pF2M%3jz$D9;K@{6|WzU5>(BC?&ls<8&x3vOAU zC7)@S1o>{UGI%K)(VWRTWtS+t%bv>wpv!Zd-un5w#wf2a1DMsO|O0P@%Bzl%@^R) zn*Nth8*B00lnPtxB;E1gaZbx1W#pi?aohuIK=zfB&V8wtco%XKq2zw&!3uy{lMIke z0?1x0{HxO1fS81)L}2*an1kMZvyq&C{*dYU&~Vs?bIf~NjC=b#zAIyzyeN{P)Jej>rmdi=*`B8)z+YDG3=&R?? z<}2qWy{P@tNk4rF@)w8-G3@qo_I0mY33>Y#o3qOY%dOBS2p3b75~OyCQZ#U?j!6U< zRSXvGo5OdaNYF00p?UL>0zg1Ek`)yWa}jo%wJVgOMiD}>kT2+4l_nSuK=g696ervJ z1pBR8wR%fU$xnKpESUjNj7jjK=~b!b00@Fzkd#*Cc{&XJxcOtl;Ytxm?k;f#LMWH`I!Xzz+O zqH?2JX~{J#GE)Abl~pFv!`>j;>Fxox$=audS;d@|1A!t^rLky=3EgiRGOH3lto39U zV+voX$R0u`KzJbhrzYuF@J=;?dZ-gU%>2lq2Of%3NO4MZ2ul(ksg&osxXa-}FI8Ay zDxh(wj&8_>C&PBa8WUTzhg_S+tVM8KjKnjkfFU_P|J=8V6WFA;szjCB{ z<(y&CB3Rr%6mN=sxwS^)vhq%m*z*lhMxSvVsGUCM39g*sL@UC&)F>~-qHlTD_D5nW z_VBu!SL%!_p1A%fwM6I|I*$lj&HeDutJ6`_Ty>XNq6YmGdwtXjVs{wah%Q(B@%ff2 zFlLx6nSepChQ`jcuYB?DmfRH;hQEEGT;EHVgF%|X8lYcl23@MAZ}B=7J=8m4gY&0% z^@^07U4!gAb$5l_F%ne3>^Krft)_O+1DkaEk7t|}EKOXGj62%!T5?p8{B^lU$HIZ< zoVFt5wE&$qMdx0|9V*P(e&ovo6i6nAHa*K#n5)~!@A*!K(1eb4gsY6vWYUN0x;J^* zvR+nEIH%epebUO&u;||%p+}!W^ zJ*KlbI4t*tn>?3Y^Szb6nOr&-kU4~>e}-@-|I3oj#*4Xm&UuYVO3`<^TplP*z^bJ& z6i;SRKRq8o-)94({8srymhk?wmdELn=JTyY0F&C`lc**AlM=R}U;mIIyX}+!um66{ z`mp@JuwLVhb%#FU^Bk+K?NWCCeG=v=F60a95-8C^iif@4Qax>^={~4=I_C)n=|TiQ z`JI0P3g@Kh^>*!H7RN^qc3XKe(jx> zNwjS{lv!LS{Nu*uO4a2tLVsX2tm3aR6Ql9QR#M2S9!^aA^68GaAI%ouZhissL3aBc z@<=aN&??dY_Ue7E9xb;q(5ls~UpDUbleEkc+|mEn7>M7nXg{N&RxU?B9+=4rWX`50 z758b09SYCEA%QoJF3o{aovbNp%sM`my`H^!?BWYGpby-0XRb&AZJsAFl;SU<* zUN@JUzr=wSw{LbD+2Jve{K&1)e($SYtyrN&IGee}L^dNDKKujp6toEDINa~C%SvY7 zp6|gc$$|l0&%V~n-QPy{&&lSd@r8&lwtFc|=XC5=d;7m)>{Jp6c6vJV2a*!~{(nKD zDu5#0tzsLqBSrlMsY{LX$Lbd=eH_|a+}~csk(l>gSmLSv9_6x+xW*XduHX2u3czV} zkfE!ojrbKuKSEUoEqzCRHyt?2O_xhxP3JGW+#EpML^Yq{D0xIF)T4ec;JMRGbhM zFhXQBY%`Sd*#m>SE5lGxs$X<=bXu>~wke`iVD|bn+%B)egp~!!?vAkg z-O)+s<6y0MT{_jNKT!(VBIO9Y)HfmUh)&UN^FI4JevRX1Q~R#!3zxAeLvrl%(ic86 z;Fo5=sZi5^pJa2w_(5U@?bTYPjXt|~=7)cp+BhBmsFjPq13fnd$R)nh=CWUB&{+x+ zA&UQnaDU|Z@qqIP4S9xRP?z(q5OS*hmm zZL)-6iA1hIfS4fLmr^$sf~2^LorA57UCYmoe9(iBNle@(YxC8N+wwnvrF13YGi6jH zl^A)5d2*y!DR(|7WtH`D{n6E7?0j%z^dhEwKp(q_-f>`hsbKl<#jCW@oyYu7awM`i z%yq7f%20~cO47YuM8wRjOy9$ecv*L;rk!tFCX7eo*>1DqPj zAqG*V7dd95K8d z4<>>jp6Iz5NAuO?l4S=8w14XP5jZ8Pv5LeJ-+pBnGTrF)?-cHsM_k{SLzK}*Jotys zV*C2F1mT{@6ym#yC8Gc0M;gaM+<9h1M#G;#Gzro)@2&Nt4F4qHU90dnoQ|f&h z;NO3XSOg7z`5IzBK@k=BtcF&xSZ`cUn))FVKa5?Hen2cXJBT2k!yd z+ah;>jH&s-Ih)TvT_I0M|64)m#~`j7h5S!iU9w%m#g6eLDlrrM?kAN%)Kp_8KIyQB zbHcB_CPl57HOtAY`o7md5fcp-t8rg|`0a@>9hUdM*+&YUe7ii_72+e8VC3JT!YCSY zcd7LqaV6>Uph0--&^G>x$~^)G+#O{YIuc}BI8 z|FHWx>a8}eXW~8+PQ{*^Bq({tKvQbddwgqW{M@duMRqTKMlh8s6~XPb7%*XXEa)$K z&(e@pTq66Bo+=ismdMZdW$g}0M7~oL6oIqyUpWs(4 zb55zfPDkY9*nK&f;3j@fC#;+t0|e4?;E)|LGzbc5JN0_tO`&~AeC_`z;jeX`#g=pz zx8x$vE5Gx6Hnk=DLeSvNx4@NV&F6^0XV-=xY72$co@Ju>jd?^Zb+E+E+)v&O)*0}x z4PF#+;Ad29=+&^qrdkwse?~Q%SL|~V;i70LT)=DJ__Ox;JZa8t-gX4H0p11{Lz8rx@H$6h~Cjh@SF*J|Pn)HnRwg+ik$!|whRE#tp~o(=X=2 zOvm01MI`{?c}y>b;7ikDD1Uo_qMd5V`OhU8>`B4rJcgZ|o&MwL6My^KHn-6cI0LE! z*bX=dKUr0DMqFt43tRrZ!dJi!PaU1eR5c#6dx?$JLGBAebYxQ_D^6+tOL(#$OaBtN!Ps z_y0v^zUBlm=9#JJlgPqV&L89{Dq0%-5>ZrMkW%|0u-M^=>_o=E{t(NnHqq#0ZQ zbZDEOG;@4eH|}K2wROy5Kl_q0$bs(MG2Ki9Q< zPmclbXLRBjV@Gc5c|9Qw7N`8*DTNDs+PQ|Es@wxz=JSf)JnqGY{Bx4n*KdG%;SV9O zeKV}~d9p6I`?Rp|x*hXW>apBZljer_n(`kO^-(Fcl_R*bx3N!-Nng{b8 zxSqxlt=d0BA=kn32+do#iJnyW>&=$ZBGEAF`a`s}a*Bgn%}k*VoNo^hlA2*4m}G{F z3|mxy1p9uIhrj=9y(!RmWSMqR(Bp-e1&`=!2_*a6VpZ5M`bGwcHM_R}Cg6Ha(kPN_ zgbOcKBL+`|(e8<~qhx438j1X@#EbvsB(Ic8msF4)=Y<U}WV*8yr?C@iai5U;E_!=5Etwi6#&%Fk~ zV~sknffb$|M2G)YK8?XV`I`TJz1~=uIhpJA=1+K~Pd1K$M_xZ}Od)C^g-bqQP5o!T zy;T>#eoNsCgkc<8TfB^Uq1Wb68-9Uxk3q;jKr(x#Jsr^mPOB8Vo#^&i;wjZwTI3iS-`>zagFv*3EXIN1}DQw#K8mTtsD%Ed_ zkfQ?gUKa39p!<<2h%|51>T{nMkYT;HN*&%PW`n#@eJ{^bmKC(hg>;`uWzq2Ui!c?I zOMe>Kj_vPdHd4C}n~_wlZ?2JJXSgR2fQ)>RJBoiVbpt!b%+zo55@mJepA0}$Fw0xE zxX-nP?51=Y=Ze0A6wETL)irTB^)>M=uAQQTq&g1%7sHca8!=V@Zj z9|ftb`YY=hKvN2!a3_D0OHUERc&mi{!1icdX$n4-oAK0Gr`OYYh54v~R-cG4+^ZR% z<5V6Yz872B`hb1=n}zGPpo7{UzkX5rLx|yOQ<{iEjMXj31okjxNS`KH+{~gXqo@2V zTCP1_05o9R`bGl+AmfxeSM5VL?d{>xhrmULu@Nj*t+&?3_x8b2*XzZ!jb0n7%lCbM zJMBsZbW0su7T=Nyd4E*w)2D`}o!2z;1wJ*?Q;W}rxxl6bvpRNyK+Z(l#~q|Za&vS^ z?t*>B-3;UtO@_7!Wxd=Pfinsw(g|e=Ss4w)o?|w9WwAkp3k*c3eaE!R?z6Xn(F(G- zvi$Swv5;kY^!nKF<#!Ls)yN= zuExhrHW00PBrpZ6MbO&A=FPBwFeEXDdW0C&uSH-M^wlJMT^r)6WP!b7wEb!5Gq7@U zTT(NMi#GI0GsNo>oOU!;dl%(aud~KtBP|ts(?RU%MtJUcsT3evayk!Jj^joe`ICxv zy)-mW9o?A$rVm*Os0OBm5cwN^-C5au&e60_&>|86-%%E+sXB>~6#a$UHd!Z>NT>H_ znFSwh2qtK-pp@qhLyM3X=#gga0>Y|@1``Q5%d_L~VdYZO<=-JNE@Ni8%rg9UB}(s= zH}TO`-QKoDoq%yI&2PRh?(+yTWH>po4)ea`P(r{K*&&JQwpNo#ny|jfjo=}Nix$G= zJ30RpsOJ?LZQf(3av}OZ*I4L!Gnx{06bVIc*sU--RZEEo7z)_>d@DVz-nu%W@AR9I zXT1*6ao@D`hnq#}U%eK*KX7Xwy;UoF-|iS2ba&IAPmUH=ftA3L$*ulDs5JsR$YL~C zcJEm~?O6m(m7?b6qk{LYV(GxBF$Up>4wwBI$%Ll>h4r(`@16B9gXE90OpA_dbCl}s zw>v9{B(R5DVmf|Lc+qoje<>lNs;x*6Q1j)-{Nh(HUya#szJ(|2_Ol2&tw-oi-5cQYd zsl>o)=+|8#!ZPf?;A_JfZ?m2^V15ep2cbQ)-l@FlzUX=`HUc5LZV)+zM67a-)fo58 z`HXyBoxs#av@-T@brO5*vz!SEP!k~>kc=mhZMqYI_w6r{2ij~st)$5xAf9|;U;E#r zx!@lFgLCkM`{S=!O4PzoqDu{b|pfMW0Q1_Y~W~ZArdLxA5p>5zwv+ zo(}f1Hi(*AI9c$UTCMwIz-|;%HotUh#qdYs1_uRqT;KcOl8EJ-#E^Z5d7MG_q`Nmb zV+msoDBz}71Kn7FG0guyi&HIOM=~tp1<^^k&dpZnqLS+=Qfn`kNT@DQnQOM#YTr5i zeuMAqbFv>YD(b)vd8=djU*Hczuht$7(sqz?PsP2a4JCC%JVI1r%|~iE9r~$ZN;>Q% zN7rXPZRAR)gFFM8N1rqHc&wSe0YR^j9M(}Bk!FIko{Q%u4{5G?7r_VoGN1~r1f*7} zFTl5TQKwZ^Qa1#md~wA4!lRGQ~!_L!2H#m$~;R zPCr*2wCx}7aZlAq07__v=Ja|2GRj z;y_$w-$jSf_hi`+1|Afz&o;;V+>cI_L}h5f><}SCbODB`huBAzHkFSu`4fB09jLOU8f|wF>rrP3Ga!Dp_$8x3d#}{a%gx{^Da;I+lT0E{gL9r1~MeB~4y1XB5U3 z!&|6T`%U)7w<#E67bXJDeOT`=dcvvNVD$C@v5~i;RI0JW>>LT}>JWC?CEjnDAxF{P_sP>{qT* z2E$@EU0)yw0KRweFDDF}VG+~ZPZ*mVQIZ&MfiQ`4;J8>pO)ZdSv|d|LS$G(ac?>XQ zpU$;J;>(et-VyPkyKgt^A$v}q~7 zR1pKSkd}7fDDl5G;G*CPP1%1pZgTnAmV0FLJ5}=wyRApv71**K{)RDnPV=0*^5Z_E z_d{*SLVrLj#Y8Q9(!lq=J3fxuJfz*_>PbBK{2judOJB)L*&Aoq<^!%;7sY(|*ym-2 zM5c12f`WNE+xnxSp4YQ#yxT%*EPt@Zet#xJ)Wm(Riu2h4(^EjG;5|K?aH(X4H`$6J zxpA!`3O49biK~-37RuQ(HD$YU_7B1g5IX_y?*?7AuHQ*?y1MaIawd4zRc_GW;tG!H z%4oR_JrDJ+W3~6Rb~cMg*7gv&-1qf;o)jotlupfWe%mUuIbYR#Br%6|Idx7YAKyIN zQj~=6aE9%oSR!1vbYZ4epW}Gf?7uBaB8rSRM?JFd{;Aoyfk}*9gY`b=(Eex{6uvdL zY6HPxrXF@iF@8N?_u)@k&@z(53RYWo(1+HsOx^qERGEIAVk6uycQSA0OoyW^lGl1) zx4>t9TDPF1)YZ6gD0hz}q|Q z1U{qUM)ZmWPY+Mab>wC}M)kjD*`Vf6#Ui@U8k%Eo{EF8Tm+>r&EF`FDZRUB`UdUN?}>m8(B0@hSBC_!WexUJO2IQ$@;+;tWnu)UPXg zquBM4afo#(>Z1klefibA1`#5aTO(ZFN1h8Bb+_9j&7$;dj_3_PhRadIC#jiH*IVGU zk(Xr{o{NPOzZv{Iclg(cMDau(E}PPrZSe^o=AGby*tWzCbZ`Aderm3Qom{)yL^P#&FbC17b1p z7xo6BxRuh?AJw^ao&`JkRpf1_D#nZE%ZB-%Ms!<_k6xX4s7StP&d1y0^@Uq;qO0AtE<{2yJRexeCdw~_#*2v)@K8P0KdIL#clk zmx|88%erE4BvP8c9 z)%}v&HmcKqZ@~^}n|Y-r9sgurz$^?Xz%8`Tqzdukp}eM$_~?(4w;N8E1ll=*%-`lg z4x6>OtvtOc{OSyAiWcjpD`*=#({d;*)V>w9{AxOyUAgbB+uUdK6N&%mLYe2WpLu;*ygvx75 zYUG*wFbHy8++WM7KXnry(YMR0G#O+wpsV~m0^4_AZ+3rS8%w*GF@wcw@%>tLgBIY@_NG6_#7IJBXgkJQ??= zC<`=LO)*9<7`aRS9^?54izkP%i+>AOe5>E27{F&?JN_Ck<_$@3Uh!55GU8Wm6Z?d8 zobge^6<%S3nk~J!ifq=d>pBw-x*z+*%_dED!U0mWyl92Bh^{k1QCCU#9i-?Lf^*MhU1!*A^iw$jz;q`Vw{zc-s+hU<3 zoi3t`VuE@ZsJHELc|=Tuvr8*&=MqZI3!g^}F0>5i-1EMtQ6aBuh0+4g|1I+6b8% zz$pqE?n^7SZA7I$=u^qJbh*e2H(1G$@B?5IuiH6$(44QRNBW(-;}Z!hm*Sc2f+5j= z+V3E!!K}$ZMM#E8T(*5O4Il?JFv^ePgIB<@91mLIagM(3sCK!kIhw!f2Pc1)x1^wQkhHpHLp!sTL{rzG-ZrMTd;?x#jqcH0|- zBK3kuCQGlgPW%0vGghZ|S3RT78${(AWlE2;h++*{pDnWRpD(jA1>MNv!?4vNt!u(V zHws3+kx|Ob4j8_`K`)`VS^J5cXe#Ek^#|97S=(kS{l_-)goBxhM%$95tj=yUhm;%L zh=qpun()lw_793)O(nX0>cu_gJMZa(WfK^8+D7%&^*$_m9iqa!)D!B|N|l3FX5^)k zc_T_xqc}L%BA|HRUJxrR3h+9Q7D#8X<}s{P&HW}FcGowJoc=Uiwx(Wts@{KF>oAg$ zPk$$nwXyX+iBFJxRTi2Zui6mIi_5o7e^m%{mPQg}i6yWiGfE~}XG2Ud8RN??_^UP&5w#4 zCO1~L3z3Sy(_(X4*s#aZ6=8iXWE7rQ{@|_3&=OA6=04kk zNVYHg%a3N~q2u1pw>pFn#_6EU`QhGWoYb&0SG!HtrJrBWk70b2V7RJazT{BczX zXc=qv1iw_r)o9;v*_wM)X!q553wB@L&0y>HVg$3|!x-xM#CGZY66V!9`q@UD?8k(` z@~5a4$2l2X7WXu4buX4#XMqJZ{1kQ@a#SMzIAqI&IYKFVjbidzo0VuogI967`*`1q zHJeS+g^e_773BBsl~6Ub2*yi>s|e#laIHtW>)-fya}d{jdm}T+X}JTPTzT+~$ue-9 zn0cAxepq+XJO@uLS_D^l;egYLA-ji>l=#<(9$#zS6#n_dHS^ zJfJ`f=1isI5nJCc4%LVgCY4V!)v4o#`A04CO`0rKG+4*AA<29wy^BjVf>lgfQYkp} zAHt;XlLs~@Ia1w3H?nUjgSsN-jkFy$6?xpQ@|V-+8_J9n5_*9VEGS&7KR%f(q{qQe zD_c+Uu-^6UWJ0;O=NlN!`F(15CAN!}(-@Xg9$3hIZC4HW^@{50Rsg0|VU&3!$f8@Z zmT)95x74BtniIJBC$l__nU-M9=mk0PyvRt?Duk0h^v3_nPwD_0#_^4(#O&Xbhv zmc12BwsXjWfcOWv(Us~SrLf!5{A$cS%m#^Grp$9Yhg~`@TS4|w;+-LQYSSQ#yxKF2 zS-Y1ZPE#ib(~8h0(_hZ)4f#)2O73u+`Dzk};XJpKV=b!q5>KG0n9P?5dB79?s(}jb=m27hh&6ncm89 zY%YWE$1gg{&h35_7$jX4(j6mhAt*ac~8K4Xm3!ofO$AN!3b!-Qw-`DiO5feSyx zRnlkDI#aJn%ei27A78Y7ix9GMruY3az_D0{zDs>~z_e=OeF+lU1PI}GD=bc^xX0s~ zBtdRg5rFCxU9Sv!s*Ec&yU)Pm@C=D#+Hy5mnJ2dXPdEHPLEu7&`n)302B6&+D8cDA zUm~XNi9OeE$r43>zn?_}l&E}lnBxkqmJEsTa4wNzSPvBOVy#Ba<4w-x6NXTr0blZ* zc#%?eZ@JIIh+-6Jo7Gg7-(&Pxo`#Jdk{yMb_tE*5bF@`_O104_%>wG=#J*DFkj0ET z4riwH$)lFgC5F zMDSN~cr%4eJ0oe)fuR_EVT?M}nx1Wv%|~U^#6FMpla>#6B3&*9K8zF8@{?CvZWr=< zY#*{Hl%n_}zuzICv$SK%7GJQ64Q8U;iWq#It#gi$djP6CEdzl}I~cCgv~QNVwKLy2 z7AzcL8NE&!7jP)A)%Y<;S2=Qi!*p=6=d9vs#vspO0Nb4y+>s=@3YHoQFe)dav`nXe zlNs61LZDCum>u#J#^`hH7)W4th2jgV)xdYx74q7((H8q`(9yiu@C-V2?@gHX^4)T*ZMu5cKL1`_=02kX0xv zv6eEij#{h}afh9OA9?hf$=Y$4%-;NN<;HC0vsJ%d(5k>=a2?I9*)rt1e9cEy_*TuSHE7!4Bn1qU%5BV@!80vD%(g;*u;0734t8v z!%$O@V0)-aBFCtPT3u8M`W*Cl7=6m;YozO0g_Oz6T-F$jBwExbywMPJ(Kk|56FtpU zc8{Fd63n4FfX28;)cUZ2MQYuHF+0qkVbs!h*SfS$kJ6UtI=g>`4q3_!t9qvkgE575 zaMhKww_9Wu59vz47Mk4U_MdA6{Hkj0j|6Y}s~6^w7t{o(j`COsZ!J1dw4N3aV{=#5 zE_Gx==lJMaa;TM7}(+MNeM&F@9Q(!BABfQX+12j%VU9*lOCHqAtNR*uGIM z@NX8%fN0Fr)+pTZg4ix3lg85hUYl0gdr;%v#?5_-K&t#@6s!$wyEXlF_Cvp#rSb0R z*yGDAdi5eopkwV!6jX!KggP(*lqU*F^(&@r8uu^b14T>1l!GE*6gGU1i}-uOtk&ey zQcoctC11GF>Bm=u{B0`*!Olm^I@ia1BzZE}v18<4=Id{jp#(mRzMuPP7Yii!ItL?C ztH*YnDSf|?&LxyC7zd?Dn$cgQ+lEDcCwLsmY~8iDhEszg#KAy8LM&p8kRb1h zQ6;j=UwG0()hMP!Uy<{}N0CTq+T7MYqka>!hRBlkHU4UluF^T<8bD9w3Tge4F0v z>Vrf7wE>?eMkjjpZ#ey>ZFrflh{&AqIDqtvW_Bd#huV~gktN~mmxHtFVhu;|FwAaZ z|60A}!E}YsNcnKr;eC!;rc8Wgsdg|zrP9<7`{S?jpRHNd%JlWVcydUbEUWwft~uct zZ+CQ9yhAy=drNuuCA^a3;b5b=@ky$SO#HBYC32}zc41iWuuERc!#_OYBhVIMmR5y8 zz0!jo64D1>I0Dc(_$z%%0=t%deV*9%n+t#wqBKpH)YIa?4oQqZY+|M#4!QCq?s$(P z!UjX}?v}pHz$5dA!ZZ5nP~nrkMxV$m`*Lgdn9h@y*ICU+c>Jpwu5pWUR7!v=4~^1y zDQP|U{f~jKAdz<3-;uVFiC1st)_EnL{Zr5pm!woWID&?S(wH5@Wh?rFa5*g)#>|F> zMbQihpn2H~FVZ0KG@3U+G&piA`5NvZEH;WJ1Oz`ir$qC|BW3Q~dkf|e@~M~E_zlas zIw{clWsSV2x8ikib+mBb`biz#{Z^}5GYxv!+b@^C3l5wHY?UA?GU)eFFWwe$6u`k#n zp@kSGcr_@U0A~xN)ua#PF>?n**l`tkwC`{t;w~;5-K;=5WlLTp0@x+d11_J}_ch0I zqygA3&)5Fla18%1&z6ssY0Y*z8apyj$ORVM>f~QZZswQn&zCoYco}6YI$86sELnJ9 z&1@~dShA4;pe%+SuE!0|3(G{%jQJadF+x+uS`BEBaot_K>;tuB^U9DV$2-e}Q zEAN9nAp`<9boBy#glSS;N#7Myj)8qE8-qxoQY;)q5O1JpU|V-M2-SbAIPN zkTT7a%CFL1jDUL?GRujbTVt(# zV0$vEa_@i8NLB?4D3;Yd_^p9>yMfY$VB)@v=KDO?U)ikAmv221bxTOfo1Ia9yzQPe1yfdwns?rUQYRiA82$^)f?!n=VTsN#LY*HoMf7^^poDEFi-Dj@Q!uwMIk8v; z($3)6@gV5&7G9bcgHoD|P-vH_I!?BBYVLl}z(;!Jm>6MM-l#WD8oRt!uT6YDM>5LD zAEUGU!7y~m3lAr46?;jsUWL5X!F4~!&ahik^i8JVCkc<&`JZ*S*uir^ZR+JWQhV^c zniqe5gX>tGvFsAgPW@Ub6y9q%$H$z(?_T#tA2Oph!!QcTNzR$`x{21WuPr=DDNqZc z@U9*j9D=_pdvzwI`2K8qH(@ewjz{K!x%@S;Z@^^*0-|vdh&Cj&g(Q)3X0SQsuPzCl zIZA=L5E|^3vuXxx5v@!QzL~s9*~x*Lmk|1k&MImCT#2Qu5}{5j!Yre4muB2uiZHGZ6?!9mJY)Yy3`zj}w`Sb7l@JZRYU-AUAuMxD zw$7&=4r{DYlFNKHt87^xKq>n%h!8=GG5_cCaacdE-!q1 z+-|%${WVGW)I9tGeupKZ7?B_d{e?w*EGv(`0ke7Ofh@lGcGT*Q^DRue0t_S=y9dn*TQ%kqa(9Y2{ zm|77iZ~K~hql=g?YYfsU@PXO2sXdPF@`&1}JI|LUHQ*|>{^8(SUIu%BYEW>OXYY;|gr!gR$l_YfD_v9<>hwUofY+l1oNXEO3_2C|+>%2p|T^3%ZioK2Wt_Gxk)O1jm1ELv%Do^d4+V4xC(|$*pO1h^?&ffO2fI=$d;t_Mg`f_WFyAX`m%m!O zOOXr$eQbFLQKN0}c4eV2bCovYeXr}AR*J*Lq8{(aB5btx8xjf>Gy7`|lDNrK;+d_K}|0IGBwpAX*;@uk&MRXwPo6!Kt2n@D(*$BoK!P*-@2fQxl#Y2aQ< zn9t;=np51iH@OEnbrLHQ!C-2tlm{c%0pbee_z! z`C7XLtdP1W0&XLr3kB?AQmXFE~zF!el~H6Gp0-fE5z z3CVnx#vbxW%>Q8ZivGXDvHTE#9)@No@H6oUcpptMf!dXXfZ#~88PnXLgd5y$LiJAo zCF6h(;6&4Dh#R0jR@vATsa2*3HW}z`>@JoTw6wH1Phm)}cY*&qKrTL3vV*ZK%= zyjD>$mSEF`o4kV*ckGv(;jQ(8esgo3!zXDB(3O)z@%zevey%OG7VIu0sbY*EN8F2w z$68EQ3-E|Lm-s^+YonJ}==L_=FWLamP8efa{+e(^5|EtBRb0R6#8ZSZi(~s}^*M)l z!+Vjj@rgHBFL~xyG%;x1(6XjavFCF)ou8fT^lQH6EMnA2FDS9<2cF!SM#?n%kQ-`X z%-Fp&?l0#?CQJ@{BdyUr0qKV?8yuc>pF6A;U^|!5yvR#nv=)bw$Nxlqq==CQk#2l3 zVTN0ag+9|hE>XU;xVOt##Sk`7yJ$Y6m$XeYz4TDa`{3RRN-z27zUjb09Bu97^Tm~j z%-s_BI+R0htpUmqLX`w3OA~>-S9;BAoKJQ#1@#t~DC}uf!q!dp4v$$MS&H=DCN@Xv zpc3tMp}7zVVt95>P%9Lsm#pn(2-?AHnPn`loYiV%Y~>9uJSEgWx4N_p1M_&O6IAO8)o2+vZjmRMbg zTawd4C&j?BwqrmWyv)KG(kIb)Y9Zsmn~eFYrC*+aI{cV%dr(!PU!fdRAVV6V-C%%> zn`ZT43GiN*>my<@5d*OxI8B)2X<82*K{xJK*Eb82`b)0@HQ)GsVw?Iq^GDja+R`A4e3>j`m(4krw_(V8`&JtqL22HS!S&nwPc4ESRXWDvm0 zo*wli6%FFas)(5z;-Oo{vPluorY@4uKysRI1jy0obFt-gx<-bp1A!ZIbmQ6k7MR}g z{qkf+QXrY4%wgj4aoUP+bHn?^<@H1T1f{IWLi2a(ee(o>Fc344ST2?Ka%(gEH&`#h zCBE)&2$gdxiO(_&816o%Rs&Ulta%-K$nU0*7%+RY7{M3Azl^VKYgzjF{)|ogXE-|o z$;eVu4l1fT$`EBmeyz!CZrR$D8nI(R_v{JMlEZx1gkgWJ%>dU4*vpvj6r0mB zdwhjYC<7TPI7X*G7|(a(H-6E>n;Gd>oD{YN;f+<=BPN$D#wk&G^yjkH2Ms0b5PM$P zpDwP9d#v$##8lo_^QV;w@{`mV!0Jd=$r4=io~3O9a|r(sJ7MX>e8Oa?8ep$F$w~ zV(U3mJd#xT!tp~7Z5`YwJ<22L%0rco%O~yBh8SA&)vk*#aLW)J;z=-pNlRBE;-+0& z)do^iu|H`;rWo(02IK~FRf21PK?R7ygsiuf8-Kdq1qzwbCX5S~(biGNdbxHvci!3+ zZU@e{n-e2WcY)=SvTL=3IElcOd-=y-S1ys!fU-j}VoL6GDN#U2z1hkO_iAbe2HH;d zDtDO}duU9=(1E`MA!{J6oDOwLC2T1I%!Sz!f3m|Iv%8Nt%vbwlmQucwSguRnA>o-< zJ5#Pt7mC^V$ls7kOnNqVPT}jFkIkv~{)=uhtH~&M6(}(IYdE9uE-;Ib*YP%ZcFv2| zce&N0{BXHNwm!?`n|8#0pcJt>lQz?iLT3EOyzl{?u9v~RJZ>03_l;KAuP+>pwye(% zh-;8OcssBJ!HRr=pj90_bt5pOReW|o(b4aB3JDgEkfgx7NbPii&P+C)i|ROLmQS?4 z&Q#c*_W&JgRsx_y0Tigyq066Y7f8TR?AybZk;SaFyEN{3d<=22;L^wnj=yrhe@3i+ zh=39N`MbISO9VE824LCVnJz$BJqinr9>w0Mdx_2WC{i=W%~$5JRPto$d^HnCvdOGL z3IQu)+l&jwv%M_9lnDVyr20{NF^_B1pYGi;r4ts>eGg=Ho=o7;-~Odl}^&7*7Oq>;uu^$ z6mBD0Ajb0qd^=G*0>cAES4IU+_%*p#zpEUCrT8A=16U%rWYXn+Yz{FMVRQn+m>lmH zg6RGEMGw?sYFYDZaLO-+Krm+vFd_%qGW^KDkCrEJjAHFcYnafTsC~Z_Taj;Bhd1@D zcPXLFpgMY;Br=jABkfEr3^S9@fEn;3Gk#Kw+Uim`XfyuN;&@+%{qxa#FU2)NNq;TBvVC@rG4I_7Dw@?#IpXf*5QSy?}e36c;@Oj#)mudu_9sgzj!(q zA>}npi+AvS7~(u)J_{8!0d07D1E>VCXQ|%5^COKc()zata~EtM&YkA+#g29dN}R7K z^D)eyoR0DxlPhI1im1(ixm>Jy@pAnfcY{|84P_HEHhb>NeK87A3&j>oEpXM~-;}-* z0e^edog2Th7rLozQZ~<3ufR)9bB>u!uZ4BG+G#Y4g_&sMNaOV>e0hRyKecN?MO^wu zV)nxVXkOV}>em1q*^u&Abeowf$E#JQDoYiR5^!k%YhsymoX6_bx5fvz_Bh(g`o=769 zxe5~&DWhqEI&#GsA4Q?ty2QyMwI%OY_=bRE-J}N3x{CznmCpggOg1k;h2QaauZDk8TlRrR<9;HkH1;P5>^TV+J zj9l>h2B}!>Jx8go1n@wxoL)#0cuCI9^~n#*eaDJcKVR(UwdG7ry8UXR7sh=A_jtu8 z%g}u9IyS)l76C@mj(+b*H+7OH+21I@kgnGeyS&lRJM|%Aa~C_wKhB&YbfmNnLf3A^T`m3^I#_KyYP8&tw+S6Y!r&mlh7H3 zr;{xnwthsL9QDkMwn;+FD0gprSO3e-kyz?k0^(AI(eI4D5;opTm5P7(u!vYMHkqI3 zj#GqEDrJko_$@czgPeH9#wzpW69N%2XD^Z?q*oMTc~(YdM5@I?F=WcpcqpXTJLd_{ ze4hBq^vHyc!QUr~4|df(uMc_lrgl`~PhzkYw|X=5_}+;MU(Fa4Y%bm+#V}|oYqc1) zh^hFi+rYH1185Ad5m>mMqoaC`Cq+@~kYqdX#xBnu#u*1Q?go2Zq1bGWhj}r$hpX67 zQNL=33*yk;w>XhUV(6L3XK11Tg!9-X#4Nj?JrC9PoBoW%*QDQdM~i-8i+x(*ITr9H zdy!~UF>~a(c*y0oBX6#=&sceIa$k}TZ!}yc%5))&aBtEOH?M_@tBaTg_>VZK4 z7+MVpK9UyLy?dTgNHDFc#~rB#JWBU{r*vx@7I}I0871c(Ei1-hADX{J$`=nu)ekAW$!i$)#>EN%?D7k~OR>2S!eW{p9KcFX zYb8_65Sj@mS@L4BGb5aQv zw*mmppH$V3B>3{O z_B%%aGN<%DDbCD5(^`7!OW>%?m5LULB)k_bTlwjQBPu5-#rUdyMcp#+HFVWf7w$zv z?}ANV=|b&RZO%TQGI*#|JFlWdv${L)1-sZP;D~(#>Mi!mjFl7#M$%Yv9{FG4-_9UuU>JKS~B zYE?SMAHPYim6tvp~7lBP%_eo17vtc zNk>bZ8S8Vr+a#1wM(Jw7pLJs1)`2Ddh#5PWbKAsce?W6HgW^sSfPZ`>~yDS6d2o^9pDm???3G zf)z7(HkpBSR0t(eOpZs)-sTA zfM5J38A()t7GhA*$u|zl$zZ}sAjzbLE-V^YYAiSh2%H;DXidzTHvw{)92!Ej zZB=kSC-@vC^hXOd_O?%4J!i*7Ueir24`m2ez^%JFT@%HS8 z<{pw&`+2b>Ju9G+%hsDoqn^KOt3uP-nRyUGer3>KQ5n*ARi_-{|R7Z|$5yIKMi08^6sOJFg4GYAiC_kU4k{cQ^_ z%2~*Jotbf1rkuzslgzCGiU(iN_4K_$+Jh|6_lGJu&JQIms~It5mx+!VD2^_W%FrFp zQ!EZrS&l=F;E$S|P#)23Wdz0RSbw2Fq$t7&=Dl;|t$FEhxEY1P6SFCmtV-gK(&zj3 zVX|81u4zxrW1}YwH+RC|aVI0K)lQO?QkDXke~qZB=Q35j6sut)B}bVuPy)N}iYnE% zh36$=B$Fbwe(ON^TI1VOi!h|MtY>+4F@ipfvHAR zitiY?0kS2+f?7E1Ur(IOnCRvsEl89lfk z&3wB;M=}O;yRnF4Wk~p!5;RN{Hgd9~35#`*oVBuQ)43*-V0Xi9=MsfkmPr6=3#0*n zY@tpGicoNeS?50-XCR>_4D%gG((n4l2KV9)j{tXQGTT(8qYAh3XwSCS=&y+DCIbqa zeiHYo*}1z6z;`^e(q{DFU`M+n2$8U+uRqf&#TUlD`#TH!w@yZ@fkZtuJw2wSNKDXG zBY3@G|KO$HV5<=B_AWxUU`x|74QOy)hGo9sq1F5f+XU$zfDC{e`f}JNe-{w}EP_8@ zKLL<+KC=A)IV3Y;qSAqsTSPJA?KDsF{a@cFNM^fwNO@~E=B}rcLw1|{DY>1=@*jvy zQ2nhJ9WGd3E%7!<>i>RBh~22^CZE+7g?9Y;-MH)T?FTc~< zS~teJV)l*lcvTKIZj>fr2Nr0RqX_M2HY}3y?_uuk!~nwcLdXOt%(kb|{n?fZ1O0ba zf#e2Z(fd>iU^7ua{ZMI}t5*y4j}g+7=}TjXW>rJyxdw6YcplqmHJubXhkiM@z`3H6 zUXwHTFIOr_e&&DzjJGyZK)qb!_W#sFhZ{BY@SNrS$D@W2FCb2JRRkAc;Q3BmIiLLn z8Ux`3qL)s{d#@p?r_Cp-tyTxryWT8G$V()Sm`+|4w}UMj|3)cCW(9E093#J?xYhqP zVERvKf$R^OGvsicd%6o4fn-Yow-)X*wIs|<4bfLnw7w`in8`!`MQI_=g+>K9`v@;~ z_WlwEPm$GvPd4ED$Yb_fZ;PU%*eU;lr8!iE8F@N36@d|vE)VZM-gLb^ZXRAqi_5^@@1GnOn zEVSe45X-dOzdiyTQfrQGr#eUduP^-1RwHCWPA78%dsQ9iUG%|-;Xm>Q5jhBoVui2! zGK>6_!gS_8UM%Dnk~fe`{OY|Hm$U(U<}ouz&B@~fT-JtoXq}zZMRe#oS#%Qne<>1iyi@@wlalNbf`wM zfA{E49+kFxr6y@M9{=UVuI13IHHnfTB6jz8Ceg%GF)eK}E}xCIPL|1KO@03lNS zzg`H)FhFPt_~<$J50k(>ATS@L&jolHue4q~TZ3>Xq|n=nfz~&Y+aX2ZUs~1g8wr{^ z+~`QAP$JN9CkPfM`anuo+XtBJiem7{5c!???sclfsR@GwsED{#G&+ zKhFtRqNZld+#$p6Jo5}2UouA0)diRhHt8+WMxn^y{=13~N zS^R&_0ybLM6-`+5;T82RFtLp*q}kZ+e~Ii*5fbHGDL{xE{SbJ$17LPnbMbo{?37q# zC3;e0{Yt{R{w*QtM)f zl;$yF{ypDsaYm*z_3LhG`ISBvpt?^$!s%e(izLNkQ>W1lV{wW7ziy9 zvVq}u9L<&M(;AQa8)SM+4*^nj44IpNxV0NE|(@g^_xNYJX)#T{n7}vge?w!zAxX$4*dUL`<0=|=}V$x*RF9I6w9Y8yF z!Tfq??@U3D?@XAQYrKK$)Cw61OJN*h)vx;#;wofd59vtkwJW_VA0AsbWEjAm8I*?p zH_D9?#(gog0Rlsxvxc{dIeX_Wa3H#!N^9gd?~hloliyz_F^4CVC8X9`FQlUB=`GTq znh+If*QbeHk?hytod5K*TW-0~@Oa883=g3Udz~P&CF@4B2YM^EJcpN!vxnIE9qig=W@MPQapmkOE z;Iv;tAaGsa47Yz(Dk@DSx>v*%Q zj^8eK?h7z3mthLOTK2IjZLI9_B2QHz{>Re+jq*J(Xn*FFeI=*W5~+^Qqj-31c#EE} z!=2L#DdPvGBC*jEb%u>A9ulfdUWXR_52xyWo-&h}3P=N>V<85+6<1N-D)aRowB-ri40wJ*9th=+B!=2dIc!$t%q2$D>_U zZMrz_R}~+xB<5UBLyU%V(}Gf4ow2{Xb=lZH8n03!T#``vgY3$NYG{;fHLRboNltnu za)Qdowy9hVWy7|4IE5#m%3^xd`z1nM&F2-$+l%d(TxpDjiRL-i{6GV=r2>Uy5z|(e zC%>-*d|E@zN#pgRNQ^h#evP2x0SXT46Cqa;Vy~N)&M2Ij)P3Wt2Kn=YmH_1+uINR& z->aGjx2^cD(p(!qcpr6I31xATTt0%MHhA~Kw7=P&_MSNU*1)WD{&}?TVAcRy{oBXl zmJL$>ZV>IGVdno8KmW&Gqj4gLg<(mDr<1yNgIN!Qf#W5_n-oZkg)u|*b$#x8uL?of z_6xQuP~gmzYs2iy$9kb0zvYlr(u#CWkMFRPaCc|1)EMLvuk2b>&*gXyQ3yHSoi0~@ zqK6Ou@Ra4n1@>SZ4id&v`27e+kPq+0qrOg4up8y!eC_btWT~66;$Q}>+~{uX*7)9A zNbNTzXnaMZ>V@sgE!}h`D>^rF1p=X4&vc;Ug~ZLPwbEMXF^Br`uBy}5#xNUDRsxCW zGYy!+)v=GF}~>EMdXl_@`@1@psR{6lB>)s zv3rvpaN;JcUu@N-j#1p-3tF!`9-;B?PGk`2<&^6-Gi|h{)8bAP#5GlTN=6arf0&GdDc>}xX$=J zn04(CWf8O^jup^rE-!fQp)r1!(%ux8GOJj zy?6PjvW)ZTH5SmwK>o%$fkHk;Q}A$nx|M1n>PS6u(K4RRCA#*d)R4vNqdn4U=(Y3n zDSQh3MXp@&iMtr(h-NNm7O?l$wddum-H`>6kiIU&#?gKgsy%M4Mj2d#MvIf%n~q&Y$XBhC9>v(2l@mCO|P({b*{Lv$MwZoje3xVNYuFMZW8*!lx&@vB~FDIp!odL%BJ3Uc5mf@z|u13_6|2;+haeWKX{ z=e4K~RP)u&Qib_}0z@4Z={2*aY_jB!Xi*f5q{T{HSxB|;^9XE%oc^d&?*QYM^#Q%& zW5+4OWPW7_QAjvSerFv?Dr6Nz-L;zLENjhU|3HkU+=SX1Gl^NAbt%l(~MSE+B=C%d$TYaKYXRS*RMHb zj6#1{CrCtLh-ZskdpOY1fB}Sw=2A1^*=Leu1MvSmXEtzJRmp@k_n$he9(jaQ`G*DU zoJqdCsB%bgz_qz1g-K^Oj?`^&XA~Bh!P&>_`dLoZud=n6rV;u{r9h4;Dw99@iSSAG zvBgs@yKv^B(gzsWLtFjjEz~ zy){|`s12!&KdLDd%MSB@pm}g@7zU2$)SR5(EusmC_M)(`lNElvYU34NX}O56(z6tonz>_>n`|N!waZ#pf+|#{M#m#vd1k%{FzW!%6z{Rc4#4sF;5tFd~^i-1}YV zkI&HmD?&X*KTU?ZOUB?6QdVGdeJU4cr~DF`N8o*W91ffV4we@Dv;Pzp`xAMg0OEKW zHeS!m7sqWACd^m>qhmMJ4!!2Oe-3&c=s0}D=MzuN^#o+J^AjSiQnVHK?CyUD1fOs2 zsX!tr0cNq9f%x8w)#w#U<8z~NwNO)ee%G7#CNvsr^cv-sehx5{oy|F&^(>#d;_@T* z5p+v8IwKjqJe)Yit3Kehn=8kbbn82e?Eyzt5Q*@%CIxgr6 z=tDVq<`ZiH4s7t;cf*c<1=P>(mZvaDFO1n@mV1_NTn4|-TEKST3EfAr2r|2mVlyaX z@AeP@*y?*v#dAx99svP7(1H7vJ#_eUh1dWgF@k0$_S-yW#0ItE00=2T#_=k((cvCD zhFeKQQM`#4g?g76@GEfohi)gL8l(?re;sapb6y>_u|FF(c6+!96`oD!Gv&y&I4gI0{z!A+dZ>~o67S;zSC}4^+VzKRp#+fzz{CCsq5?! z&Z4g(J-lIYj;*lHK{zi&9YGAtNQO{ig8Tu!&5_v8WIx9)}{aOjn#0AsnVsBb{^2D-8cQ^YK= za)1q}++P9|)%3*mED+)Q$PP=+etf%isT~wXe%?15bdxd0mYcm}LYGO^=3`Q1 z@N2wZk6qt3wGFu^*jGn>54;Bp9UlX_sURSW=;I!^-|2Q_!^fOOkRT0dbEGuw`^9|M zWA|FU&&n|do5U*>-BuwrMI(H`nlP>ge_K&`6TI_Ld?m&re&Dtb1^p><$)mcEVBP-z z_ugwmA)j3cY&|@jQv#gc4s;%SiqK+fYdCdSdFU!OrGF^Qe;(OG;-BcV*UPM@flU9= zJwCCDi8ut_pZ=QUy~rixEbd+h*M!O0o!vl)`t65Ip_VQprx&5E!{g4ez~20?cu3g% z>8iV^?qhw7a{eaY6Z^npFKR7zS;qv1MEjL zF)3c*C&f_j9cFE&=p3==8kycSCM%1mAx@YjF+@zM0_P#Zv_=7Jl;5wIJ*w`{ zf+1}ZbLE0begc$+SsthDw85lGsnz!=wN^WAJ4Bg24BP-Z84K6|Md&J72Dv{AmES^I z6~5)7_>A_yBpekH7O2nbyAVPpp17UM^z+4Ze3)g?6HJ)Q{CEeX6*3UcxS#!Rn@=c2 zsf^`A-L*@qL;z2xu6u7 z`^=qAwx>fA56(X8^RxppKDL6Dok6i!kL4RL&nt^6qrPK3i_jMmmK} z#v;)GmBt_0+yyE^@b>b+Y^zR0}O)pIWB}<8WI$jwgpu<_*A78AoHKar= zJI$cA8IO~B=BoJKx8~c~pEjXA1sHPpQ=bSW@|oB4%vwm1M8o=HWHJBf9U0qC^paaf zG#XBNXJ05a>PPi*)DPp6+jD(22~?RlKI|*|DhxI9H|_jE>)eWA4vtTb2npAkGhP%n zal2l0V-(t`RF7E5bsESQEEc`iYck4HtuOMY#FH$}H1OoVwxl(vsajmf{)L?`FZxZH zT0WKXiO*H@heo5;{IXAZpE7y@bAQcIWA$eXrf%9>w{DP7e+^+{o_9JQ5KKr=$)0B4 zFt;+z9AWiljx|3rpu}NkH^VR1+w$FB;*2L)8wDjr3@}AThw;t?H1H8}pV>NRm=`CJ5%gjB zNNW<=RPi!{3*GH3lgLxGQ?Td#68~@4d-}22#1AJ{2pTy#TSqQJ(T+0XJ~E*zK}cPa zu@bqvBi)MFy|>`_pI=+#+6P`ZcokPzDzX!YV*&QyV2LEQpdVHSFg!W zvxkeBg{YO3lw^!rC=BE?NP8kPN5@iR6KI$y!*HU*_jzH5FL0P-TAJK)HU1B2ZyiPR ziL_(18GevkyE*12*__Iwb$eKcO)r-4N7!nH{Y;(w7xWmvw6#9DOdiYfb%q}SJ}IBj za}?v@HgB3IOGrzT_`iQ{fr+>}fc<;juLEi2Vml(r=-q0Y zK555yA*aRYOgVdXoBQ<854NV}(1xcGm1aZ22B%$`K6lOpUPNvZQWCL`4D}Xl7D%7< zJGy0g9xEw$dT*X8R2}mcH)$7IyyhQi3|t+?h%>?yYVP*o$bNkEgh&jR2#vz2tdvgX zg}Q{pxzobkfYr(JA5-%bSL8Mq8~t(hGws3>50-w$mbbk++b1EvIdcALsPn+|@yat} znp5)@@v)Mi#g5b|wkQwfMBy&scCo{qK6Arb&eG!s1xo5>iO!R{weYmRF(cbUJHJ#JUDwM`B?b;I%7 z6P+i#{^k*KNY0>@`wqtF#FPi|BM>0R{eVj6502!i95`FZN&InmeVikS1=8hm&Q@O7 zx|#fTlHcy%4DmUwA07Od7OT_`myR~4?Uau6DP1ww6@yf>>y{)Ou@!R2YP`qCsaf9A z$uU?!hy7T(nLsRauUO&GCOj0cLub`v#2l(Ag7ls6Icz?H?MNuP{vgAp5~mx{(Kdh2 zro+NsvTaQVRtP;xfL#tu8G5V}+dzqnKSkDG;9aUUe>mj870ac2V-L?1!hT@TtSG;6 ztbf{ar(=uj#K$l#!{=~;U8kWctkUM-h9JTx4o^-zllP`DGwNQ!bYVk9CNI~uU5-(`w?WMtXs^DAY?`aeXbZGF1#Bq)+64G~+&nrf^YeE?`w}j_#(Fmz zk*h<|*CK^hOVPz!ST{H~>z_1^mF%NTy_U{UPu@=iHvX*wMLz&Hk@@y>*ME<0_#KTS z{vIujib9xPX6)8saHJ%e`vr4RLnDJHTQ4^@jkN%Em5hYk`e0WOB{RrNXx76FvW4GZU!0e#NQM-gdBx?-K*E~XohfP$WJRfKGwu1syDZJM806> ztulBy1sM?6MfI@Z3KcD*FK1El``mA4FkF7L+>qX2Aro~{S?ZfYmI2_WN(e+d*ns>h zHC|{DS4|P-ScyYTk@MMU&UlJkv$T1HA9I@jlIUjUiF%w`R86`!!=O~_n$7DG#Bx{R z{mLjdg+x13E-!iLd_-)&&2wt4mx7NMS3=n|9hDe=juaTvE93?@c}vULxA|$2YJO{} zG4?qBWpMP(h{K!4378r~-QLKZM>#WOTs$5e1Rktzontnqt%%P|NR zhJxN-;-k;@w;XMfvoRMe0xV&-p3QT$w++jCAidDMM*Ic`Sx70hKCR<_ow@s{J*gsG zGrj_96avNUOI`7bk(^`yuISx?-)5Yi;tx6HcWEUX1qB%k{(`ee!k`S537ptjwZ-M` z<(o8ooE#*|EIQYyYpdkQ%gJ?&s^IAk33036e<}4UNXdZyqjx(A3ahs827PGfI z`bmE9bL)b$?u1)kktD2xNL1A&HzQfcjh6fH=4`;ACP*hg<&r zYyI(V|AMY`5t91Ya9)8e*vBL{v|r`MLt&aZ5M(TQa^W1*RVkU7zWefx*N$IAiL_{Q z&Q*SWFi808-qEZf&WCWd?MKvp6l84pUXe1gFvq5APs|_JQW~*$cU8Zf@!uc8Z@fI> znFZ|9`{ck}-R1b$QW zukPxF&R_1@#a-V0sNpuz_rCmUl+_r6&{>cX8$MS_(PJ*;wERvv=~4Gtrf^q0M-nlc zHUt=dXlo`Nl>#p-z2{ca{NkIuPR?cF^)5Euy)UHh(jdz{{SijeUuC1$J)iNG3g$K) z8uc{lc3IPLqH>C`&I-TXIM|FxSrm1~=!nVi2Fd60^tF)7ezwKWScNcR4z{t17bn<@ z=SLfkbC({SDa=tLj!aH7%}wQ=Lu^7G`@yYkKNLP^{#cArjY_nQN;}(MJp9m(m;^qH zxJ)aLk%eooz8n5|$8`bPQ7vNc_4vO{Mv~(+_|+(f?@CKF8i3n6y7r_GA$4IXa$jQ0jy+PLbRWw;3rle&3TK68?QIn$x(xL+oUd=IKa z1-2o6xhrEmR?et8;JiN7P(y|+3{E&$`s6~6+4ek>Xsg{x z0!kp79O|=5Vzk`WEj22jx5|3+mdX<{?ZJGF7CHOG+4TL!QmT@sDaf%`4dd*jTqe;I zL%bp_Fjy3o7~M|GN$LZWMu^&i5=l;7A}lE;S2>j-Yvx`~RJ-?X%wW-sWUg8o+fGE- zjH!9MA1%MlbjHD!sc^LebA#&^v0s+>#D=DS^}sAQ7FZ{Nw(1^93>G7#jbi^1u(L@( z^cwi7=#=`$P5no}kA8%>vbipK|N2alkn9q@)(i3$6HI;k^0qCEWWzwISrDH^iTifa z`=Gl&UxS`iJ>B2>+qvx3>Z%oG-)U}=JxnW4wG*t5UMg$3h9N@h!E(2YL1l$iAKldQ z-a>nh?O3^E7e~!1^k-@&r^8se+;GX0yzC}pU`!)0zAkOphTS3O(Z5Oxx=qTtdi**P zS`QW)#>%|K?c8a(;k@_AHX8hNrGZ?PBO_(X19B*m&(=7<6yJ+q7zH{-x`B`hCQ4Cv z^(gWcMy2>cf?BuDQQ8^rgNWy08;F>0_9JXg{pC<0BQQ3NvR| zGBuGu=t+}kvF{on{p5cbS^qScABps#TMqx_ z#A7a#Mi!;`2Qej2YOsgX730`ERS-Lw!UTQJMdb4oZ&E(gkG_DW`^+CPtec7ERM<7L^pD{#1{dUU_u z^C%2>MYVnwte_F5-n)g~To~2llYz7qfqMX<5k%z7It_nZ`dUSqjg5E#@)a$TTcyPx9tZ|?Ttj5isq~13By)?4{$`{3Fsf^=jRS| zGj0%}ta`EWu(gVLjW@WJ@!1S3o1X7}$J0R_$`YRE3ATLCWBHT8yzO0#*LGdIQGZ$h zCOrS)t6517z6CNK-u0xxCNH-$&>?%Y_Uj{Wl|R^B&iIamkRQes?{jfX0{H?`-RI4* z3TCPI_=7QS?UYzqEnt_IG+5w8cl+)Gh&tZ>7OAN>ZM3_H^J+BBjM10#=Do*_%Aqzz zx+O4hX$`KgPE56A{Q?ibA?L#1GPZOvb!zq9i&Zv;jNy0CT2G9S20m;X$dbp)W6D)c zVM73hX7sa*DYu!S82D@Cg`h?|hGWSSiSg69x6~H!bScNBpCrla!Jj1`+?=hX9o7AH z7MI_7{YW)4Gh2MGCLYr(exW=+Kfh@J<1!Wh+8oeG*#VB@xA(F{yNr?xLZ?=FxQ_Zw z(78nHyNy!KDMCu2Cmt!~G|Hwr7nr?!SVV1|)EgrTeP%zF+RtwMX2gdU6gaeJ9Bp(y z3R;JiMv?MtztlGEDH3-m)6i;DJJmFu$uyB&8_#*KMSV=gE#I-J+%;wV$G(B3BT2ZFfO0 zDMOgTZxg?bnKo3UH_{HRMyz*duiq?fs+5$k z&(i#^2{1naa?VgYB-VDP3`8kIxSUW&u0gp)pC(u4aw4h$g$D%Sv=NOr8dRDUbs?C; z$FD&;>KKR0Mg+68NBgNrS6cr1%DIfrCMjcU+n*h}eQTjzpJtKHtSY7xtcoeIw1L!v z7pjYlw3Qt;s&h2BYB?Hy5?{N8r-Zo-eV)u|ER4)6Yxp?W_B;9r&C`h$jEu`^uN{(y zvfn-sNRbmH(Q3+k2#LNeMTsJi*-7zH;7PS@{QWzjZeRS7>v3e&L%eP1p3w{Q(Tz(p zJtj8H21vok#AisTzF5L(FmB45+ePK>GIX^Q%3{A9CA#~FN3>_Focp+jVB<6HEWg{f z5%EAw!>y^Cr#R1SM2_UxKIP z!YIwCt1%8Oj5EHxDpTR)mSBxjw#gN`q0wX1l@A}RtS{6>$Pd?_<{?K=@N4F(MIbANQQ(cbJoV}hl;`qX4P^~FJf3i8vu|;iPG{I(E|IS;$D^k3z=@NvH zjfDhLPbsl1yh5**uts5bXmdQjjqcUE5oVKS!0MsAHDJJJK$I%8pd_jb(Eqc$rk@4; zleP1lkli0}@1MdFLXQec19T@$IDQ7vdwem9{tANhKHX0mIYhj;UdGsPSBg28O(p-3 z-SJ$NdmJyMi!YVrFyEkJSXWtg#iPWK1#Z^N_}a)>iaRbsCtXI2701K-G*Y)T{I@jO zGN+F>M%2b@9Lg+55i11=NCUTk|G$c?-s}gqQjgfHS^v9wJBT<6IOU*>mpOoBdzBy{n#Yuu1w4zI9%b~W{)CiZ-3FwWBQyczbH|sUerzk-OMy)J80L z-r#L&m88iW5lM!XL-PK1x8+wXYuEMl)MaZ2IyS=_q^iF_h7Y_r-kPvDKA9=-`J^E4 zd2P8z*m*UR`lD&`sfWPug1;~LcWC#`E2%M zGr@V$w4(t3=T`zVx?o$`fXJ{gN49%V07!GJiGAoi4?xLb2_8|o-NYkGm3wE=Ln^WM zvTs7X!xt&|pO`uy{Aebfl=HtnU5GlGmeO%6zeJQCAGip!Uw14pomH4B8;q!Fk$T~y zRNAcf=Y$u7ylxt@2?qH=T#+f}kJ-x_Gs`AgMprg>uG1bq3!GN6!q~rX>J@w8pczPz z{`u`IQ<_3IfCM-Q#tWV$5M7K;l_V&=P7Q(j3m~7vGi3Vfhs5gh^7DUTrD8nCtXTO4 z#v&agfiB(eZ}GZ(tYj1hf=sE|@G3pvKiezz-%>yCsxEn=J@GNeeyYA)Uo359ndc>Bj=J<2;#MNsAQ5<3@P0{>KcbnHvokBdRWepakU0I%b~|AkB;7QX)H`@W~#F*bKo>EW*9E;{;~HTBvWW zQJx5ALQDnyOvXh=bxrPxwwk*fy7_IyJL-pyP*SfkT$yaAr9VJhMTNKrplZe<;`k+T zx|Z|3a;HCV0~AqG(c54cLy`kJ$~y{=S}9(9g@jRv61_+&9vY*6tsfGj33 zidurR%4TF(2Yv%e6WZ0@RGI_nbvX)A_fO6n!z$Ey!AKE%(z;Ec=A^pS>`rJaLn|r6 zurpSX_rRcB_T=r69O`rEVstyLApIEHD&RR+S6geR0YD}PQwMOHm`tTh^7tP{jE``u zrHTf!3^JjWn}QO5t!Nujq5&#q;K%0#g6?~r)X2ggu5QjZ%DTX|W*6#O=1+HziQggl z9Ik38eK|QK^l!que__ZqvM-8O5g%UlTKJz7$Tps4UR37#}>nI`W<&&9)h7FAm@`t=3*2a(F72 zdUKkEx3p2#9PPZGld#i#A*C3{X&1*2JOMaZzA(^^2QCxU#+N_u7!sE3U4R2)s!Z;4 z{ND*UTJkCCHxvKIhby$V{qm3~N9zr9wAcup6pw6FME!%Ff_&HsK+%90Z6S}Wi64xM zb;$T0vuZLN66IPMOp><}?Sh{3s=;jhPEy0z-qR6npY- z?~$TB1PJNzp(PPkonh6>{i~Ci4W8*{z%S(OgG;?m7oC#kK97|*50Khl)Vd8gM{%Fc z+l7~IKwUh14G5Ze#^S8#G9h99MaTJ~QXhw6(-xEcm8hulohT&AU)P}Lwy_aZC7!YP z0|YpesUTWvv;exs5v<6h6uZ}#>$KSM%;C}3&t*r7>H(zE(q9sgnjB_Kz^KfW$lyp^ z@XxFQldppAYicB#n`P$o8An(iUhHYCCGlH7U{*_oFDRyo2N|{ac2k&7d!H>%kXK|& z1_TaQjk^uvH;QUD%3__J>^?jCC0cT@ZFA*+hw?Z?r^gpaYN|o)4AJ`te)f{$6;Ofx zNT)G~bh=nVF8{yM>8wNmlpvj(QP%%4!>S}Kl*Vp-Lyb|p1{9YF`U0XA%9bSIrQ5Qx z@D{eDn6TT>SQE&~NSCMGGOh3a^R}-4W9MZIYHxLc@cgD|mkP_S<$`+~^<1nZXuZio z^mR@v)tQeM42_JEEO0U&R9rPShAU7fSOW^?^W@m*Z8ZRLORO|9hj$t>3w~r#v)541m6KY`AFpGNu?F{+GI{q zq{=V;XWY%UmR7CnmPk(TZ7#((*gZ2dJNA?6J;{*?sTy}rW{A{|qnR5{ zUe$9ci=1X7+2wsTCxm!_kgVm4Blz!5;(rC>fDT}>7v3L!NB_IQ=Rc7enQ%8va`ZO* z12&x`Jt3cFI!a~1i{KXx_z~4KI?VE!NGbPYgEr{(ktv$S7^gyT?!82=1EnyEhwIjO z)jptgxUeYP{ZlyptBFeMtT&d>@EXMn?R9q?QTMWmX!P%UasQ z(~%3;EY{~y2`Xv56Iit#1L%fF*>nl;Nd4poZgXet*FKre?(ZX1$i2r`7JIM3$*7;k z81;gX*#PP9$V8s_m2BH%@@xRvWeMBGo~=ulhZy12og+$2f~v3NTx>LF6(;pGEy1z= z5-62x_$QH(Mr9_^Eb5>9wfJ6Wp>w^tFXpKo-tEpw%xXAje&_(%1=Gy*G_uqbxf!(* zbWZ||n+5Db)_F}+lQUk1Z2{1A34#V+4a$F~0#sEHOJ;xR|IZNzj+nB+NI0P$ZEY#> zsFW-wdVOP@QW!)!!tiU2RG=IW!tzwjP*(@oGFcW4piN9tg+U))5XxE-U6GEwi(Oan z4_UR1dK&Hs)df#iXNo~qLiTp4{@x9JawN5c$+Yi<9i__Hq0LP(h}Hm4{a}6hIv>@_ zOQN*BSM=arBdD$RJDJluymp%MDrl|T5Sc#>(2|LK)^wztM)3LhOu6s}&rWyez6*Qu zx5{}@aGM1?Z<0}?4U;NW2ITifvlTCWZ5w6O^&)Jpc+NF zg71*TZ^Hyop}^SrLG#6S1)X}Du#2Mn=V8q}t%6gcjtvAeN)uKg=8?1jVxM#6OZsbR z7QgMfmE!f>QkSpY$aKMedp}53W3sMD(u2lsprSYgGcLy5mC|5yo)n1(f{C>uU4Fft zh|hWjRIQh4j_dXTyKiGAXInZk+_Qg>S%=+f(!pXp6ki~ zt;Qo0LJUv{XeIB-;wRiv(Fr4db&r2sHttbO#w|Mm_&%tt7~{Q{i0CEFW1)0+&IkiP z8&}Fzj)7vS3t*k+a;b72^f{h{=^D?k&W{ku^(T;0QY_X%DzpwIiitBGNaVL!tQs+? z$V8@>c+r!Lf^`NSiZd)NCcy~B8QjgP;5z{gU|?gp`<@wxv-us!EIKO%);^bo{d*c& zddH))gOzSZN^A1I%$Un(Saa2WH`gf0;WAc zy)dt=`Fm_)mUMbObCb1!Jb?rkz8#Y$Pa(M@&L`Eyk*l`Y&-`fUPJs|uygIPfpEJ;x z38WVlDUXpwn@A>X-eC$eQ998ii*>qwK2#4`R0-G34?R7J{6*7A(Yc>Vw>nLcDO^yd zZt^Sar-UhyFF=0!QLs%-CrT#y_$`DgA1T5W-{8JeYhohm=ldtLbSf(yG2e}jZJLU| ziDF^_Y(@LE<1vJ$8}ZDZC!`Yn*Rz43f^P}+PmtBw8`<3Db-Yv_rusz}T7S@BfSMzj ze&^Cs2^ClBQy4C#@M_xD#S}Ct@O124&(tT!37&cu9-7N?9kv`vDUuE5Z=G|QCvIFS zH=*J)ECaP+gs2rz>pPD=KxmRNck5zb@q7F1d^^EIZ76(FQ+hpR_wDX~nTlYMlCoIv zjMivf)KyxC$oSDwLGsC#D2tx^B#OaQ6Je2&G0z;LG+;K5$$56sqLwtDga9o&2m=p0 z6E}fPM==a^1+KETwYB{$HEwV|TmdLe>H6}_r`lur7x`F|SIsu{H*VAkh$=J}N8t)Y zS5MVh{MBR{Q<>8?3Y}6Tp@7|ua6DOKsGh*IdloUf?l1G#m42(>BgEUK`J$Jv{#D`l z5y{?ni(gn0ck;ChU>3cpQx<4Pp<;nmA(M7$kNrbX-%-=atfON3cwl`i+!6XQnfP)EGd5t}tYv(u86}$3c9%1mfFEPv%P>G0khBL^? z5`V@)$%hDYi42GJ28|#(itB8d`20%!91LF;K~lO=L|y?5X^HwOFfDGO44)1#1WHCh z4UN0sZts7`lYoFrV+p1r)Ef!Eva~H zhKY#V7C<~N&U;l1s zkYx#glBClAx zx(}GcOx&#eSa8gTnpH1#0`7-ZdLF%`WEJ7|?l%L3^IXIFLR-Xup9(QO=o!j-N5)O( zjgb^guLJ~h!!)AiW;YFg)o(bRxxX6~ya}NYWY3GwS|Iz78$Y>7&Tc>fpNL7dS;T{L zySi8|J;QpJmn*n(9c4aZF1edyUXqFY_B23S#PztajRwD)1PH2E3$2=+GP9t8hz;9o z|1b{LM6>EUJ$YFX!CHsDDf0gkkmooh{Xp5y^ZXYXM~pPnQT+AgftvLQ=e67Ydjiiq zl_UN=3&1{hvd+niJ(bSGp>Z$dZXL!QG8#Pb)AR}MQ&`8OuHt++^za-Aa~mx$F?#~8 z(H=W|S5iUYTRuaSoR!uC&aE#oFO>s`AXv!f0T@(pza|om4xj;(pQeAW4Uy=j^m`lC zQXINEd0JHHE-qjN|1wiZpw&Zd5=xMcOvf+I41xo&=5p5{Vf-_NQ4*y9CMk;z*AIQm z+$Mhuq@ka0_Awd-bA1~MNpg&ePh+>Ww*Fj=YU_Lx zo{%jyW!T@SAmi|ZDCGn+x|Ls^RKa-VT|MUNs0c~oSo`eC5vC}FWd}F%o(&^T0I+*2 zO;*_`47ih3C34H4cgFEPA&Y>@&;|@5n4)!k`JTW(?GrQ}2#bKpG*rC_F!|)--nBHa z@`gnvIww8mg0iF4J{bVd9{@>vn4nH(%=9Hu`q$;3aqKYuqMH^lfxLGRuB(U%A1c&& z59-YgACp|=kAwbwi9z5aEBZu@F*4Y@yT`@G_A{zKMz0loTqNmIj8$U)`nWt!P=2qk z3PL4YvEfXCyo)PrZ*D{4=&oH~C?bYkFH1`-ve(Tdkvh9V81II`HPvxf3q>CQGmi(oWcg1 zwiAvvM&y%`u2!?6egc63QCRVScDZP2CE)dgAm@B-gFW#N`Sm128trHVi?Tq||9GYD zJ$lW@cGipU?8GRQ?Z~oL=xD2$#)7!NjqvNo{5$-}1ga`4a-NZ!D;HqGL+}_@>kdfQ zAn;{FO>eq=Ct#IjkzhtMs{U(I8i6vB#8Yv%Ihaw)Hgwj&of^!|U1I>2Q`#%ujA<_m zPONM&swRD)$IvPFzslSU`sll8t6Z-CcDt zuZaL`_-v)ajCdWeJLG5=Xu`yOJiVM$+cSvMY0Cq-mW>KD8CkXSqqR)uJP9c&Ie-@g zu8~DM|GaDYqO9Gx$y4Wedx~8?@_r1$A+q!{?rNH7TF|K8Sz#xkwpOriDgFtA*YW0b z*hZt|@I)22?ANJs%W#WdA2fPt!RHdudvyb73iv<38Ae%mibs__|e z0gH0ZLzi+vge=T@LXj!}96$XhIH?-jbR1yNriRmZCloKrNl`|>RFUoVb6#AxqhD3( zVgf2&&EhgcX%da^kfwlP=4`)EFFLLk{K!9hLg!CD;F1=T;$o#MK7Dix)&Ydj;w+xfGeg|{rjvq zK!`-2V`VcUd!B4h@i?!l8#H-V4SWNox(PZ6ulQp|M8Thd|ECK`18hLVttqDsXgXU? zay*%Gdom(QDS6)pXx61s=5E$s1JMjQWm02099Mcc?g`k(0w+%g09j>>y+FX+SjRWv z&ILfY&PLS~NYEb|JnmO?{5yyf63KQ4A&+Fe{_Pjz1i3Pd!m8U9La7^9Bj0l&lL+;*ushR0Smu9CPez z!c4Je#cq?Y-zI}1gofvMeW)w7B+Ar#Pwu0bSM_3dlHTpQQo- zcey9ef!5INT!)F}0sIz*^%&F)zs`WOapar$Hjx*$Ym>@70QY0AuP(YATCSL)Lt|); zBo5&+jyG2)UG!0+nPnb?>9nFjQ;i-6$$|)<*10b$K=g3Sd1XIOo8ZY;|JdK{G zd?}F&zkB{MmiL9KG4aBk<+=r%`_J*R-UAX;)xKft5ij2c(Zc>o9o8PTO=R%J$?y}0 zs`1a%Pp1({Az`yu$p|xB!Yk=`LDGX9nWCI;yZ!Y-Tj$~00GhXQp+QBiFID~fkR~za z-DH8w&0Z7Hmao`87;-RIiCCsC1Q4tHSQwZPGB~MA^e`Fo&!IBug}Dy{USa98kImuWy4Y?~uy>;W<#Eyr%G?JJ(0b%DN;g zWu*soy|ne9=8qrp6Oy-$WXNEg0r!n_tg39yo5^s@c8HMUB7B}h+;{-U6YL1y?(QvG z7Tp3(IeEE|U97$`gNo<-z`@g?tMux6+@=hR!SEL{j7{*vYAgQULq7)DJv8>pDAcc{ zF*XEf6dGYM_$p*EnjmSH^>&jss0)GCFOJcVqTUpJ_;+YK>X;7qT8Y%G_VD}fXU@@? zJ)~QeE|hr*)V;=o9ud_(RRmWQt%NWcd=z#mw5iZ6(&cC}jhK(%*=@(f~F=j_(M1ub!ocwwFEw z&o7hQoU0KSw>=|h4a`bt`lY|T%{OXvf6c*0ugI%uHhk}hR$e;n?VZrzj_T953B)wl z(ur?p-z}>8KSq5r={AdHkIzo)WY!4P4HpY*Lh+b*5*Qrm<8L*RD>13|xEWPGmYa37 z>G^uY1>Z%!^+0YvkSsg^2U7J4o2quEuVpUMCqyjBi;TdVcGRq;*tkKrqSXf@l+4lg zQ!l0I!b2}Ir`K*R=m(RnUCdUbz4(y5Z9)cf(GmPNWGIyiUk_ibk4xNIvfMrZ{NDN% z3RtYgznubx4!WHfUCajIq25IAdVf8kk_~7JCv>k{1Q0YD zLGF2*n!b{lJF{wbnDruSPM{&=+a?j!+U3DZWrWmX(9$IB=(s%z9;26F!jIlg(JH1 z#f?M&@e6~0eIJwsWgWvIvP&q}`0{_RkM~ zY(GmDK!nltU|cZtP-LktO}h09!zB)LQ(d#Tu2>>Ya9#adN{?PlPRf2`O1@QZeUB1X z(_-}~pjKUcfxF{A;31l{$QfS=YipaNlv!xyi6-ZhCc03y6=!ZSb;wgLvhE2;QTZj$qW-&`na*( zW|PK#uA7;$@Fn1ut`8$McnycC6)iO}OJe~HgyqF!)Xl0ZRher1&f<$0#ndV?R@SkM zR{0_W##!*aW^W0(N^ArnzdX%t*}hezzJeI^ZFNem2ceJYDXit z?ysW}IvM!QoABH2HojJQ&b4si-;izcsPDk>M3jF4wU<>Zx3;Lq<_{Db&4S`CGr8lO zh~liiFHnmH`*wx_3-}fEXBP_%F(|*^2GaejGw+|<0I@;s4?~&)#!U{BCXf<+Ik*`h z5F<9aN^>C0*>5!N|75RM=@`0ZqK`TQZotVDQIGP8+?}QqlPLiPVK2?Tr<81txjpwp zT#LoJgh3Lk?s+S_?!e=iD1vM#ceg6I31FlKJ4fI$s#oi<16qwM+k#U5Ap>?M0pzU} z(M`4O*!*CrP{8clOF-U>ga)xu)G}TJ2h3065zx22_onm~0iFw@($DiwCj02HH~#}% z2yn`Z!jLw;c-G}U`yR3;-q&oSsS)Ku^|O` z?~roOnpl)ZzhQzXKgtWwlBS?Ri7l`^UQ5T>6eAe4pDrR0!?D;VnA;6REDtdJ|fD4^Q^iTfh z5B^I;7u-tOV+=;5yrcZS*}D)>kYjSh|32IcvW1ZQj!Bj;|LGg}`!BFSNkf8kf**JL z?`9@}v^~iD6F^4w1V7+f6N|qB%z?{C=2Z7@=Hw%H=v%=#@Pc)~nHCLxxM$*TLk7eF4DT?@g4R!=d?k~D3UHaNH3LcjBhZC)i`R!S|CW}k-1 zyxCai@QK^roBBVyX2-QDVzVuk!$UW3lE>&MKDu1&Aip5ac@@gc0K2~t80yJ34D zh3X%-S4H`>LJ8`dnQ3QC?zUfJ!gFVyo+R3&El)zSKCrjVaXzDdikJCLWNdgapf!@G zls4$U z0J;xK!+Ck0Xj)PGGsO0IjYA{ecX5CAjepK9L-RzNsWXu^OX%pV?&OOUt6qI@uj3yhx+PJp z1N_g?-o-vJ;Neh?bNZuo1i_I+6M%#i{p|>3q*p|YQ3@H-Z)D|gkA)pbBD7;^^1AXd zYhfa8_C<}J*1EB%Ou*PUG@>)8;sMB~9R1H`y5tvMf!T){z$H>f0VM$QHVuY9hXu1M z#*&aQ8v33sk#5x21nn<%g~I|Yfl!hetXLx#hs1t$agqQOmrlUwPR2`JAxJ*^`ZXpo zRV_$p**<`2p<%8M6t(#ih`gu43uMZQXndKe+YTiI&><GMN*v%GmzQ7(Draf}Fb)A1yFl(OZ4cQ{d=v)?u(dSqr+6Q(Th7nZF2*csImYe4=k4Hjr+$|@HaRuxX1kG^nsWqEBn?Y@9hW4TEhr(K+eQHy@9=v(t* zW1)4s3KitJuW1)PK=|t~HsA&ANHAcF9$OH8rWQ!LJYA^6Ueu*7<_1r%5ljBCvYf5( z-l8L#RucfquT(Y6zbpZm_2l@R%fy%~F%Z(A=I8Fw(5sT92uT2>PH5P8Nm|#kuz1rD zH4s6M9{jipJO^p&s}BXFej!q15mYeypyy=6FJO@0GU~n%-Fg{K2OwvUBt+l8x_RE6 zsMFgW`#rC$sW|wR1{cklx5>oBBKN=RlE12x;4nm!bkzo~kk``7{Bu>_t;NnnIi75_ zl@o7P$%}|EwBHd{KZ2dIei|e6XR8@F6(u?u2{y&T zcq3!9)vrMq;bFL&z3R^7(5^T(oqdC8&`6|z22;`D)6$5EX9WDrKJXS9_;?brX>`12 z!Q3O)WP=s$7I2L>OXmK#wgNQ3yL$pXKLfO*Udvp*8BG9AK@AP}9MBYDXzzD4q$elG zPeM{PE-Y_}`37_sIkDgMq~KaVOJx6v@EL`l2m)0RoEUbnb~#ovM-kDDRD~bz2pJ8+ z6FZEa9*G_Tz9zD?xuv2pE~_0N@g8XI-&7D*OauAyQ?@1a5PyA&(TR(`ms4_LWYSn{ z#D;7GoW5mGp|5pZ$m7!vpS(Dv@@|ZGSA5%ju=gfsf?c+rd%dRD?xj53vBOJhn(Gxb zPD^@f1ge~?Kui<&THt7L;dS@O0k!Tq6+lrXfHfF-Db9Um5K$|%`&Urp^8f{Wcvu_d zCy?MQc2RDp>af9D?6*Vi*+&CGssr>^6r^S3;;E$_i-jjZ4QuST3akP*py4%7zoL8% zr>Z4YNp7T*3xmWzFp!n|GSZt0C?nyaqpAc}Ns+nv-)G!Q@(_V8_O{U;(}?&{o00b( zA7UnqbMLG%>fK$TZaquHL9;Rq{-E|-x{QuT2sTPZ-F5$E4+Lki_BI^q`jYMfz)PLm zg{jMt`DIWZz`8u6EEzSf1B6W%kfy3e(fWup$q8G_LHi8mqBR4w9O3#S@Ga6V0F1?X zAZAna+@-=b)TNn$=WqdN)SpB^)k7&q(w|<28Z*L4?8&yH;{T{v{W)--rzXPb*s}E? zZP6$=HV)E^6bB3xh|ZYX?^%MZzJN-Q3wJ6P1ksly>o9M#xf(&}GGG{tu@oy8P z6_ODx23p?q4%93XG7U`)?>*pY`VgglQo3(D~B3&QK~h6Mo++nQ^hYRdX&A;!iv9>v-t{l{`YhAm?cH?+~6 zkhmBnM2yuoLGCM_@L9`AAmqzIbxFyi>tX7sFjdz~;T!=i6Bm|mJu?hU+iP!tA_S^8 zgiUEhI38*MN;gcMMUS z^C+@8&#vH+6%pc7zJC2$m)vRgFQD~Eo8kGC_&H)&zV+}q;2u85Me!_CAKzYHu~*i$ zOt{6UxqhBsWP<*x)5R}w^r+ORu6%o7BC*7%u0Ij5H*b^CLHbG&08KD?8=*oP8Z9N) zfPP-7E>Pd(cf+}GYGI$7qDX^HPVp}s8Rn;othP>2sct$E*@RuayXaSuhN6(zo}-^PE- z@-upEuQsaZh;2Jach0^bu@Wtwjd!_Cd*qcCWgnxucm({R1i=!Kt}7M3tbH2-u2Nr2 z_$;w9_6juwotJv}&&?gJzzUf{=2`sr44Z!-c(g87a08MLcmf>CQXQHE9!;D?t%k86 zTBMCQmVSJ^svVH!)n099CR%5fFTeusE7S2ex4~d*_Ml;|ENV z=A3NxrMKoUmb;TEfkf&gIobBXNbZ@Nxl>a$Xs8h*{bT^*JE*1(T1(w3o_9N^)$WKg z0u!pqt1s?4hcDHJZZ+fXQQ6I><&knoe;%2{`IUAd#>CV%{{1U-Cc|_4>E-nCE3>pD zci-6`D8;w39X8!WyR`YNeH`ldm2CY=w>~=k4LL-BS4+hUGys<$7lfVLb9!C2I^B7& zH8UZ4_nPawH?@vN*3@18UL_zY?;#}Rf7ne)G9pYx|F)>09;13`tnqME9PzK$qwi3h z$!56kQ~dso#{TQdJ}vL0sIWU8LLndVP>} zqh9Efyt7HOcOB>L&;6-)ALyr-(bJvUlr`l>A#kY|!N%x>yH7Vs1ZezkkD@NSsFr81 z5yqWI;v%C-e8A8NZrR0G~nS#zgiSsX4Z5S)I*j+6Cniuu$c+LsvUeP554oh?l-uuM4Vf+?rDt6(F#rdPh4; zv0R%snWKKVQfmA!p!gLVp4x2sY{~&3`|cN@izxSARGK?g5aadS5}6;Ng;VUw;RAsg zFPOA{+jRY_xj>2U7QauU1e=dONU8%E44r&;~veWPi&`R!uuI!4QE1`#d zHaqnjobBL$nbO^phw>3p&>=VE0vTuZwTu~%?etL$2(RcIUxBP_qZ73Pp1d|sG0l%F zP=%;&NwPiKSWx{b4uWYGXcqVU#j=rz0P`s;6mjHBr3Ewp4|(q$&Sn4p0V9f}tVpQr z$jII^vdJD9mF&IAE`@~bnLR?btn87!MMm}r$yWAre(vtOTYmTVIiCNY<8X9bpFUjI z`+ARazRuTK6z!X)-VD|@x5_c7Lwi(>{IwF**HQ}eP&wV3U^@8D+T>iv?T-MN;?*oM z%WVJrBdIE%lesUJ&tzncS}4}OSsFPC8s(9n*ZcnS$G4(x9xM4MZ-MHA4QaR4DAS)Z z9Zvv=JQl(Q*~;%+u0QiXv5}L4vEFy}(#KgkFbYYQcc8jaeY+F+aW~bHz#6A8ebcy@ z$LEyq-?3b3{Dw_)^)?pV#Ysi&IDg=L7l-N;8omXCuDC_dj+GdZ?J?mG)jRpa#B~Ck zvRkXFIhx!R4l7whjiZ{>C4y?ITz|XCM6Zwnc7d0GqRtlId^!#Dn}TT55x`$$Ij;#8 z(8x5}S0WXf4YOnv{?wq;aTP+f3#}z}V>9k+TqJt7P>;z}nYj6SRnGGW;F5L%@!{Vo z-THTUS1a`@iUiik$AtUku$^whusTYXoD)vR*%#<%pN;OkZcz`1$p=_s@ zc`xZ{=KQu&Yh5xWi#9bRR+GIof!ZXM4=jS@R4F&NkI=6Oz|yT@w4o2aeGdsa5*0f` za2ZQEX!LytK%pN)qB@3<>&uhn9GeC#PG8*dS%4(>b%d$YOQqW7EbWjSgelWWi4YX8 z#MEZF{PsSn;sObTwV7{;_}FyzzxLWZay zL70r{q|h6k!$)!xMJCX~xC<^YX1?uWv0qYt z6ApE#+JpxyiwGdfH!G}tRK78)cT9sCV$%_jZsNHNZo5Y+m^OPOP{)x9@=9)(OQA3$ z{!$>b4zTU>Pb9 z`fL}|e7p6H^ML+l)t>fpC+Ebw9~U9|jpC1cll>f(>r%n!@)Mqq{5~$1G9T1ERV=m8 zt}3;{azUZRcai0Myg%K2Xz>yjsk;wycjZp&$@91H^4AdBcpN%d@2yf69G08*U)LG`Zre}2vku`*(W?9# zP9HyqX6)@4Dg={@ZB_Xia#pK7)TNkm{t1ct(b!F=R|{@H(IHypl-M2yuse?lq5Ge^ zCj%Ci0FIxynIWIR2n;fP%}((H*=q70tBqBDg$O9oTf(Q5baYY^raOV3{K;(~X1=^n zVCw5Kc2uP4+Fe%_XCd~!P3hq+p^L&cg2*Hw((n$e<0}J%vvTOp+7))axKwR> zQq`zN1I@0=`0~4u!+g(XI^z9#1T+i86oLSG(W~XK=lw2+{CLTfZZE46XckljQh6>f zYD&kKp|5{t%$kXLDM$BuIlsEMx3?@6kMd!Q9ri&b)#Y;K_$N!W+Kq3@UcCaHrKT)u zto<<*Jy1se5yggUYYM_?yIZZT`msD?pxoAw2!b&g-%y9@kS>sg#Cp4ALt3qZ^zxfe zT7wCG8kTJNc8iMqgcO-Gnh-B%7i^h#B13Zij%pO9f@ARhRnR^f?mNjVtb_RwRkJ{| zRqEQtOa6fGAg#+_?g?vbuiY(gn}H7*7DL)~jtNb~+p7z3LamS}ooY%PFtyZ5-Mpf5Kz{^8&+5 z6tl+wzhEf0J^ZtJouQ^Q^mB`Rx8#AnM)VRWDe>`#PxeL=G6DX0p7-x47f!W?c^!vJ zF6qgkb%T!l$y_w6p`D$iXw(+vU<}WWyhOM!ZY;lxgV#Vb@I<(jH0z1>h=xr=A-UA< z24u;a>jhYDpDTWDRC?viq*ELWj%viAW!}bbivLChmQ%b*>o}>Q~w3 zk(mi`w8<`6j8|&NV>SEcl1Kn2Qt@~!wh4~xsHou1;N9EH<|EH~{Mj2S?s#5g6K?!i zUB{Ya)SJBL{xpurOoUDUo7gwzZ)6h5-xZ}+*~hvkUo7CplR+u_nsWlxf^G9{%sJcs z;>8u#u){P|rv0(}k4{tPZ0n2gCziD+`bXRMc|OLAZP|_4{?wUVaeu}Zu#ePjfrm4$ zw%;Ot-FNoY0(!DAKxQT~M}jHD9|J&}r_d4j4B|GdNGB53LM{R(=eKbW&68q;T2PHx z^G%0HaZ`@YaLFAelFPOB_+p!T^nVHSACN!5U=Vfcdi!|c)sn}B@^~D%k~R(NJ^U{gM4_wD zy_e?#VKn$VjOTqsPrmLWM8fCF6Ngh}T-bH+|Ke-Y)?bZZ)NwfrunR z-2oZ@4+tr^19}HxY0#_Z*XpHyMGZgYHUBcT6lozM`>-tkXVT;Jt)T|1$0WFaOi$_s zWXGBV>FD5mwLi`!Bq2|5(fRuOha%#F5SE~Xa>+iZYsv&iY_>Z=7a&Fy;1-5}jBSV5 zLMo&rSZwEIXtm02*ZtR0#6TZho(rW&6hb~z$yO34l?m-#Pn<-h3;evN%9nhhF>4}) z(>m7{oA@Ne_gD~UD_%#4YuHfL9e|&73otC90NIcLTn^ss=Kra3f&Gvw2KQ*N`b7Jm zkA0%X0}P0=C_pllTs-L7Wr<#}qQY^hq|lF8RF##LW9I7p zPVHF42K3~GCw@_ooHB)CEhps9{3qsJNF7>~kgB%V)t%a^qUf+(IED8}s89U%$=xh; z4|d17=M2WTU?Xc*oBh>R=x?j~Mj>J&zuTTRI=zvf!A4$FKNolkVfzbwhlrXPqf`1L zRUIWz^c^?P=@?pd%j(ajeK2{#5UR>TE0hr)KF@dZo(CX=N3KiJpXz`tgwh40oLJ<3)D1pPp?`OPFdm)<+npxA5PobgvdFcx>^l_`uNl)^-2LxqhD*sV3r$ za)XRrTS!>AV`85ir6+X0Fe1Ki?Ns>rf5YVenMd*vA$5!%pKk5foE{n!0qv1t_x%aN zy4@#ky2!_ecaO05TN#>sKXpAxYB1wcE zA!BQRvu$g`CpyU#8!EeU|K0)?_f7+iA2k%Xwks9Nv~jvmKIP@6D8#;SNZ_KtbR>DL z;&D9!9H&+W6MAhE<>2IU+bD9$JxOF9$@RjMEjqo>5k-Ra1g{!SW}jiA&@mAwUSZVCN{ezQwjb1CNBYuwcK%PqIK zS;bpl+-aVzXdt_De<1vc{!3Fn=Aqoyq9TI!BPBzsHx&qO&fST{O~q0>=Eb3(7t6Co zmUBmr)i4IA!mqqxl@2rGw^7_MY^THH{c=l#RX8c%*Oy67h zGh_cdbSMNo1~=ZEr;iihKT3-Pt~iM&0IZ>F#DEauCXG;d8#eVnS@EHBMSMNimz z`TFzS{ThdMnp>PwD~e+JjaA$B(RqXB!L%M`k&3%E?buXzBU?h1y0ilTz|Sf*|BC4G z!BWj^Yyhv_z}Imsiy`}T%gO3S;!PM%OEPcBQ8-WWHJLuP?gwil3$n{m7ilRVL!wu6TQwuANbm zKR>%(@Hc+vyHCb6R7NILTi<5|G6vl2KNC9`QO{kpeDI8}Z|m*EprpT4ntj+;iUlUA zQe#Xzozbkzsrqv)iu8_MsOD62Xb5VnNb{4&Tl6Xj#Nd)gBusw_L?JG0Up8bOYHHPK zRh5+P7k*RlAX=JZWB^mB@cT<+2b8iDCeC_xQp zZa;b*8kviZVmqYZ%*2+Jv@hFZgsTN%Ow@bBlqUu()QDh5DUfdVI{9u0wRFQv0w*y~ z*HJ>o?A2uGsleGkaz)}sAx5fvf?P6-7=}P7kC-=-+w`>lBF_pAQZK7U(AiM0XdGFzszS}ec+eF)6 z$-}^W?&uE7T=$A*MRk#~0+G9=+bu!bOTa`K@e$j`&f%%kL`}?ENP4rahNI4d9swz}c9F(mMw{!YmyR%buqNiDk#k4ye zSB?W)YIob;pnjdIc^5(DaumGOgxMO)Ky38z>T{-S!Pp2{j4n$C9SVQPV|h(wI)=lm z6H^Xv)+kCqWJ*rO4ci|rwyULm8M0O0TIksLqIan*2XDzA2r6a6R!&+YqAZAQRr!R3 z_rxlJ4iJ*U@kK@6GqGc%5X=}j`>^KJyZ-(0wKpm>K#-pAko^2iLKMBnFi$Joho&q1 z)nb499hF;c;h(vpYupk7cIo~Ea>g*@wvy0}ZwEgia(kgP7EsWVnw@p0iLc6{?Hzhvn(!O-@~Wbu@<&V`CaDBL$=Zns$q z9{GG+<&~`Ae?mWGJK)e;tg94>yX!kTw}KLQAZ2)+FZt5+CsQphg$m2^`Ypmw@K$&14XNlG)%XbkoK8erfk*D! zG1YR|^3ltqagF}8SCl(8qAdJB(%5RQa!llPBZ>>ZEEHm zZjpsrBGfKSpUb)jgNYMILMh(-oUH%nynD4sBiNcA-Q0%PMczK>2uxVF6d2{V>H&SNYu5rqCProoPL~(~c`mMy&0Y0n21#vci zj$bQ5PJ|qhpj-U}uQhO~rooS9{3+}iz-qE@m8W4bx*rkvBGPAA={bI9@( zNXR4ocS)Kt|9tEuI!Z2J6VcA~1Ir+(wXe~cKga$1;MHQGi-OZp`RJpalRTLaFG=Ph z7LTT*r8VF5ZB#B4hWWBKE?+Kc3Av zRw~Fbt2pZo8#hm#pWh$jg*_Wkhcm71ypUFmk}n!{2miIWF}Lm0W!xDx-rZKA(``fM zXPao;(cWLIotkNs?BV}VoC2%~QF*V}f8FQWoylGQp{=6^9|@1jUJz_d)6ITc&3h_m&MWCQ2u@ClfTl9`2NnvFR&1v5A`VDPu+39p!Njk{e%_2#J3Bm zLbXY#KvN(Ngv{aQ5JQhZq^_X)@5t?{pgUic+kQlaBl2mzDI*AeWO95AI=vL)hmU}Mm(l&BebP+|4Za^q5z zetyR|5qi%KZsX1k><}3KYngo1(@RxP4nlxlME#^{KOw?zVC%q!_aR(FAHRfnf21m; zmAN@8rG)Zx-3fvj9!I<4QaOCrsig2@SoF^Wi+6w_e}&!3NO%|$DZ7bs5&e93f;{BG zSU(69Uj~dw2BK7ot}+kEk$qJ8MTYoYf4+W6z(BW;U{?lUs*3kcv$o^47^K7X8F5Hn zUqNh3sR(*W0F;#O-e%U}NGUSCV~YB9x~Xz;J6jDBJ0@8ZiDb@A8_8zFHb%z4h|yF1 z=7Zughq=B-18yR>#)#!dnGb=TPI~A)A4P9pLfHW^VJ>*5_~cu{^`tYrsLOcNjIZ!- zMRD@tpJQNcRdYj#_lnV#&PBAZDBxs44Qw$3lmpy_^4Vl42yD@}o^DJ6l+m#`Ehr1ggqF00GjHDXEM%LSuOyADDgL`w`DpRM5$GWeC4hj)N z-R5^8_uhi~9XPZCKrm8AZ)^atR|%-%okPwOGSVwPRBAOgRgV{Ni-9;P`S99DM0KL^ zI3zJ6%%k_~=+&Prm`5wXca($%ZM0Kkj5K)NKy1MQ$y=<}P{Y0qd3oo}d3K|ixh_B+ z_5p*vU-J!s)3Q(jR zIYDE9U_Aa5R!4(r10mP&=9VFh>$*^hdGletH%CCE@Jv*JzmPi076IAqJk9qZ<24@g zgiLXf`v5IQqavKp*UB1tD+y(o;r;3E1KIauExuF=LjXNV|CVZWRx$%IyA5iNdbP4Z zN1=JMg;dzh;F3U^pKj6-Ja5k`J@PeocH)9&#+z@+z=v0uA@ii z@&p}mPDm8*l(xTyFv^>;xG!EgEwFxVNiBpw6-j!v+2I08v7YmbPcc*|TaA8r#!Ca4 zg|zXxfL9u%$83PfPKQ@EZg+axq?vmkfZ)&O5IqU{ih_bJu^ab!tKZfi4wMGs-b^S3 zXbdp}*q3jpNdRX1JE&n`dA+9NPdNbD@qXCJ0ol^Xb_YM#6@PxptF)dutMX1=fe|6~ z`0+6^>(~p6}%AWMQ?;lY;z@F>E*+2dHpY ztetm@xizL1@wVK%sSpO)h`R;^6~1`70hpLemAUtlL_TJJ1*AeUBm(+?>+jAxy?q=60sG48okP9^jhoV#*Z@Vna8+1Op`|il{u6SrrjPEdXNQR zdr*t?WOE*?yRF{s;gmZlX`69%&%qylLD6}a-7qd*Oou#0XiZHGzR~uwy2ae)i#c=C zkJ1xo(^qJ)BarwVyUb#EnhxGuGGfKJ>@4Rkv}A~}4!2exp1b$#?0jB3yNeAQvj4tT6dRH_Uw0 z5y_MgH&2|6sCe!R01?ih^y(5Rk0=-~;UPCO#%y8=>7=B968No*R<+BIT>J;nBS4a# zt|;u?gf5`BQxn^_)j0w#---wW=6tow5oyk(kubMy$`5n96^k@KVhrxNe?>Ejc+c$@ zgPB26bdY^MgJF~TYm=5Knh`-I$a$t8b%zVp`LEmkK1oqSt#5i*jz-@bX1y0O;`5a1 zjJm#CD({aWmuNCwLPf7}dx34{rb03{>rAS?T#Kri6A|X;EVuFNm~)_tsSH}4?{{Fd z#eMD|XP+Q3B#T6|Cn(c+tIT2vHW(Xs6xF!x>ZAmq_$#pvqkSJE{ z(PQQ-yWQ`iqv_(5yB4T|Fl^PDG?6tu=(f|;3#?`1uan(F(G#ztXIHcv6Tb&lxgdA~XIThRmpP4Y;5Op*7Nm&JItn$* zRiE9K?G*Cl5JPJhsue(Nq8Xo@Q@WlnROm5b;_gwUd^-WhB?}tsgyx}}Ms@Qa^T|$l zZ~xf(2>mJa7NIj=(rmo*29>Bs6oJ%PZwd^5X>qNO=0L;ILX~S{p9xTB`-(jxcnlRZ zxoIrN!0@RI91hdUnltzhs>0ebO9cSsE@PWb^aKij9?cpx;&8!oVZ|iHtjK zH#VQ5Va~dGp`f*Ncgy=mO3ogDRrFYQi-nu!Qc-2sb2I~j=Mua-zE9%_Mgo25$gm<(o;}46JEQ}2p$P{MP-uA0 zp;e__Wv@wjD0moIVPWztqBHj8>bfp%np2rx!$*dVDRdR4n>T%5I{Dkq_0zOP(c86-X#&QOS#t__ZsCySptb_{N`3yFaNzIsS6Y z>iNLnt~sycxNE2-I$IGD!LyUQ?ZowG3DA%MlVj$r2>k{5nX{glc&k$ zMo~bu>f_S+chDafhMDCm=jps*)UBphD^l*TDWC)U3UFD9l5Jy`!bx%n6E)&=0HZ~% zxw!*r^)%q-YDs^E_OJ>mXGi~_)$arFNwcbVB(H+FO10uL?xS4lO*vNpHmakg>;n~I z@Y-VaGDldCW+^S@M&|1i==E$L8qjy!)KpehKHht;;}8-4%H5l4z-HPWbkCeB{d3#% zh1IV}c_X5j2_sg*WjZ&X_zjQfDUTK!b(0HbJjkw3&L}M{#Sd~O3i9WXt3o=2x5bs7 zILKrwi92>ZqUDZz?jTUQ{apW;fI)z!M4dv2l~rzLzP|7YXyonA7f}~YD@Dva(Jqor z(jz~CZeVOr2GEC_oi_;;EXcma-a4onO4Kngudt1@7|7aQNHtbD-g|F4kT0ywJ(^{I ze+dXlHT6Hypc-XcC9$BZi^39#McuQ{e5d+NF_|XGinQ!bjDB+*2qFjSS8x} zh>nJA8CaL^`!=b`wO859y`(0*MH{X^00d(#TY85MV2`|)vIxYZxd>QcHR`jQvI=ff zY~v){Hbzf(pp2Q;xG!~&&gKIIQQP%_oi!1hoHpYsBw%|`&@46zu5+ND+F-Vsdi)i* zb&Qv{QP?JKs4li>qA~XZ)=w&$CCxop=18AA{JG71O9(UOa2yILtAWh33OJKV1NodRRU?TN=X{kbC2R;7zks2CJ7SCPzlN78B@A`w_>JhzYZ4t zPp9&Hwyupbx`;TYtlagCk%(?#g2VtsqpC$_WjyeGPvAF`5E*I5pV{%5LSO$+oI z|Ko26%SLD!3=JE-rk7N_*qjzxAfzwrx4iaJ$7hcS(%74|Gm<`!*%CM3K}Am+zFg_@ zBXIA>sytM!&uiq&wnqj5I)ysTP{(O`kb!n_qd4>NL!GW^2Fx-oDDjbeb6n*|464q! z@8Ei552_JChDKsZvDFAm22=KcPXHFy$a!DI4~OE#Y{w?> zX=Q-yX;*>f5@`_WXfc+%WgyJ)4maXnwxHT8rHXR%2uE)Fn9z!H-MFuv&5cbVn_{YL z>lE+IKR|p6FzB!E%SE$1=aP-{*YO-oV6~a65!`A{)wM9ud~;0Sw8>>PHDF4xzugpp z`gOF_QVBer$E*jpJ*kEsgVbNeOD7etB|>2n6zxkMHhj3-EO7W%VWzu3{Rt_(V)rfO zo6=12f*FN#ZT)5Icz2Xt7ze`{HDnmO6Kaq;WB55mNu>#dJWITBmpnb~LHFNp#(aOu ziV*U|5OqM-OgMU%YUFZPXCj_|#k(XY1EWW&apDRJioxrI;|mb`Q8qHlzj#_SAddNs z5C~C_ww_Zby@qNeM(!#A=Zj|21~-@LIoceM0JmnvWxYc+oH6Hq6NUFi#l}uuG0S}) z%vC>Bf9GQRWmVb1xiC}$UvAo;;7?OpT3VK4tR6$5ZR37FVT7~B(i{uuNR#2hw75WY zL0z{ih8ItN$#0P|;)uoGXM4k&d^y0r>oW zz~DKv48W?HT3k?0*|P>t1tveGw<-nmuHbBU=a+1+uO~rWbo-JkWA+fgCb`h4&Cw+y z7SYsL`mp^O)2GcMx@I_uaIW8C{G7jr(zE(3qv0yk%wCk^1!PDSG`zT&zP&sc5~)T% zQfbv;pXLO5XO&Hu?=s#rhCM+4t*EMB9pQ5Mf)62zRDm-LwNB{QJi%HiUov31B1(B55TdNTLkpOIOD#U);Q_XYwA3aqn1s{cy&|0d% z8ig|t-G2^rx{Op;C4+wrJ(6uNW=~x8yO7t=@8k}`cC;7SpITTDhiGf4in;@oe!dsp z2A8-8%<6EF zMHEbUvt)=k|+}5w;Vq}=e_@v!HfQG5oPC( zEbc8b_k*8XQw`@THbyPOB*q$KgUO!@A3G7}c3ToYuG<5y4*d3Z|Gt;z4I%Gd>f#MmlEuS$BJVhG3y=!~mYiS>>dXa!+TjIuIo3k0TK+?>^)*oP0 zOqUU1)Iq4A)%d7xnpHYi3woQ0Ap%G%8?H{6J&Ym+hohDu=i*a9kAqvm?N!NAD6k5SfFki{{3ZmH2{ z1XH*NAI9=K3e0uJcAM!!w^cEF)1i=M-d%?z4)f#vc((UA(mjHQY+(>1OUjYEd4%1! z?<1g`CZ%E?U55pkfIF?eO)B&#k~t%F_Laz?Q0*o-&urxP#D*c|TJFMY|*INO7HGf}~jVj2I&0n?Kvf`;k4_KL6As+T-xyu|#z@lU3P z#n#Z~5teH{AjT9~tPl1!vdhG|Y#PxkoYtQn@V?M&{!t?S>WbuZ(I`JUM6kFoO-hji z=U&mHCaL%8`<3>~)Suq!ym?8;B#g{zXwvRnA0t3y=1X)ctAqGx#R~HHi&?GN3L~n~ z{np`HjVYJo6HhlU6h+nom0Fo801810mmu{<%NigVCmW3twyc~EaAix+`(r%MO z7l@lk%w{A6U}}}ltFH6yk@D3huS2ou)N*COn~ntG0p^$LgC6*u5a2*H$Y)T)1!DX(MT7v1l}Z5=ab7?BmtP6*EMCe-mHLHw6q z)kbh1xId_jrnMKa;s>C z_dM29@e$l^e%!j--Fh8vT;BYAAC93KcX}L3SLElS=ekW9FV5&D0{o z0LdJ-^RcU1^h8V=ID#ZnwTj3iNxbii3OwTZQ$GCo?q|A<8T>S~ZL-d%CkAxqRnm87 zkVhd0SrR~8aw^@qW`+_^F2pOP<)F;_(U5eahTr{LlvbtQ!bMt*?%0~zRHF_QHp~tP ztcU+7JUmEmUy*uQBN)bTKag7P3KO0$=gU&zta=o-8nKXLfqQqx78rEil~o$@9Zr}J z?Nup%bA4tJqA?0k!C?%{wQM?L>a+Dv9l%kYW19$LfNtRu8BW6B zQ>Bnje@w!C!QJZBpZzI&WA^NHGgzCMz`d z4e$ZeZe~y1735b+WwV+n&v&|C@JOt}emSE0Wm&Ms9qGh*;^eqTotb0l=O^Ogsddh@ z(01+NjxgI)+y(QCeLeE|2DqX|vDxPD(Wt4T)*(fS6_UbmIT2z^++^Njt~1tixm0+Z zak~cGc|~_U=gqh4`MQY-<)p52StV+jwK@@5208Czl%*hs0zpaJK9*r}j6lkn7`=(pS70@Ta$eSR-t(0?xqh@XI~m;sj)w==&2gdD zkncbpW%S;OVzN~!gIyyM&8T_^C~5Vsrb@@?Fo}?X=OzyQ22;t%>BYhmL_fCxLD5_J z3HJ?wGRXXkfrcG3Xm@58X?@Q60#NkfXvd0kMA#wjw;i(Ffu z7U&eu6%PaRPH<3APy}E5c6gYHoaa0baCYM7SrUswN{9V*=B|o8y|qnYp*1%(E+wL+ zSQ_%?lWM(u458%5CF?*}5 z+8Sf|ipqJ`Aa?)txV3kXys?xhy3y@7=^7d?4aKZ;<*j|i>sVUSXhs&zBby1O++;cw ztr(vXHe`3(VUbMN1@*gz!DE`pF{9kjBb4v%H6;~w`i14!q0p69ttn(((SCjL3Y>S+ z2AmvE&kO|2E0ZE<=Io!al6(Y|W%+CQOQbhsckXK5{2ps-+*?WX2FLg#A)`*nW+;tp zay081qwaAxmU~YL>5!iUT###}TVB5u5#oQDfjlHhua_)X=ABe4Zj=7a)}#jUn-*hb zCIuJNGw)T$g=NaW5ujKlGriU1jhpD^#;Zi5t9wXS)Zc}j7)h@~|5VW(r|y=!a)k_$ zGkuP$rlPxbLRH@Dit??c;XBnyn=QS1ijU%%8xqoAvMub0$jrMm?bRbQ=u1W7W_B9; z61`CQX-V3#y_}~MBH*_VrjfD;rAUTUcnF8t0aMaGguVw7-TAZV#%FLLIAmEk^)xNrTIQ zAE=RUzff;HLZ4~Na{D@-ZT?Qw&li-K6MT1}8vhd6!HXszF>QjppX^@1j>vZZ&1j9s zakY%I0kQyC0cQ(KM_%Iv?neFmXaYVNmIX^T&!FoDcfC#d(Y9-46>g#i$`NpYr4DqG zsB3mbFc4d7mZ!XASP;wzSz`}nHSEH6E6vb##mb+IyZumv)|(h}Jj-0VS^86Rh8s-4 zX!E7}&piKvSS=bN1)fT-)e^vN%1N20L$SMPU1K-+PH1@7!F;q2>Ngh~Ta|3aCngfo zW#5oDjczRpo-?_Lyw@>oJH0BTbM~Be(Or9IroFA`qK%ahS4%G4aXyhgS=muBBtL8D zGKocsQ^W*h=I6U(`3r5E2@PIy%~EZ^mAvbI|tmpxlg zB4D#+JNZJQ$)Mcj@I^qOuAA5mL=TqK0aBGpd!<{`@dA-UmgD!>aGdHdZ2t%a9E&_A zK}QDhv^y&e$L54t*=_M7m(HUz=jJN+lKL`-a_=)83)HqZ2arlbjHS2ltqOEVNG)mp z3*UJPLs3QyAhqutk2rRQf>DY+CPgZaCoh={mNDvglCWqGeq?-6F&u8nX*|{UDU444 z{L<%ijkop%xPZ-aMh!#i10aXyM$$)Wnr{?3MMaC6iB?J`uXccQ!X7-c;owk38#juF&d{lJ6FlaU$&%)`On)) zRXP_*hNdG-8Jpj!t`5w|RstW4TC_mYS;eKwp^S7*gM0TE=rLjJ(}xvAT5sUy?w zo_wP=(JF{Wx(o730W+Hr=^1_YU$F7C*1gC>Mx0FZI1A z&e1K6*qH5<2JYuX#y7nEZ+lZR?*_ya#?qNbKVJlHFz;b|f=GXYb!s_(ouVgLRMPQU zqw|m{U=fSOOAkOZa!;XZAF`eS%Zb;a53=%^&PC}1Z>{wp!Jj{PR$hIS=2-yqnbS!q z5N{TUG!pT}7zS;JR3uW8gFtGTHC_RUdcfB6bYRRfx~Ft5H;PwaXOl2uOeKe53Uj=^uXUGcaLjvkKz)*Mt20+&_K%V zfd1#>u`v)6XMz1i+f%2?fI%M!^mvUT-uM&VqQiT&oooSGV-bKdc56KkU($$btElhI z*?oneLkMpAC!Ql^j2_4(9J#x*nU5%6<#ixY$x)S^h|}&rIyz!AU&4>!)2Fjv9S?xM zXA%e^`o&M<0ZzO*%Alck!FT7o6?deH@0C1v;ArQ5{ttmu=(ioNe1Cna^YlrNsmJP)AIRCn3N*W zvw#Tx;F_YFq0w z84@m)0Q^cqU7vaJQ}1pn{{xaM=-w0{VW!ZDKb&%Aec4dSAv|{`jKYP3TMj}#^L^kx zGguB6YVc;1SdPj;HZX;N;l3g?X`9_(s+JIf#6fU>$@w0S!|h1)s&!lxD_J_#$}3+g ztwRqE4j;!t=yqtQ2{X)zn1nkp_1k0(P*CCy*39rwJZq;+@-WV zUHG|PB4;M(Vf46OFNVlbV{=#Ymuk0jOCve4gSqbY zBLa)1O>BP#$^OcKpU|?PlN_nIev*>%yT>r=h&9ry#}+EVWl7N6E+(Cfon1+%2F<8nl^kn!D0S06y4uw&$r)ZaS?ejutn=ca!O2|*oy!|ft9fcy z_#XU~vv(U|+t`eivlT;O^N7dCXr;e1suUNDSIP1+=Bw;&eKw7S(infyjUsK+0r09uR-qOLAnImRC`~a1DZQt&dG|_56`KM+??g zX!aat=4EL~Hd*Ad<{M31q*7jBE!IEZEQT0ZTQF;enaQj#4x+DPuq*%TYRf)K(M{li zO2=vNk;c%XpjDkiq~o-PjkONQljXNz?fIjgP+eqP8lXm3>^SK$?w z(SpY!7sC~7(76{kU1i-*4Q*D>FmY(STMTVIn~(ip@nvs>CM3G)@?nu4I5piLy8Ina z$d5#l{;O_4S+XbYpyOEL*@4;Wu-A%kEgx+D`QZmxr`Ixy0y`SbNMIgMl8q`DVr_~HZ(^EXE?w6K@`-b-vJ9athFWZTjZ_M?b%kn z3W!xU1rV!Ua{+)}r^64RGTpk@(gX3mRKPSvH{E-@TAj~-dITU|MNwgNIKuoW zI~d43D2aNJzXaygT~FOJyBuHNxZ>6M1YMWtsL;moV%m5gc|hQ;uESh^pcgVqdV}Wz z3gcZ+q5fFt6{qy;BmqLy=A0Ey6Lwshm9Bono86@9F%Nkr3q8w_;!nIKwr8r4%ng-3 zll;dlgS{7rxN(0^g=z!T1DNvl5TA(Kc==L+jreF+Z}kuHj)d}EvQ`PzNbc#5@$l30 zFWJ66MLVy_AiTLl)8ygq-ruU@$3xzQk9c3w{Zsq_qKJom{Okx$vzqDaW{xQRqe($JXWO_*`l;IzTRC*zg7 zgBJ6++m>Tx!q){|6FW2t%S1hTFiuR@3Hg3o3}%&~UOIeh(BbcoAd8yTNhp-{B*^UPDx_@Y{U0?m4wH z{{A=_f^aEj^SP>(AOg^h&j4oJ?{SqOM)aN6;VbvQ|A+Wes1XNJ($?P!3{Q^W4vg>?h_;aM5rtq+pt23TDzhCOq1-7u~&g&wWSf2}Q7x7N+I&ydi zhI((Qe~0jEtPh0Xw~;S)oVwBPkD@ma5(Hh4&k^fn72>bk?*+JNQ=l(o2lP?i( zH~ltI{`BL1J#;b}F*_|~cVM($A0M7vrT-UT5da)(z5Xi|g4pC<=m^IWWy)tE7Z4&e z=HE_M_SJquY~gJjk>gXYrdBXW1T~V&TmJ{g^y?S-LgD*MM2_e^*I0VEWKM1he}svT zjzfft6*@p`CKQn!YcNTvC)!!GjpAh2oJ&v%) z>2H1&p48gHitM~D5dY7uD)Il9nT2#vd~pHO$)!=Ffo1t5j(&Jba9WAM3D&k&?x8vP z+y7p#$)H?g5K7>)|Cp=5q<$kod(>y)BY3Bw96M+yPUqwj;%M%nC!H>h%td(1w*t@a z{U1E%uhov1tertMsv+{SgD60un!9QSrgRV5#zKl5>Bw6##$8CrQ~991Iq3uV-hd%f zpz}GLu4WxXjA45%Y4g9u19m356GV(Qiadl8mCokt?Q<|P2;cE^Xv&n8fXu1`%+!7oWvnW2Z0yXf_hcN@Afvi8@0g=A!$LK$gcXH}(l1-66bh zbv({rVY5xA-x?CFm~r&6>4~9+BT(T=0=r}iI0$`!pfMf3t2*$6=A$hX0)=rYkhjHl zm*ki5I)3kg7TUtxw)3fwfVp4bxS(RcW4}}xpQ4YAE?FDDIy;!-`V|6Y#rn&tDN8SM?>XVHBJ^8$a`_HKG%+j6U&C~b3YQz(<`BKLPVY37U} z6o4ZM`xenZclsrtZX|0TK)=B04rx=>rFZyPq>^ zA9ZSlTirj}T2un`AQ6>(eB2{=Rg3+mK=MG(qV5_(CY{%gQzFX0!V>Op&zUUmavD#I zp1%+$7F%kT2IX1apU+|De9BS{ZVyV}l7u8-Xn&eiL?R?TV$N4@&i9b1vErgI8e$m}V&3Bc+36KxaQ0PURjpySfP{#IA}SytDj=;=(k&g*4bqLYGzf@vcO%{1Ap+7Y zdePn8wTSbr9qRtie{;?a4@_o$`NkOIMUD{eIM`9y;=D<)oQgW?1ib>VG@%w*L5$i< zFF_U2C8>GE!sI^^NDNqGTGxK{i(PILE5dQ?1#JK4aU%X1S zEb=(temG(%gSkL8G+2syenQG`_;YuPJd5u+wx}=Q>Ti6ByMCwPE7G%|NqOP*o3pcFLbp97GZw9QV|pd5%3CxI1ljGjDmVT#K#R*R(#AiN5c^)|kObe(T%%6mA_XBFi3qbS954ca}H=d|M295&L<7E6o;-gsfkq5;fob zw@cmm(LW_1Y~P+AAHH3T+`If^TqjdO=e95_xI-ucBh0+%%DC;e!0$^-ryHi1VnKTC_2d@P{_O`Xe z2<<7klA-QHKYv%EDofaj8Nh7e>GdVVf(c%rY4)nuc6YW(3Y?neg^nu&YIQF)Vp93y zj}$##n0hTg>}YLTupXXsLR2B1NaClev>ILklixnHt4wgq5Q|K=*H#0JO>H~qNr#G@cjNVi$;C!qQO^#4(~q!CInCL@5{1FpV3!LSz`s3`=&+85SlV)V+q&-mOwfRQ zrq^V@NUM}zr3)UgSYUq%dUa8Yk z$!5~PgEp#txW-KzY79!0`qyyWpZ#u9e!I>-5W;<|NGgkT1R$7{fc;Ue34ly@O9Cq} zVhA7YSX?_hP&x%YDc9|kDZrN%uZXNgPmZEpAI=GfFUg{bY)d6;xnEdw3ZJ+2#cdt| z;bfcB9d*b31y&H*j2ZNswKd)v36h6#SZv#Nxy+~aF*I@kV1j^1*o)An@TD#{w>{RL zwun!Co8q)L_Oj>uKqdJ8Z1go)born7To8T73npS0C7P(pT3KM*7%z(+^;*cH?U&fA zo&~~wGbl~p0v6c50*;z_!F>8ebYlZZmw(;1=ycsLnS?J{a4NI2#0#;g02x40qLSqb zLR&bU-d&hDIXDQL^#uGz%mG^ym@dTr&2EBn)Ju&3fEpFIUhTygAORrTe{7GBG>E~t zDMX;WrwL99|C{Fff7&ECADO_OtZpXIPx7C`2#EG@d)xM%?{Yq=C)xlglbUJk*H%No zWHJa)wE46QNyT#RJJ2F}vx(~WlL;Axpb)n4;ZIzeV@&)vF#tQupX?RT;k}$k0`?<- zV8@r6EpcH7)vXiZDZ+uYchBA2xV7g4#6ZZvuxmJn&q^%a4CFpd3AoJ@m@SO8_d-ZX zPjqrM1ZY70F8CjFTvlXXB0hLK_nmdHL-~&na$05?P`@dq3?Y^TTN; z9Jb(bxj2dZ5v_K%8w>zhvG6P!O-RlU8BM^|G@47{Mdf<}Rj<`WKR<`0fYLTO8xsaV z*1#wpha{R#RT5;>Mx#_GDa`n($@5un@;Q^`Sl~tlOv! z;MydI!(C*#k;;p5`O0`U+dI8+tg?QEQwo54mHpw{&*9Z}l5CxJ$>C0@;x?bFign@v z>S#~}E287#Pt4&aP42GH=M=pUuwU)9U;z?xYNeTq?C}PZ;Ze+M)TC}7zL}d$<%f0|gi73FT1?RUsJL{6q%h2k=02=6I#Bni{ZMq}3-IDiX z06j*NMrdg-X4JvFYVFY>mCvc8)fh zb*sOrUf@k8o_3O6+--u^>OgEa)T?no>@b?yVw|dd5hyD^c=Cj1l1{$1T=?T@^w32K zMgphMB#YFZEub(75U`tb$QP)LXc0k7$LnL?1rw8zIaIv)@IzoY!{pJnJ+uwuQLD|Z ziisryy-;!vjr2R4{`HdH`P}Ruqn!KQq5HeOY_=QHH`llBHlB{y0RuCYt-_?+jRBO; z_HcbLi+_oOh|xwPXumt)39x71a#fFwHqYB#HlS4``&m?!GU*{uw?^mlk!Rb7m*iDj3*;(8pyhK3M2AC7$AMmTfww zYML?tL~>}H!N3U6MQoO`&#NL;sCdc}J_)_RvW_K7&*c`3+so*_=^S;uPXjcW?#lxG z1A61J6jD6g9G?WadV$-*G%rEyK^DNcDkLI`<3wKIm+Af#DFH$UsTpF?eoG5Z!{tT{ z8_=dEg=Ftmv1qPtp)MxiDDWVN2=K~5fnl6}1yVnNz)cBCysIRFtVb$HNthgtiWjd{ z2@1DFMa(p~y^5tHoTyAtQ^~L*%T=$#x_aYWJ)Vn*$Y2OeBSz~Ln&#r_{C4ydP^uyY zq%1Ig&b}9?r=O_NK?88YP>`Ua2roXyRLGXr$n1DXtq=faGHp7f&SvjBFR2z$m=&wo zhuj2q`=B`I*|Bu@i;H8ESdC7~O4TYe#rO^>uxb{Ucr%P9xQ!-B*DIkZqEZ`3|QL+vKvd%e*ixk@qMSibGd05#uj)SZ3g3e^P3CmZi!t3F}-Bz=3h zZs`^>A&XfQUvWN-YYf1ih?_wR3+k@{JN5ZVB(HpQGKVBhZ)t)`sV=4HGi05{(`tuq zedF;oGWl$!_jyGxCL(fVI(M6Py<5AD>P!@hQp*e=!VW;K(^kcWsoA%>J=o>ie73|I zEs?|W^NO!^1~A!k{Z4@Dg<~k&4e#wOl4Z{~n*I-_B^R8fy>TxjL~4yW-44#H#hhnL z#laS5cSU73F%C7-(t0Y9@JfTry&2nb&;GK-$E{;uN4dV}Y&y-46Pj~B1;fe7zjae~ zp*~-r)4Sdk)@R1%vcZ_MFRh~p>KT{5b58;i04P0sSw#YAmi{ZWFB_`$Nql|iPqwC? zlOV~6EKXfFx+Ifb5JD}!?tZJ0tN(;m$xZ-PVWF3Gij{R!)OyqnuW zi!@CS39GYGLNHmU+dFq&m!$VdHs^QnmUb^bEnHC3xk6g+L08W;AtDZES;=nbC5dDh zrmQz-b)~k{Bo2WUMnms7v_b-R{27k{HcL0|U@)WmF7e$txxL)a7z`%si~J4;OL!s! z$wiv3FTn_poZ!cqG5`a!+rIR5{1;4uevortn@ep$#kR$Vws8D1Pp^g@jQ-?@J}1{>D&q27`?(-05kMIZsRj|c*xA%yj;vR z(5WDfX{`{)^C7JYO?om1Dih$N;PdqjDS~Z&)S`tlltwHTH$~`nj{W|EpiHIix(r@a ze0LXNmrPVK zCDZs}61?qClW^s9^LYDyd_tyFz|!H8klFlAT~3h&#YB@EH-JtgEcklKMm5x7pqEIe z{&=;lOO@4ibqCEypn*(h?$1OaQ^#5r4&%R6J@z4Qj9iJl&?ou zISPeVa!Wz)FjL~qy1_z!s3p zXw=D|g>G$U|G<76L9ZCa_0>!5s^VCoqXF*kc8>nkG1#^>?p7ki=;z?JTDnd3tZx9& zu<;XgdiX@90BQT%1>ZwC@8IB~*cT#UgUq3iA+vZFX~=LsfB${bcbNcxrrJBpuEq^K zV=H{I0h-5z(V%dmZN7l4EA&xl2?HW(G;Hr z-Z(WQoiCq`+3j;aqE%t^JO(yB%UPfFeOkpgk{By!k6qpN+?oA0AxfpAENsS0!Yb7t zJ(LkuMwWHwfX66m8R0E0)@`=GCx*G7I8W;}$FonQBVzf}b|U{T7J0e2{%G*))ApFW z#^6znEE=9N>28rz1_P9?UCj|<`qf<>I^!+ixy3HqR~X;v373es=bcdw1iQSdysQC;e z2ULuPt4ltKHS>6Gin~o+Tq!e{t)I7x%pPxyM!Lk&6Kl-9aFRcxeFXka<#;COQt}o{ zKFHSxQKjmDR2F@IiujRaDKlNvN#`ea)fKk~ilQB)^dnSV`$Ot6bG_qOF` z0Ce0B@2+3R;lJR_g9-9~`F7wxa7d0#D>gw^fYroH3O~s>#_IR3QG@Qah-!)+sNlvIuWkhJP0sZ6r6hQ{+S-1t#0#|wNwRRsn78lKldhxR zOytN4#g;cXbSsGFg^Ll5Q;hf&bJ5~ao3SQ;n(cd#(jI_Mi|Z#8jQ>2mvV~1S47xj6 z7p)XiM4isN7%__e?6rNRaNh_Qy*h`yK`e``X(8MbOxom=pf#@%JbzKvE0sn@S*HG8Xql#U738$LQ~kV|lK* zFO8;oYAtZz_F$>A!qND%;1t-v@008TI4={Td;!a~+SGDiux}qYZVuo*Qg$M!wunS#0x{ zsyp2pcwym*+IrWzWa;#I_fINY^@yVTa7{~efgU|{-S=x_ZB9R3sT3xnqX_ixn#*Z~2nwwJhm(nnCl>l4{I+y!5;mbp-kkei6uU^Ad!!=@x8)N&{NQL)P;+Y;Dm}~MoR7u2- z+8lM zovv_3TSTMNNx7pnnI58f1&ZN~#y> z+dV(g#o9zw`zUt87*N)DNS~D<_k^)^Zv;_^GBQijubcqOUBVL$lMyGytVYrd-(;i+ zC{_#s<))>1Km^{8u9MmMa@JgRw%_0%ZHs%o) zyAn|AblUAYmp!Wc-jXFoyF7qO7Ykby%2ZH+D2~RYIC{UP+ZEH*)mce?%ldGFj9Fo} z&9-i5m@JAV?J^#=ckx@(gp=+`YF}p6O4D-VV**cdgTA{do#Eu(!e5xPU+5=L@{~pN z%?bk5y^LjQg~z)STlEZuvXOkm>~^N-MDi&-yi`iXPcuZqf0}ZC@~&v2&_ya2CgQf= zQS>Y~Urfw~k76JR;(x|9L)Ii_z0_kgl|JquhO!3OO44(H0ctgD2(Kl_>jXmHxRm{Y z%Pq8*A^wdo5hoIC@;5GE=L0}4WF&uF>R}Fu-hL>akr`KVG1%w7|N019^b)pvThexQ zR`chxOHdv&Z4*Rmfh(V*n8p0v+t5!$0%9c%w+qGVL&Cx?>Z>(CbpWXP z1)jfvVLwR+8?culM5TmQ;MTqJxdm^GVSsj$X;-Td)dTV%;SmkNPdMMvTwL|nMU!)t zro^(_(*f8O8xZx=u7q}mxnv}wCFowcEdFfOCZw<|9gAYM*7qZzrAp*>OS0P;vy_E(Uk}KYX4f_z0SKi=R%K8H*bS?VZ{u4B3r7VKkliWJD2oE2AESeh zr+#dS>@bFYE7PQU2TJ?G zsU^H_F~1ILeF#=)W)ZTX`KIcA!?9#XG|;{wckyf3cRg$NT<5czs@G$T@hH7H} zS&M-fF0i7ZpHi#-a~J`skQZ(w1bgO@^Q`v92S4-`&=K>y&uDf}p#X1^W*xF35pUS~ zbv{ZivU7MKO|UGxu<^c_qBjO!`j45J;UZ19*y1i3xoNfvqgov0Q$OS>Z;XeJg{>04 z!&Z}n*QSbA`6bBYVamXc6aQj1R7neBXtK0X$-qlVBNd!7rZ1D0&taTS~CTKL*RH*{JbP60Qk+-y@pg)-el@*|7n zO{HKO(@b(1KvTKVD^}hmyV{_R?SRW#E~>{T+Mn27D5YEOjyJ?BpBZ#f%KaMA%nK^&)UrK+lcnWSKPSiEXlghY z?K?PuBy;$zOJ%vQ*)JbU9CyzUF)s8i-{&s~W*198Wd5_veUyi#T7^m@^Gp~jAMT_Qc~>$$J(+NbJMeK0 zLYH)c5qfi~5?s4|BNNotzgn&J^Tsha1qn*@-nm=8_E>`Hr}pct7`vUp*eE(>J~(!` zudxyAh-~m;P2xe*H6~S+IikU8O&^}?^~AhaH8)RlyKyadoo0)zj0ehvp2o&gAb{cK z*E&(k=SZVa9uuL^9YHBE!#9j|H^HnQ6#^n&Bi|)LU#VxExS`JvWlCk;C%Zc&DzCl> z>F?t%G=ZGAP69;|Ri|sqFe^mTS&-d`sPsoR7s89g>PBw}CzoJ0v>WSB1?WnvTR_%e zb2zF56zBLSsi50*ak9=25>qK)q3;~l@a(&0XK)yN5y#5F!*O>`s>SDq&tkS759ylg z)(7RLL?GD7M#_uzxSv}fj@18lE zVu@8;Tm{*u*xZlHQ;D%YW+DJj$sUfVCLfc_SMnwI+eLEna}*9BxjT<05a6HT@@A%Q z;yfkg>AA%>pp!79vhRcsaJ7G1k>6{;iUzs;;>Mjv#G#Ldn+m`%Mp{XER0Ho4{>JLS zA!l9yu0xc1R$~31A^bO@fo%Z|xG?r|dHR^OPN#Ih`VIk{M~i++NfH1QEogpo6>uNZ z>3By1gr7%?-mnuzjs3h&+U>Q1OusY4!uMU)DDC8So~U8IVpF5=_p46RWOYjv|4Et^ zKmiE!dq67+gjmTX57b}&+`smO0h)#&0jGYzsBN2XMlm`rg-pcD_vN-6fFsJF-OT(x zO~C5Bm07}u$O)8mG9gumoFEQ$2gr%`uh^=UJCj> zNF~n8pjK|pSIM{olylJvR2sg#Er{v<=7TNhXD{I(et~SLVX$dy3_MxbD>9xY=ku_Q z+pI^R@@TXSXZP{XG{bIavUE8MSV)WKjp6 zFHGdHjni)Z`k^?Ct`r~$m*^tVmBY+yFzcPn)=S)tIhYtjKe(IOSP(iu;4+&qo>=F9jWiB7jBr*#-xP zH{_Y{ZiDAD!S}q`SSHaQ9zL8%rmT*0pkaVJuZ0pT5Sxo4CdKeKlqrr2AUozbu1ysPa&^l|rwz%~M&V^i z@d)LUhxB2GBGfP4jz?}x56dU^fG*C9I{deDaqJT<@%|i5Pd7Oyr{9 z1rkp7*FjJh_qBm9e()K;BV-)ef?6T}MYM)v4vl(ktJl}E3F~I=?9CIlk<6OyO&&zU z>7b+{%nfMSJOpKzE&vy4L@$of{KW)4n|H1wu{pv8$mm8{>2=3B4MSvVMDeU4)TG?b zH=Z@und4o}juK~z16-iAvE1uikUML}4rwI*}wkwf}8hTXE zqic%Yp>B!B1LLLBRAjvkD^c+lC99&nDi!rn7e&wPsy%hW7T89Nk7{~d)brYAqpp|% zg|-?qb+ZJR_{|32zn(T%H%Lw+r}*5(rx}`cmMx9h%nw3;Y=UA;)M{mvDGq7~C%1z4 zs7q+3S3z&|$O!;s5<0@PQKz~unTeu{Gwmsd$Mu6|pi;XcSd5Li6)hm4&->=?6~u9w ztcb(%uxvL+!|&oVbbUrS)bl}~&z<)2#cg0QOQw)VV4FIW%Hv@%AMU`47~ExYIGD0P z-A;&x1iR8vE6_yuC~BNl*UUpiR=b@(flzL5SR+_Q zK3M92`^dD>-_c^TrGedLHXuy#B09`|shUYtg`eS%xhbrHh}7S?37NU~&kX)+zA~eL z`6|`qa=G6=Sf?m8AY=eg8lG~Dyi3xNp-chU9uWRySL4q^ZsWznGYznW-k7<5({*T7 z(W-3<1;Ow!mVimWG&PQiuvANDUwShM=JfIU5DPCA&!!#ICA0aK607#-3GS=2Z`1NA zd&NUv3>}93G6>4+wo1G8>d+lQqtzssEj3js0=36=w{yA{yzjmni|zq1Cm+wzFJ$DnXu(@Jk#=k*m# zAa76q4R5Dc9CJ+9AmA!RLAcmKZFT1|Oz)X!ir@mrDUgzOXf%>dRI3jOyHMY>OU2-1r2z>?vE{Z$?A=$VtC8d6Q=dvGrx41``O#2qHb+MkoJOJR zJ?_3TQrxtF!c-;S*@DTlSqo(5m?IAfy8>CJUSiC+K<_eFtCU|@)Y+LW^D`i{!Dg~{ zIW4GixuM0Wg&VQYz(78p1lET`<-IkLpeL+)Irs>R-0LnvyU_q?Q+A84FYaTug8WRq zUY@~wvnqwT>yf+q%5~;03C5#IC=E$3+H5bhSNlpov^YYp#O;f&vOb&uz{kYXD#dW; zq}m$zOsY62PI7}+dWQ{ppwX&UgdMK-b$5h5M?y`pZ3YmMZfV@4YoL$Bv0c9sXOa<^ zBfZ1D*QPu-R#K$vRr6@m;KZK%QxV>cSbPYKdSzyb)93~SmlVjGu4@b474ELn)5!s4 zhwC@|DNd3yC@C$hHwiie5MPZIr(TaMnAxkT*rL>3;ID~YU0^0C+i8usUtcXBLV_Jv z)^QuKfa1S47m5FQ&#CKtro_yqH%!efl^-q6C`1(^OAgr@<}#; zB+{c{U!Oh_jGDbnkc(I7?IqDI#GW8TPVpSvLq)p%)E(jPAMYu75ZI{dyx)=jdj$NC zCjtY-)ZL|iAvE-)RLG5ij)x^ zsf4#5a=DWuHjA42QT9S!Y1L@Xoob&rj+)sH_juDXrF^q zJD0+-Ln}F<@ZJGnEBV2Ly)vc*RnVdbhejd56LN<3q7_^fVi}Lc*Sl| zEYG?^@<8Y`QbWS_C>5T{gQ;@5<5nE9-I`Mr9PWd`@t~ML2Z1QWJNEaOx}E+O zti6BlQO+Sr}0>nVc!} z_oK50#=lbjDV1RAIfCA>?PZ*Gov}p3YA%u8TSD~5mD(!q2sYyOB!NPI+j#ID0>MM~ z{!@fR@x85w;LknWu?CZ9MvED>zJ&Ac)x-@ZW8u|4`Yt?0wRr|^0!_o^d0@(m0N7nR zNOTNlS#SgRmINbnB=di#)1CAatCo{akv<1NH1=u|31*EKBZ|#u{UXMtAnpX!{pOF}sK#|_+Z12PQHEege zt0$Jspis?fL|(Biple^Jed(0jHF|5@A{uy!ZQ^xCFaMbMw*`WEa?yFHYh-g+U!O6_ z5f#iEaB3j+`wncH;{JNxQw6YLwi`nR%zwQB_@A&OBG_AVAdP?St^dAcJ&KGxf(o`8 zfB)|8IZwHjHJ>>4qff$jmfT+Ewm=*ckW+Bes>Xk>L7<8qXmABBtt|5dQiycUACi=50#E|GBPO+EkEer^C`j z&hm19RrCD_F@fhlE8rjF_G!o&5_rAYw^S$aRk7CN-LG}>wtz1J;@Zpg+i@O$UiX@e z2W2g0gO0%e&!d0eGTjio31zL*4f|W9{u|}Jf6WrC~E{i;l_nt0{!vfy+9-LJI%viKqJTPBVoLeEhT1{<&8hI*z-f zr8>cx`)wXHyAO1~8jfcJ-r{Vq#Bc9@-5yMbGjM)TGKtCaKlX=zzx71|XcMopfDPJv z?m-(nsg}P#NrVQppl|ay(Xac1i_&j{x1~%YWWD{ryqMr^@M8C-A74DZ&EvzYjsEKt zkKyOwUdKmFLVo`~7~U=D6yWGQ&G`L4pYTtA@mzuyYlqP5kCG!0F{lgj|8AZz9x$u! zKP|)fb$`&}!j_=lW!0jscz%DuzrXSH+yN~xUT6*d2zsbqiQrccJ=Fu-q~!Qj_rQN< z`vUw!o+wuS=WYMF+ZvBKr=|9(Cq@-rOp{fGp4|M|vT&?t!;Qiuq@&-?c`k8H34 z5;3WVR%4PPBvvUp1i-)k9yg`E1Ogjn#rUJ&tyK=U4^N2G zT>fk=oIr5?w-QA|++QdD>dz21&{tVut`rD~qHJ+3zjw6TVxW7K#A&>KoeE!P&cHA^ znV&-eH^Lc0LgT&=zGkz2cd!Z}8EWTU{QH}}+IbW;UWhhcY`6gk?+1}+I`wjv=o9$o z{eRAkpf8+j$+4%ddmd7<#FR?Xz`k2xfH>>}*i(1hNM2&}$!oB^h5;yMvIFII8$h`& z#h{mclG5vr1kUoCPmntom%ucR07Yd~0081SsNsWE`@|w03$bc7d~$PGbN^_4=wLWp zN_fP0B;Dzh_}ZcyoBLAhvx;V?UbH%u{cPf7quWof3;>+hfvFYkf_gPSm4opgJ(6w# zq9`38ghY?cvG=|0QBbozAm%uYS6L)4^~APZax2~?MwEER^CCkt>&WsF`RGuQo8O{- z|6M1*^-jke#yXtqMR$U55Yb0866azeP}!6MX#Io$m26bCFMpeEq40&ihjwKYtN_;P z?>v8xocr%VA3a+rHTrW53YUQ1mNkW5JQ)Kx*$hRgS)Qei(4tPD1A9)hTL0E=i<05N5i@+pc;f$HCh+} zgzO4fuFkLKCV^)d#cVc#>P%k(12tV+-dO(lbiOnswQOL$3vKK_%z6Lqr)8gVmdCtC zR_M|3WSM>^%xNYXB3{QRkj#1*8P;-S-EeW7ZaAPViTliT*bU<`n~iY)vF6&*=Z4G# zlm+WVw#nPaYn2j?J0QX=0>JX*LOsXnX7&4-@h>1Q4(Sg555szoJ~&fUotB+#N%5~> z^qlqropsULqjlZ6@4UP$ry$hYO=BID|0ek!V92rDvZf1HvtKG*H38Uuq{6Jzw5pjn z(uFAHu~m&!QPWm_N$5U` ziDVpyL=>GW>2zJAR%1TJuBP0XHCXu`%`^R4LV1iIf{i22DOu+~UWzbSPlc!+scsrc z3$&248Sz*FV1-o)Lix37@|SlugI&pigiH~`IPMD1D+Y4}4_8Vjk-2o35I8p~pr+Y2 zQ)lQ0V>-d(I(`*5hMG$a+`&@@RK}1*cKXpciy~H*zt$_lrD#ppP>SSFYIkDht^j(V zVfKI{_ys}%Q~+?^bOA=7@<)jR!c3K0astC4THJRx?>l&$lTZrBy8sOx0VIvpu}HX< z9Co+It&tQ$pnKNaDiurpsZwUQ6+GQkM6SLCb3MQemvnR~RkNSAP1-h$IbYABzdKdE z;Mc?a>Xf^z{>zoE@nm5l5SE%MtLJi9*bh4Z^q?`(9af2svtaJ);>hCT1`rpY=r6Uu zT`Ts80Y@7YuWUvB#&qUfgZ{zId5>@II5XaynYY^BdE$XlF@UahzF8Pi+(PhnK0oNp z^1J&DcMuO6V+)$|UY5>!gWlNUVUI12?j!rWH9 zOwhQHD`$3u78pW#lhg5*5n5dKd7}Lc86ZGLfRX@Ha%4@aGYMQRPL_%gCNK3$@%5BV z!!fyA*MMxv1nYTVQzLD`XffI&cR53|4r*qUWq(<^m0oE&o>aejD-l?JP&{KYEaB#$z0fL> z)--xAxpVu9Cd}nZ|3?!*gGa4fNFE+pqB49m+MRJhWXU@Hnh9YE1t8wB#bMYU2o=&M zJ0JL}b4fGlUCpootb&tfj{()TiIyX@FY$ySD-HkcYr}r6WS1HtXCrm~2vFgsOxE-+j>vhcWG7l>Nz4G%pPtLRv9Z!@Lpg2rZ)Og^> zaXu`2u#xwiV}v2`u*&rcbuhz35wdTHP^;PGdf+^inPdzhFa>fwfi@ds0~$^Q^$oC{ zsU+LDSUsi)g-TOpDZ}G$*xZcrIjY_EfZ$9$xru;nFqm6Puu&kpieGckMZIl`2|ZyR z@jgyUi99^MUKbBVrmj%2i0q17`a)=4JW>rz7sqoj#+Szp2*+|ezDc-oU7z9h(S;qq zRzkQ~4CZDYX@E>3-s!uN^jy1zdQ=rDCl=+b_A|z~b7lxxHucj{_WLkyH&=Y1x0F@e zh`Nm(HpS*d&Us380+$7lL*(HY-fN(V^U@2WMg#5(rIraSl;WY7_ zuwHG@q26>PSU&K@buWBhmYHKZ%d#{Ps+L8{vQgze$xI6!N|;>pt~5&i1Q<8mUd5hgU%vkuep|$|O~kFV|(H#y1WvdK1X7xz17& zi*76@GtZDyj;}Lrg&e7AmVXi{b-Ouyx`zzx_pg>7x*)_oSMzTB!fNXb9W10rVf4FK z`Zf@w^GknvS_97u+jQ%8yZ2(Mm3&O+J1~-^1|mY2iR|`|dy7)(TFpLW-|+SDByj)d zXb+i!8}M~#W8A-X6EG86)4;S?+hoFQ0_BJV-lR*>k6SdU7rq)1x+S5~ybm(6APY$; zYj#Kg8#?fylDR0_WLAomLFy+!g#iwvso`PeWa*@F_|Oubgr z6BUyK7RO*vSui(M{NZ`cfE?op&n}F7?hy@wdX^n6TmrZrw!`N{%t|;2n^+_h8x#Ej zVyt)anvxwdgSJ@kHm@d^OowhPfuvZb%<&6C#?j3e!{ug^%&HY~Esg|z*5o%@88as3 zVL1=|>N+pE`x$jRv}9?IB?za65waLK4SuBVZqE?e#U~tp=6rX+3a@Vx>o?_N`u2U1 zEJegvnx2@^bge|Oy2Hxms$zy8p6TO{u%N`GbCnSV{?7zTnoS>c>T_Q?F%ztWj~1wO zg0g;X+%MMicYb!7A+VLeRH);)4?ZHo@JsYInWYRhgC&aEU4Z~It`rv~DAQ?&1?_{1 zZUU<<3GXTidDEn+%~`|l)rT!0`YQr8pYEB&URVA!L z2c>WCB%IV|?RPmJVe(*;F!!L=A7479S{oQdGtcFpx@=SLLcAna7*h27R}kGW(`2)P zO0C-b-U6eAxs3v$0B!G}`%3p@(qgh}5#`Q>=SR zjAF@>jCfLIP$l&0s-Q}5jJjwXdolxKRTM0y&$&wl)DA<1#3tSwTqCXtOzG9L06%!f z%k;Oa{S*ZrOyf=LO#P3m9|k}AW+Q}sa3fmf!|*x!M|EB|qz1k=KT9fwlii!re5J-I zRGdUilc(i;-hPAM3?Tlf-BYO4I-CfA!O#7;sj(EGvj__<>&r!Va1O1PRUDZ5ADC;& zyZvaiFVf(O|D-b!4=V0_OMO-_3j0~kVp=VtSl^1AU=lai55{cFQ`vWrN=8GK@{Vtn z7v|xs@uI7bG(v{5+=_Q+wSE9u`+y3Mrv~1D^~3YSSYLE_u*pVzBfC9OwE1V)3h9=3M3l&IFF=V zAsjAgsRo#KDDj1LJ8a|idM3qH>b;tcrm==R@2N%D!WBwPhbjYuhd}yKum8Kp!GI9S zgqy5g)QHaGw;w||WQtQ5sONO5SHsIn<2U8_mj#JwY0im1eW!T2W7_RtL+Cz=_)tZi zL2NX?RKHinfMF2SR#UFD$-yi&p6z`lpXMo%iqs$cknRN>G_f^Z#Vxs3Uz!tg8JiQ4 zKY7Y6gtWa2JkC(ca0)R1Z^+0%um2KPX+Hf-h3Mjgb)h5!FpNbYok-^-r60CVXJ!|T zitLL^g$JHhrd51#u^kl6_||Ki8!6d9fr$jfA)%%E+iU>a>hEF#G8b{i!_!+Q6)J^0 zEil))2G_TcX;;ZLF59`*&2VxDR2h!5IewXLui?7-qcAVLc!CU7I!0P?q4zvNl~8ol{${am{oq*#=Z-4$ncj z4uh;ll{u%hYn?Kvk8U%~H(g01uGz2jmTkMuI2Resrg|FKaz-CJ4(yr{tk_fWZ#Kaq zXl2>v3=(GI0TkcVHB~F@0j)|;8SM>4>coRtgd@1Ozn8)bGS5;uhdm6}b*q1QJUqxq zBE;^a1Fd99G$!wyu3y}OokrbR?mAG{$D;-8OFiQZz&o!WTyDd%8%{6#M&3Ko z5y+xuv0@+LdJDDtgs3iKQ;aA>U_b4R$qC1Jt(ngg)(h|RANDmI8fn!whR`lo^sz>r zXmQ}Koj4amujelto#-#0NZz!Z4Yvl*YArnxkf0{aDDYWRV-#eg|n_{?fh2vc$r&#s49lu)z998 zfo7>K*F3qxr}Diw$MknUOMsMM=PQz5vA(BF@EB)cL*MJ)#x97WI>W=EimyJ5&VsT6 z<*!Dz%h@b$9UjgDd`~#Y|M8#1xizVjXxE(E7v1C^vO_oI?dzwBZMI9_t3%@?JumRAVSZCwhvc5PbS#qgZs?#ZJsqeksgi0gEKkMu? z){;j|6ec$cJdnitBop@3fC3PResooeE`TVT-ufV!Wo{!I;#&TAsV^#3^6OLrOjG)p zCZ3a>tM76_jjA*1)&1k;=l0z#R(o?oC&!=!i0;tOK$#}jTQ%&b(@A>79jER&!!bjL zY+)2Z624(%5*bj@H2Ki>KoW}8Yc7LZ6TtB6rNF5-fDju^Wv6nEl9PXpWzqkp*8K|?V_sLIIU+7wsW2331X`?|l9fI`t^xD)}= zgc6aH280~ctP&`_va`-QxkH7~DF(o>jlcOnhbeaQqg{u$y*q2MY>7or;!)B)pp&U!6)b7?!Hu#Er`h)Vxsk*i5=9Nse*#B8AuUie=fM08x$! zV(Em1dre}zn#|!KGf~yFN8LA+1=+*rm^W2~0TRBY-8t|N;9{m3{60Z%v|IC->+?uw zv}Cij^yc|cmZ7t*;V$F|+nOVF?*catO7I_pbA&06kA|A<=3{5mMRdkXT<76rcHVikn61JDkYO6ZLxu4Dbpb$uxDh9K1XLK!kn4&f#-P_B~f<5c4hn%$s( zr3N@96mq$8nBcsAAZi*C^t zJ%sfzrNcx`P)*I45TPI4SfBQvBovnhjU+j-|fNz;qh-Ojs1#uxJn-?8nu zhpws{$P+4AgHwO}bZm0!aV8nMa}J`V$4_SMtZ!UrrrJrU-}3>f{aw>OE`W&li2Mk$Km1qNni()I-!SSYAN%6{268Ap6NpzZx$xO+yw-)n__R`}zm#doe$zChA z1~$`_bN_E@3*}{+yE|#Ax```|Wjq?hALp^XYkQ(KuOUGnUG_Zc-P!|VcMoyNVz&=G zuK5wzLhc;?Wm5k2LnaS+RKpX8PgwrrX9T3Ud5N92UK`lelO!IJ0;We=`}zaxi>)$<_*i|~bfZ0j3WgD2^Yo%d&oF)v-R&Av z*{%mJlqFJzst!?r@=%zQolY$q=CewcPCnfcKL~%|%&J3@X|mFTAnMa!Ey0 zBuby-1d%rxwzxY{1j8g2eErSjAXO5-Y15Z5K3HU-DO*un0MHlDlyKD`_CXSP{h(ZT z>lY`cPxcKt-wWjX4r9~wfEqu`hf5dUDk3VSb*}`F23o=GflAk)E-^BWw|I4K#7K{~ zWdbmJyw-`eomNM^{fbjA1DdK((T(Uz_4V1JJ;PV6Q1p3?j@!tp8j}On@1GAKRJ$#! zP$=bW8W*dfslJt+<#Oq%VQ=^P3==sfVA?XBwttPQGMwALIjWhRR(MK9R9rm#f7pA= zuqd~6)Pw3`!b-0hI3U5D<}Wh7Li78bAgZ zV2J-3_g3(|_PNe^uX8@0PmaSg>sk3*zr1f1=GCEsj||ec+fJSO3W)BD*pR_C;;it) zeP?>+{+a%%62y|Qd3v$jLYno<4Sm9S;EJB~aO%kSZYNHCTuE9}VgS27^IfNYq(Z{N zv-XZhbetg8j{_K&o?juBNX)NN zA>Oe8ZE5NX>$hk~s}(YCsK8n4S*Gl+j921Lx&6=;A44e&J&D4ukil}0Qv}KdlOojk zTw8ScK76iJzA_jZcKU3e#WKIeV7NGJcbD_dvrh!P1T$Q~CJkf=pQ_IAO-8uvJ=apQ z10Xo}>PF|+FH|Kg;B4~9b(-BNXaxq1H>>{A!z_V}DcQP@9@e!q7G70_m!!K}_C{VF znii_HGx9z2+Cdc8d-%J3K5f!>&l4n_@`!chJsWdG>P*PL!idHRG-*YESa$ls>N9nm0Uz7TOG)#UweEWbBEmrPkh-vOs3Dj8{38E-APgRtE6VCY6j7 zk;XXo5)=pBX*2NY;+=>#%DS_(XIqDx2#^&u@no0LV-((tQOQ%C3}C5}bF$INEBY+* zX@4Rp&$m2m(~)5Nv`Kr?`DQ`>#$6fj*)OU z5-Ut?##B0{fCwgG*@9E5A3gsVokj0j1X}p(S zK0&eCy$SQo`-(BUeu~lx$ngS0|9SBe1N*349mmKF?fsAExYpCP4J4g3x%x!1$5YJe8<%9G*%RwOKFi%Zi*k|#ImR zE@le^T(J@Xp+rGsMjz|J^r*fyx%0tjs@wC!DBNp%bg;mHcbY=XHOlkVmQs-?E^An&mYKe^BGnn$~M$S<=bbIXg6IHfSdZY0&wQlkzY zpHrDLP{u!$jyq}E>t&nnu9MjHI*>(WC{y)Oh6yRhhI>U_S8g1J;|YOV1-UhLzDKI_ z0H$`p|5QImPNG|dd27{QfkEUe0C}?hyG9darKTzH3=y6nlaE-9oV!515mmf7X6F;2 zS$_ypxy7x?H@@{g;%xyD!3*tY5vgSy4ctmX6LTP3*;4X3QgO?zQ3p5kzeOmk;+Z<898^I)D%RnR4Z{vJ~y zl-O!B-mtYQhoL$1f}OmgZuerI~~|I&1faEZ0!>`RkpesC%~ zmVLSQ!){-vkopnFr5O(s;RM{r2f^=H5iSiHT%9vbE2huSZ@oXW{C-XIvp9s+Dtmez zAl}7hVm?|kX{lEOf2DEv)ICBDmnEF=t8CNY6@d$>dHhqkgogkv!Hv{#VGpW&*P5bO zw;WS!;appdZG+5dkCi`HF3&2sjMpDN-N$QRHBbA_n~&BOsdfwX)Ilhxe5^>( zlXo|*x_S)NpjUjCa9(ESq0F>o@VtR|m|r-SVY^!`1_A76$R*o}{9eCMkP8i1jc%ev z9N*E~mg^4Y=q?U7r{AWT-DK-ao;7ST>i_!G37%*;2FzhT%i+%EOy^1OLj7q2dbmyR zyat=b2bZrB(etNILfyArj|E=5sJ-Tx|4BjnSe?}c9wc8&yiaxY6< zb6PW0^^iF_ta_fX$MD?+)+)q-R;-__8+PS7zvTc$IhSC)>^RhbB#~Hv)7$ilxWiY! zYj0y)eP-lojmpACKV{lTs1WQvr|AbcVDuGZ68+Yh;THEFppiZ&C}X}U*$&MK1Lf#! zEw86{*Hw^p|FF%eZt>15OD>48(Uk=5K;> zOB3SCvI)1?_Bj4F8XLz*XP*e{gnORZrunLjR7|j__9wMe-C~#5ut!}CIX($oqdA2x zEoU(t{Sj8_%484bH}){{MpeUUYQuxFX_}7MVbV>sd(r{#B*`m4 zTCwHG6R_wXG8J5Hk2Munb{n=RqI*CkU|wRF(<$tEAhMoRp$6zQW-&2?jU=>_FlX-! zig=mQSVBe+Q(d>R05|2G&m@fT`8BmYYZWLX0O^P@_7QX4`@w1iaPW?u2F@y99Ki&RyIi_e!#V@B0ULSwLDE@4*LWl`@!Aq!^#&}0V$odiMBHROsMSYFBoWcuEW-%CT4-w1p8}! zpHpenr=-PGLrf2Gdtk+L=euc)Nv`Li-g>uJi5ef0X&WR1anHpzzLeiPMB%~0I#4}& zy_ND>U9b^P#-tU~N)L~`*Gf+fb9Tpo$xd&St5t>w=g^xVJ-omf&BGDNa{;AJ7FW8o z)7L+C!I3}%=-6mnl#W}*ylMZaZC5Br2`;P4oIWM`Y!CxKHNdiJeBCvd7zY4*EmrH? z7)^fWm%gflhLVB8i04i0C9`kZc%m4zkWE59oAd&&{k-ibVNva|V&k=pH!o+~s$~4F z4hl0CGjg>P^`B#SA*M4{%BE&YF8!~Pw!}b`&!EKvxZiO z#0(#mAvnA_SlF~WwCTy~x#n7NNUc#|5x9TH9bJNyMg^ghJt}$;z_%&+zckfy?10ob zN3Qa>VE2{cZ`q_qrx|wp{pN}bbJg1A!UO_yYO72(7vHLtIMQVI?>Aczxb>yV3lv{W z|6tCfe&}jLoK<sx%9~ky0LSJ5Y7X__qJI!W!U@e-DH_m zgY8#9KeeP*CXQ)S&*n?|xGZknOOQg!RzuuvD1YnuSb4#Rdw^G(a+`B?|3d)zN5CO7 zS@&bn{q-fU!OUvScxO;8Qres9tVJZI2mIjG+Xklevz=imxNEn{v;(`H<(d-CadeBp zTdf2$hEN1fr8KuZwL61vzL4{qD=A2s-gqQ#L+q-Vr0Tn^>8QLarTJQgW5Q;*l7F7N z5jg&w{Hf?IGQC#A0qlUi&KZfu3=18As;T_W_3_saMvQQmPo&Rz^;}ch-y8eH9_qnB9hyS^oo>g>w($g% zIL-Uo5f%Rl6ZO9CLtm;{UR77#QGF~Q@6^+tZ}&eCTE<(%)^k)&-k6JPi{XvBECC-o z?NVUtx2@<)+SLk4U91`HB2PODBHlcYHWvqATOShG089+!B`+tnT@cDn(H<_eTN#@y z1fga{W3{wJ00rA*y!V1~AV1#G;hDEu2+!l>^bCu`%6Ku`744l?5^*Vc5U@-GZX&i$ z1Ghs?jc>OxZBtRBPA=+~oz6Qg&1PSi@2Pkg&Y`aBce+aHR+qKjlGA_;+2D}Z3yoz*asF6T_~?=fc6tjp+%!U)E z1Qpo7PXZAN<|pO@6=QSzrLfx37j^XF*z6h}l}v4+PF&|HNY#a#)L4u_98N=0n+7*-lW$sZls2WmoIJc)Laj=4T(hRiIUtTWB^dc?ra2wA-0g zVm$=t>M2o3?&`e5lLC$GKhr*S|MAu5ynHKW{;*8pGWNZwW_hBz{a=+1t6U%tFBCZL zzkWKXLA!f5)O+szNE6lElfn59$MmH|pQ*vh3{wou4*j56Z_W1(ZQBcfg-w>Y{xKrj z5hUL@5e@J-SaFnCsuf+Yp*YWG{(x(r?Hvf9-`#Mri%!IRJERg`Iw;B9c!m5To8&{) zwnXz_iIaYJaIMTa0$%}ImA?~w1vOfPYT?9q?)&U+X(`{Ac;)-Q^Q0dvRps28f8qaL z^sqXIZ(*E>Ri(Gaok~ll4=0AIC~E&V-BGB>S6sNBX0f$*!gr|}>2`wRSc-1CR=473S9!lO<#662oQjq6<}&T|?1RnMlUaSeQ$f_N zpsKXGmflypEqdjSFXx74hd#UWp*1^K7at74qbFV^v+sTvvN3K>s>i8aeskUiL>dQ1 zGQN)0XbBdfo#nTkZQ^9pD;sNJyU`RA_Ez`1b!&KxsC@)JR~I-eob6%%jvbF`R?|T0 zFE^!Le;6d~ySr)SUM%Sf;;R6|AHxRaw23w9b}J`rYxw(4ophjN$#%L%+lcV zY}fMY#D`<7*RQ`GMFK1b0oCr^iDK8T+GR)72{kFNqH^Zy9MsBW_c_92P!nzvHRCh0KX@1vTMeV}; z$?>rtrh}gcjwSet$UPQ$go${fU5gP7LG4PVCHkG!Sh4Devs+8hV|UZ7Qx%v_O3z!M zUSV8!(dYqYAivGx#O#Ht4Ze@P+!32uQ85xXby;-WH{PWH6uIxR-@kts7hAUTKA^ct zu>bMW4b^HRa}1d;hjE*q>J}9%2p+u^{X4T7XuBkdj=DW(Qfp|&Md8#ECqz7>@?eNvOP5mYhKzpLB&`vy2{N}0m9#soI8A)Nm=x;9FuSq$sVYNu@K+NJE4-GkQushwAiJI-7B&9zVW-OK@=EXe0>RHJsxbSBf%_4V6a z8sNP@aBz!uck<-LPfml5J`tML@*Hb!>U4wbGn&@g9Erh<67?GQHA^hmG%G+&<;puD zdz6eOO)j#9+~4A+(kjh61se%gZnfKFsov16DJ<7I`9$q> zh(UdKC;EV0gsyo+Mq6EnBG%&U#=%go$-v@gOwWr)lY(Hk>ix6dAjM*buENh!T?#&I z)s_IF-ilroTO?cPQa>8Ydsuom&$mQo61mC_ik2g=lkSQ?jZgU#+xlTP4>?x#90ybj z;f)WvVAqG%J3R!kMK8)(Bwq$5czk=l1CqDV&~RXD3Uw3*gEGpH6O?nK)CIg|nE?Nz z(52^^`NW5pfWT2}!4v2qy(MjrOrV2JQqxHzvwg2l>IPiC-Ehhy`rO6^%4 z;;=;87T;SKpt0e&#NM`)MU9=%lwd9>u?P1G%1 zXVFo)K5Y81L$5tNOsm~&?B(02R>8@*-ZD|z#7)9)pwYHa`MkK01$X|BC-8MLGZ{$UEhvH+d_Y$L|WsVilrCqW_eh-}*Cs@VYVpe-p z7wa-(XKLMMX`J}}b=pMQcR$73KW+i9b_x&(2m)lemt==$CumFyD8UgS<2kx!Jw( zJ|kHOz>+U)G*F5UXb^KPwNugpK3$85jFIsPwMCDC7she2Wu3btERZ5ycl1k1t;GrXOl101KuluqbY`Q6d`y_q>=EJCN15l7PXt@RVJ{2$931{CMI1SL|#iWbB-X>yGE`Fp`b79PNHTq2}_Qbg2-TGGh)XHM# z`wn8J8)G^KKGxp35;fcd%ESxT<(VeQsmLrp=jw=9zZ{E|SJU^)kk0nK#w`#p>?pe! z+uAkhiLH^lb9IO41ckQMbH)6}7wANdUa6!j^%Qv|h}RfTj8)vx{{+pj$}|`01Lf~2 z@e4)%jIN(av-^NyJK0;$=Emi;viCt0xhARGpwZm%vCnoIuCND^`#vOn1}=s+x;_C` zzRU>ows5#6e0$m-c)0d)SinEvIy2S`P!6v{5~|jQive1yyY*dbr1gTBQA)*y3AZKd zPAk`irVBhO^D83*LxOAV!5b~Q%KK%A3?dKgc!jZd#RbyXF=6vp0?Mg!2ppnFXEQ^s zz zwI_93BTJ&EcmG;t0ES7?^x-aqP8!6iU=z+5$t*v7$gh*Vb1K2T17?n>kPr%^@ft*e zbUT~6gbM4h3EW7rIajQpbtrI>38*I03w1zt=f|%5Kqh*+a!1<}uc8p&w%~JH?@#u3 z<24Q?XvyM0ie6omSgew5&Xe4TwugA12m(G*i=8VrzXN>eEjG2zoO%VlAgA8Er#i-J zqFQKHKTgSdeb|hIr?>%|q$m+lGDmlc{}YQ(M-c_Mk3-l`gx(;?>D_H|S?fMya&As| zr^DmYAX^)k;G-qAj%3M-J6k0fM%K&PrR{wmuIIslV+QBngre&&p$(6xGSbl{Zine! zxk)B2YNn3F%8IJV6}uJt1>v>*L5luHJ(zs4UD3hSngVhI&%Ktbyw@zk6bamLK{~w) zO)FbzCJyetyV!T@-(|^8-Cnxzjyx>2wODYnFe2G;2h^^Fh>KO>v-UPq;^PcAPAlTb z5;vu^8~Z^Nm(TNA`K?}^!w-puRcdoQ#Oxxm6x-4#=Dj%EkIK-bQ}ESH=FRp)$K?(+ z4p7%`x_#cnIczETG zDkBx6u#t~jnAP3c8DBDDHIyS=7U5{7Dm%a+$F-|5ay>2vv5o`vDg}lfFa5-Y@9=%O zp-t|T)uTl7irZ+E7k&=$6J?`vN(gazZ9d%NO^EsTF)!T*wUjc}u+}E|u zmav?Ai2~-14R|B*lNugc$cxjuvRHh8j6b;uu+4NWf>MmL5G@O1Yslif!}kbv4PMi$ ztl1w2C^+7ij$1Wkg36~5Af#fL(Ck{qIFOT9^0pbohm%;X>-=O&h%66?s2=S)EG%QH zR%%DhgHX2tz(?*BNxt3eS94-nkZM;%p2hu6yTa}b>Gx{l?#gO4xb;~2JBZQ3PCRSZ zKFd5zS6pJZBKt{!_MKRYc)$kIdw)hwAzf6fR4Zk6=7xNImez9Jj&8QBNn9XFOcHG& zKc{meL{OTTHyYaLFbTuuK$OkPUE7BW5d8Epw=%b^@d-mdm-0gdMqmWR&dUn^a)%Fpo03KB-&iTJ#^%K_MOSP#`<=QZx+ zY7%&XIt>ubZ9G-lq%NuwwmlyzAk07z<%Ehzf1iqKCpgDy28=0wK94WwV3sz6NQ%x; zIexPm+eIf(BD6xYK3IJZ&_R7~q@t2;2@P&jRusG8jzyO|HP?Y}#Z_G4QIygVeLZX6 zKptsn_JjV|R-+$xJrpd&WojEyg~R80DQ|5KS7;DKcp@k?d|G+REs9(BRSo%tnp!HJydC z*ObtM=AiJbxA6sL^THXs7~IR#i9MD^Js(~Q6z^>GrQ9bgb5VRfj;!QKYuFnAuo`!` zzoYZcXX_Se0{#{QNi=F1^`>;#9k|0Q(Uy??CDaSJV);^M)iN|p43vg3jF!FiTig`Z z)`vHJqwAZHX5DY{2BZ_i?jQ$L1I=ICHXF1doX3eX?1VTooCG_}woa=T-R5%>guFSVf?A zBnFL{f8mS6F0p-Yi!5z3ZLxd1Lm5`?Dg9inpDIIn5^j1B5`zBFCe-FGVc}l*9xcKc zI8{^t;thfQw6OXQ};COC*2W{n3SNMS_uc zQ)hlB91;)~c($PSX0Ba1E*(Lk?Y~vyY>~a}K{f81#q|=Vo^&f&W(r-9}X~1Kl!-3!rxM4gh}B zC~_--WX#`T5OxAZk?%<~MKkB(#rJ(PZVf38#$=|_u{*LrPEcJEmdmZ`ER#&Z)QVf& z)W|w*p(>H{BL1r3gJD2uZ+a$28_)*`buB>^`IxKwUkt^|9KxPwk~>-qbuUQ3RwYC7 zU*#;vcaRV|zELF5L?W4n?$Ue{v)f4D+n5O!e&n{f!c}51P})^-ojf6&D zOTUW@Qf}V;yza;Q+lH0xahs)}DwlX7R**I^SenNk&UlN^TxT+duN_d?p%Yd0__vdr z^8s!)hNEus72@rPsiua&)l@vJ5b$?ce^)bg*IcLw%;;P~JG3t2Qn-0q+^d{Nn~L4A zV%P}|U{dn84TRUpS8;>8GD0$5vGXAQVHwgKW6~i<087Y;%u%(Vu@JWCOmMOuZ3WDU zHi9vr@|8`eGGK%8)+d@m%tVwQLA-GdN~DWbF~-7oyK~7Dkzv@yfGRo9--pI75434t zxD-FU^}Otdb0#IOdV2F48%-s>&^mwD<(xg&f|feBGGz$X02HyUbc(DNzr9;83t>CY z>)kco=s%26ne2C8wEXyhEL%4hRjNjf{8Tm(yAju0PYAx#JupC%Z|E{7(75F+l;k97 z#8Zgw<@euGoh^|p@+8m%&{|7_t}9#$^bUz~S&^wju^L@a&wb_ zR~!;3rjHG)F$dS}Z^eqLRYx=IB}L3gy|fy?YwoyoL8MN9_5Or)pU3NiRxdU5;8LTf z>~ifO8c=mTFzJXhCqv)Gbs6~7^F-_2?$$3ooShSP97WQ7U=VOfzr44dxVN-fk%f}V zc&r$^O2y#8?u9GkibL|ef71d```3kZbyk!7*B=EV#5@|hge7{HRFDuXK7t&`!294! zAkH>1aHY+YVgsf?#%z{i!r+xM$rdNWVY38H0x2j|gA;S!hl%tA~*y~s`X=w zgPO@#$pHST%5|d2L$I6BYM1g<68!0>4kryfSdBEAsO5^+=`>=HGU@C%`)trK<`AF< z9Gcei9xL2VC+HBum)IXwER+Le0`vrD0kV57lJs8ezqdQ7^3JP7c6pf)~W(8vWeH zgk7YN`6x15e7aM=IW!uUgX{Me zUd$wpEoNVrPwln43pRZq@XMx$<4~mhJ;Gc036}X`QVAEXN!BV$rq?`NFwsO!RPYj5vr9 zc`YKU&AM#-{Q6!u#Za@{z-C=X!O}WX*F7h8{Kj^n+p2rRi%!eI>>J~i&Wda3qI-BB zAwM24cM)&ne*S4vQ+uoQ$_ubRhr zxw-udt><;`{U*oc=qOI9L=1Kad~nssd4gawWHBGj)!`EiEByyXf*L~ve65i?7}O&q zx6XGKUb7ef_$sGK46YH>SZoUK^agx@WxM>{0>kQ%J8xu|JpzjM-=_BIM?3H;-sERC z_@ie~rXbMayUgt%9hI7B=1UN5PPF#=k7n!5J_eD}HlH2J*|ljYK;+u?7(mHVYe|=v ztyW>LsMEWz?u%XJkOS~;l*hB7%vy^$8k)2Sn)!vLChjA8<-cH}G4mrKYXmIFbm|0AKXP zsZshLKuAneY5?^{tKgyz0svY$UG6xBdUK8tpx!jJJ~-+s*u*dKZf2_yP|GvN@3tdh* zmwyU?%XGiKO!QkWLVfV#xg{&`$0TP+gK1=6v^q`u=VrzC;gua2%HI?B$OlA;y2)>} zI2}t6_5o`d-u?D6@$dHW`>_Okn|$8X^LTfEiROB+lw@HtPch`swEWZGpB**!?FQ(x zu19vjzZ3HF*BL7Kj-g#n)Bi`uB=H>^Vtd`g4CXqiRp4l@4OGF;vbQdyk5&Ynw^=+8 zRNU_Jf3yYtqy?6;>;VN_fk60#Gq?W{WX}{pQ!BQ-qxNT#&kF)RR>I?>{&yLm#Q@?Z zC=ww(>jdW6NM9iM_i(6{!HOAXR+(`g|J{G%Z~Z%UOkm+#WWc=q?}Xl;T?JF@ZG<0s zz_v_zXeiosh9x`bXcY7WLrw}{};9o({~DOfKdQ2UIWPCUQy9? zM&E2>&c^Y>>6r-_BqRopmQh**e;Cv}?f8!Gt`I(=9y%|;U6dUsaj4kKlz-umKK$!~ zHM$@jD-dYZ9&)vQ6jasM%gof>1AY)eBg&(;*znoytqYHW@FmQ@=P^{_=O7Y9SUnG6 z+zU)Y{{aQ$1udjVR!mUnO?wnIWeui#D*4AG6XE~~g&k}nW0HOK6_0v!^r?kCgiZN@jD5=u@(EIK78U3YApjz)?yA=Bj#5ht z;pay|&yM-%cR*M;;O9rpo7c3fbq90E%s}dXgtd0;$LGBPG>`O`QcR4-V=ATKigWKv|HKRNv{9z7szmja9eA(gj|JvKu3WW^gO72O4R*s zwBXn-ZKVNgv%VXC{rC)cf4=Z)i=dcd&v7mQU}4m~4z9m)wERb(LRFaL-#=nj{u1!I zQV~doK|TyDqY00_fK=oMe9K<%i%+R@_@Fx1edx7ipxU1ageNhKRRlg5u(q^v20E zg!5}TPtN{+i0M22GTec+pSkwCU*M{5p!}>!pn0P65EBgeFcmrz4q2z~4IKfR{ptvK z^ux(y`Pc^l@SW8hc-6zvWPn;`UjI(ZU9h$8d@Hj2-7)WUu;dJmI+DIe3khyxQWAsP z1nB$&fDO+=0@FRX?LF^#u%mv!pBHodxnE-OgVa>$Bkp&6<{O9R%sCmmabKzxf?g9i z*rodqu@cTxL#qRScP=CoTytreD|7ls6AIqwO=2KK5Dz7>`eSeZ`!c2zU_yc#I>CW^ z87~=j)P+!au%8NhiVS}b2u$Lur-Ve^x5r%hjxg1JbrifP8LVB%Uov(0i&)S!_-JqT zaDZ*&hVzR&u7LnW47_=wHp%$t!J|(<@Thm5jUrC#}!g& zAzr}{aC7?O9{=}8AtXRLg%J#+xlcl?XboL|kH|Y5-_{K*ck|K3i{H<9ouI&I_z2DM z_Y`|U`S3TbpYEC^F`=0RweHb2O11!VlTnEia{1jpe#Vr*G`@J2{l^Rb?H4r-=-0>m zSb#nBG_9NY_s_hIXn?S=+E~5_8u%?I4W59OPB~wZKaO1V>w%N_gUS4NFAw-^ z?-TytvrJuse{-3w*`?nP9vk8wzVvnSR(%<0tX^iA>Gw0xQ~1p?-T86hXgPqGx57_v zAcEoeg8XWZ*&FNzW~fsY<^Oxdml}fab<%~s5h%e3)r+X3PGsP*XERser~kkyy@ppO zu3pYMzUzMV>+=iHubay(KXp02qmU`nFgQc3^kO1Mmp@QUE&|jjhQ|1Zea8>hubnT6 zH+E#gH}I0h&3^0EuU9br_bmUF2i`o7rq}$>E#V0^(GNknH7?NDv&RC*8fyfDH!R1P z{UN=XV?kp^A5EK&=Hlp+3=>#D@{sWrA7C%sjy&2o(k-AZWxG{7tD}d(I^s1cnn#i7 zqdk43<^P2@xXk8H)CmAYE#m1LM|&a@kEoSdmEe2SKA5qSU=KY!*=%wA1-~Tj?W>?) z6jeZqopYj)Ke`a51;F529&`mApJgUL{BC@P>Tx)B7Ji)y?-0;ssk1ls!9QUWabib3 z|Lr=E9kXASP8Prvo9IkIK6b=}d`_Ka<{+ruj?n z{WaCaUV+t$V1)x2fnnXy@l|aqBT(SoE|kFA;wZM;#`VwA)H8)}6Lm}MmCI}>`a9+L z)bq6%g2QAaDg0aNQ%gStd%Lg4;12Ea{V&ZA);QxqN8qoMKzQu0y-+42;%+(@#M;U^ zdXFs!%gIvJuVhI8bu0HK?r4Ku!rNdEJc*+J05oEL0KPToFaJ+vL4`z;n}Ffw_A+Je zJ+pDi0(L$^v&n&3vEMrl`T#Et-l->49KQ^p24J7Ess%0mS8pZnF&PncANX`(BRQ_q zISi_g1FUg_EJ<90zox1gQFkrJSNGq8^A5n@*w^#K?f;NApMeNg$i9sHFG>Hx2ii@R zxc~A!%(tty+bz(BW?~;ZAjHUi4>aES=EpH$VXu>fW(cC+FT>9%(==Wv+I*osnzy4* zN!O{v3C%nQ5D|R2Q$-R^o`j3~RFX7aTV7WVTMG)sY-m>%?aN?8apZ~iR zjv57@p!t*}It0QgL~U#Xwz42ibv|4vMe+Bqy_IOeb(G1`T>i(g=fVqv6mjhFo9oxM zkT&;Dq=4f5!b`qk`deng1`_Wto&G?Z8ZVDS;z;@)5C})B`4$|B`((T~rC676<;al$ zBwo@@F!|@y1OGtE_$Bl{t23n&cXu+6lv&?k7%8!vU|Adx)J8jmUWSRlZXh`b=VwEc z8IK0BftPAx+1Kok_ByyX`tkc`)S^! z#xEvNO;4B7KK;Xy_UkTean>5;`h^9+M!i93W?FdQ)9u#D+rP}Sojrgk2~^%3UI->A zzFyDq`F86-b?Q5y`AWJMgVqgIhqc1ZFg@ZE z3Gq%Oi45er$F|Z*8$zP)`Wo?o)5jOVM;Qo)XStLgk1p(^wUNH!9YP6pR~Xe(oiF$4 z>fHSQsLj(*j(REyo3jw!rBX*s*%rUJCjdteK5KnUl1Ssh-p%Vs1AZxFKmR7F2)a9; zqv6Kz1Mnr!0&vX2KFi_46oBu*drvtqC@8Y$bqj%=oN>wI-iJt9GA3_1F=vKmNr(QT(m7WPltG z?c-~KEl7lO>Lx!6#U&m068GZOsEzzL?S#jt_Azh+I#|55uY(c+4wfhoq8;kPV;F(F zM^cML>~;i)`fQ|@O#$jb&}BBq#r_|oLB4F)*8odFTee0~GC+F)ne^E33Yk0DksOdu zQ0-D6y3s9l$MDOkyotlzC7y+zkN$CD?rNl`FJHW_bohyw>Q(8&XjxvdSx>{#h`tBS zsP+t9UfcIjfJoZ{c#Kk%(-arfGi`2k_`~I=pS2xH6W1C91TZu z8b3NF8*hCGRM2uz4!*ys&ZbqG4bml8rvBpAE@uK@XJrvj0Am+BfQ^F;MbiAcpIJ+L z%s0_hE0t}2FH6Qj4I?waODNDedk$qlc|!3$pNy{OzN1LzgFrgqZjq|~68Da%8-z^W z0o0n2oeOM_{{ls<-;L|(e~X!)9T@_Wk;d!vmTCBpqZ`8L86i>kr9DFZ-J>G{l;E5A zPJ{Z2=Jf_jo*^OF*03oarg$fQ5@6o}Pn&osAbHd%G6~eS@8E}zKEJgM8Yf$&gV6Cw zM{?^}WDx*H(9u;W4!g<&fImwI!U37sVwrqCLjV^6SS1^+ccSdEcoE|F7gIi6wz%{CO@-W}cdjP$LjCsy*1XtT@7Tl55O9P4bh<5-A_P0}DkxuOebFw8(=>vdBC=QUL(eB@qmIb;2huyj3 zouWPo|7T7Q*^FNt_39Gd$n?{Nv;1)F~G9US0n*;F&b zwL#_G^Pm}k9$5&(Ikh0fs>Yl~t$$LHxCYu1H-B*X@$GTG{ylO^N{sc{RcxiWuz%gb zZkt*>mv;HHYFwXep;nnq$+T0vCrItF{-owxS_ue*2ZMOJ^*1KKik{`K096#siU`rt z1+KC&1CA|Fark(#KZ9m|-K#n5PMTNzfwSacMN^WL|17}%ivk&GO=j@9_Dhx@Xu}_c z-+U@>z_)HcHCADdXU^+UhjD+ya0-p%g$zgmySghn;fjhUOvnJ)^<%k?+O&!B@ENy( zf<+ie5;GD5?%GSp8}KgHO;?2_f?~hOlGd6|DXDhBv1h)Mu3wy#B#6JaMij|^qw#{z zzI$i{I<~?cW--6=bs3Kt>?FRM+4W&HSWR@a@Q=kfnVbq$B28T7Qh$)DaD|b_pAkOB z%%$m^Z(U|{AfSshyI%7k&l-etCrtQ`(iNdhTzJRXOJVG>?+Cn=F5p*og!@T8)NNz_ zsc+1r2PW|Dy_N*{u8ajT*P6H(RN$)yOeK<1rU67_!{(p}P()lAB_q`cIB-EmYUPmS zIP1ZvMyXYd!^+rjE$(}ip4HG$SqBhZvo+X>qWaO4M^U?opw0bv*B{OTG`$EQ7f099 z`kpin@9%CFdE26*Yc00jK|wpf=%W(?G*ByX_hYsdwiFAAi z2-6{e2el1gE?Lv+i6yZpivD;JABJhK;<+V47ddFElpwK>y4uszv(jhW8eXuZnFuAs z-kxNDBrH);fcomW+O&gPi2!z`w6%z|g+Cc=N@F3%#qg*SQ@sS(Rt%(a@irq)@} zxdid?q8N8QYlnS2v_Cd_Q)5tR8sT4z`Oeah?F1XtnRur z2?WKZ33vk!9<(a<*p6^-Gv`pL(B)mjfx`1++&JE+Sb?J0$R$K`+$``mqCN=%4{E8f zjh=_!r|NwL@-re59hdqu!aQ~t(t7isO3`23NbX*2upTKs139^vI{hv5#-kDTZak}7 zbMZ)y+PwiU1ZoRVBMv<)zCwAkh0C6Dp)cm0;RY)f} zz@F{44CW#VWDO3(#dqhg(;o~%pQg&iSaqwQ*1_70RG3|d@G3;#y7~ncpa0R1%CQqr zQ-n(Fy zm#fU1OdtuCO=jb7&aoLB&U>7`d{+JVqOBc} z&e@20ZA&1WVP8o6W2cS0)8d&1aRc45xYKepoCe4*2xOhfXOa9EVqobGoAwJ7U*VfrsA7dxxky;RhF9}USyFtZ3-E-G`60!{`UE`z+buO zjcWLLhwMr}IwLNS7+WI%)PXB*^H<#~?0Iq&7%p8}Sg`{r2_K%CkH?uRwTW^EmQ zd&@I|8s8bi*DEow0G9DG24DLEUL=sEL!~{a>sKeqJ3aJVztfse*4FgpKnevxMTdaZ zkiOIe-3Me>9eiT5C^O+Uq-=>wAWk0FtyEzHa{k{nUvY02YC3Mh0A=eA(Ogvey%In$ zHtg6u{=Md4z5oiaMXemlApH-5S&Ju!c4ZgrtFSAN7PPvLyD6?-*Jo#W+5Y6xA0%8% z)SN`St8_m5lY$;=^<>;Mk&ZF?DQz#bbmqwNbH6pc9hG27zUT`mzNSlS$S+pOy&77o zCWlnY-R(jMPT$M3-~B@J9xYUpKu-JRZXOvagwAMG6aZ?%yKo|AJ}KNZr;3p=i=Vh@ z3^pxH8oan^GPi_Hh;nid_g6i+l^2l4lHV?69vT!?>%0d5=7h$eR$NLI7v(c>A;GpDJ$hp4wVj=swG&P@;mX8xWy~0?_169%STxKoRTb^#Wa-s#c^Yw4uHSHt^Eu_FVJqB$y*gH zB%+Y8t8uDWs4FgGi~i&53=cdLY1J}pX&?(F4BsoS3MBulN{(p=(btuoo3c8G7rRA$ zd3Cqlb3c-s<4(801sp|pcQ(cV(8N=eLBldP#*ny6*=bUxpcExfJzQegd^!)aE2LzJ znW2ax?{JT&-1zb$z}i#zJVwe3+7Y@JpE!BnjY?T;Wa-MBKg$Yk>4~VIGT~^-r0VVt zc1-T;IIIKMNTP}b|3guD<#m7x_OW|wt1nbaP>isg$gB}zLX%`|Mk6Q(xrPqCjq)pR zbN^OVy*Ka?7FaGv(Q)(FJDm39OM>EzS4*eq-)DB^0!wpbEiU649r44)u+(cgViK-} zhYdoAtES2&{aI99_ALNwpuoZt>_|w%C=iImO`kD+I<0hS0b!+zPHH4e2eII0pL@}WGbj>DrCqbeYbB-w}RyF zHGM$bgV3@vv>7eUL90upB4Xh|d;vKRQbU~s_}8tL08J;yYX~&96}43hlrnqssbS|n zR0@DME|mv()*gygja4oCq9O@lvlP%+igl;cyB~c)t#(tiKWX?T=4oa%PAu;N$b)a( zx^2;)ei4Zi3F!tdMhG!5duhZ8=4 zfK}Rbcm&TAd z(nNsvW!YtJtlhO(kAP(q*&l)h5yP#G2U{!DTE}A%zje6PW&}{xKXl=%uJl47C|B^&+hM3XR*K^3_4Cd<1BoWwgV^QD@0Sf(^h& zV&0sUWaBx|7+>ppl=_9Y&Uzm+$=PyW%@0htd!MCRr$a_A!pwC($=~Qpz$HXl^_F~uDj=`) z4hI=2a!&?fohr`&HFo6?7LQSF)P)#_bq-$=b;*ymXf|jlHz4Zkoc78~UCaW<6@xvvSQTTK~1NQbezJi3$rSdynd7VZrN*s~Bkz;f?-Ok3g&6Q=)Y37_no( z{Hx(J@BMs56A%xb<9yN$8&RQ-1p2-#U}r{GRw%kGN9$KbFHUZK1*8Zm3h}~MOlQhs zLxfH&_NdsDT7E!n4)>b2JC7Eb21mbXK6~jB8{RtwxF>f63Rc~*D_j;&eTvrGdAqi) z4IAdRG`dYC5BE0u6bFTYL&OOd|5k3(q^k4GnKK`{9w)jBqs8?%e zi`nnWMKf{_IeCk2BzJz4d`VFn4|m$+UAFSxb?RKQG{A4JKuZSsCr{**0Q!d8?Rq#M z9rBBws)em=>|n|qSH?8(tU)YeoS?E7gZvEl(=0Z-%A&*xO0i!~3LwY;i2fon&z34j zyW%mx)L3*KsbL(|j(<>aNf^UFu-v3#H-E-_X>O7Q0SgwQRUvAcL<2e0{%V&i7m&Ug(%OG%3yK`DvvY*)f$g-%=^ z-7|!QXKj0|V3(iPCK2S)d-kGrKvFXVEhlZ1e`%Fh`;Eq_|5IuPCnq@s3W$|7_~f!M zZ{EBq#DeR;>>RiD6F$D&Q2<@jq%vKKqhqhd-y%H{RNf4333BuFB@cj z9DP>e*9ZLi(fpQ?V;-1}Lbpu|)U#^cFo0hemz6=yiC32=-5)%B_z2*we+QW?0xH>8 z^-UjTpoB`{Gnx-ssk0?gp8yZnzSWY8Bb-iquy%OynIT>xXf zi`fJO)Z22ZPCX!Dd1P2_z#TXKLE^8IR8-EVF~`;gxYUzhL%*I#6pPqXeR=x(R1vQr zQFjnY-Z3E$5X~l3}+#AILY zu3nD5_0-4gqB@7D<;lC8ob3qN*TAlM4FEwdSREFefW{XH<*_Qng#eQJ3AG;sw~WA6 zwT>7C99+X8S!&9I)K(UN{yQK?^)-KX=0J4GdX^e`U@FHnMX!rsqX3Y;;;raDP*+xF zm7;ALgvcv6kyxTxs3t#%!)rm9J6N~@arf((FkC9!=^I7o;*Cz;B-LnQRh6w}O%8-e zMDjqbX&0ij(g9@F-%oIb_*qVg0=Em^9AB8M^9&$x0Nx^_&N!hTxtz0T`eqIBlzY#%X_BP3xouu3B2{e<=x4V0uE_^)UDf z?Y{P++a7R`JkHY9Gor--ttYYDH3)|mDe6A9p1OE0TNJ`qnS57T% zxM_3L0~;9!ugi;Ha{2QXc&zi?3(t;SQZ1pf#8$rWMYZpIU9%@rrR~rsA~1(ajE-9OJ$Zt)P9>4 z^8%OVX0L0^CH0hkEZ5mPU?7%53}O|!_$V4ixh;I70vk3i(56xFmSk?;bK(HuCwDv$ zw@g?1>2U`Lv)1#1-+ICl`V46H#-=qx8@iIl$on5eO?)x>Ric9_;1PLj!GRJ{E>sA; z=hir=8~r$p)44{S6yvr4WHAT36fNu=I071)!sj4#7(Iq(pg8K<*_COi z$1Gr7m9%8MR{^)ENbI!AT3lu(XWNnBuI@TP_BYlqAp{ZqXeFxGX1IVkm|+1V3HhjH zuzD;BoRYNDrXUjRIiohxqxmu)If?eV%vN<+>rRdD^HpRr z>4X4NUw_18ujA<#V(TB|#W!MlpODLuKHg_)bG4b)vzZ*v2ukH=S>_!0J)Xtc`0|_H^58FScAmlo7(qe z5SlBMt3asnqwvKKZ*|ZOJYS3Nd?SIA?*--|M`}s3PvtKS?~a2I=e10S;b-wIaTnIM{_PGZl>4X}D z9VU&cHXw|$|In1MrKkb#{p6)X%kGD1h1z1UsZjL14!u4HW6VLln}pfS!i5^p@65Lz z^tLo~8xwMxwMg&u+}yf&nO#ME;VWgHB18)B^fBa>MSq9giRLRy&s?GD6cX~em0CSh zXg2x_a&euFcR@SHyw}xU>s|8 z-5R+L`Ud0!S_>@%GjJOCwka z{uW*Otea&d>*gVe-vsWzo!K!pQdVdQHk>DyG4rdu++LU0yu&_P#HHnQ^M=sv0Z?>q ze7T)Mm!&O3wDC;eFXj>n0B863=@5-9_*7PLZF*o0KMJ~*dlmQFZ^v}PF1@G7<}n#W zdGD^lLhr_}k}VV6c-wtA>CM%bxwK($kmU3%)p3HSW2b;ll|Sbq?- zLQj6WJ9HR$Df}q@hA6Nu19Cm7^+xwg%hQE|gUZxKvBFMi7}nw)I6=k6=os2z=QslD zbDg;z8xv02aTje>NTb)*iQ;lU0k@&p1k#_X^zjFDh-#v~)OJjym{}Jh9NcF27T`Qg z@ZK&a>X#fE4(`fED8!+=JqF7a;#3sA-R%ZrQPg4hIltUTl|=AKL>EC` znl+!{`XU_8XBmN{4a>rSRfUa`Ss|lp2|C*XXK3=9+NL|cv5QD%miT_{LC%s}8yCOy zp6J{!bgLqzCEY-r%g4aq&ySq43&{!xd|W*b-3hb8NKcF0L?ZRY>Dc@0ojc{`pK1e$ zRclvgdPl)Zd<~i58k1NLW>A5z;N-jYckH|U?P2-o+b5@kPx2T$N81fRtiN)g7`mD` z>NYM&q%*%^bA28t4t)~t;J-vtook>*zwXnXDMZ=>Z?9p_XcgRl`-ZMiQ*$zPNfn_i z)+q`ddZ!t)Z;?? zDUCuQ%_Z--HcBOEJK`q-EphLBI#j&zh6j3wPPA5)p(FXzp*he4V58!iGWGp=$9Ln7 zZ!S1bX0cS*M>{jilkM`5-!>VX5LJxpOT)m=Gd&YM5MsWfaBI-xqnP} z0i7~~k%%Se|LHoWFzPTdP+B~W;Q{B$7TfRCi;?Iw=)44x%~e4QsAZc$FQpf(cjOU! z#H>)Oj_N7===D6Ete(uwT%Y`8=6I*jq?1ot$j1Q7Sb2;PCih1C)z$2`OKliB5s|)_ zmNk%y17gFj5}i8bFP3={2X7S3uAjWlxi#yL?ttV>IJg{^t{|u7peHD>wf3*R(Vlv( z1~P8FWb&6oD>{|9s+VhObD8HOI>ai8z62~mllF&S`(uek-^VI?4A}FC&j&$nyxU`Y zcl-)(pNbqvIJp|;w+2w6^Lbe1?_Ke+M-m797g#BGf5AtMT;>Iy>D^Y;+mGCAkn+lX ztMo*LAQr6Z?92B^b=P|@{n&uyls}PTwBmy#Xgc@f<6~pR-0poqe#%M8bPuIY&_}J| zz(-1UZ}7z?RaE;hpeyo* zmstWS`dTiOO^b^3{`x@)b2n0%sZB-cTOQ{5;J|j@Px|O>Db?=UXn@kDncBg2-ueY9 zZ@aW>Gxh8Wpb2`!>`zg@>mYZ77MeY>DwvVe)n14s^yoGJr6-jGnw1jJHXhm!lBtb5 zywiwAMUnW>HRw%z4&t5}Pk3{n0^Ws&t|Jd9Ew6n><>=3UqcZUO=y^V=C9hbAbQIX) zw^qCP+gpDKUW=v1yO65pJEu(8(ZokHXd_xN7b z%<{|{b!-_WaMhgQ6h{?XXFWr#wIgITm!$swLZ5`JL^pZ)*3j zQNdfDH&jUr-K?lZI=wTA2BVvDFfLvj5PyT7K{by9qn98h^DY|YiAYOVqPP|Pb&GMQ zQHY*gX;?1q?B4W9pAhs21PH)gsk!wnW44>ZVY~fl#BcLMbmMJB?e~DN9jj{Jr5llw znRRVt<2|nWN5p9x{~BO=PMKZYoXIpbk9zR>TaEVijBJgF4(}u)-VpOvwhZkCErVQZ z(wqBxF3}|)`;ZPT&U8Zg%Z3lP8K}H4Z`Y)Kq2bYSFP&OKX?(2yBjhjN;f+7EqW;yF zXBk5oH_b*J^ zzCzdyI$b*arppEA4(&p%Hy{b@lcM~4l6>TVrK7EQTGg}*+x6GQ{)vF&S#C`7gPp%V z)`z2~pmY8oKuga>?!U4C^yUG5810v0zGu5~i-dmw$gkBw0gm7u} z14zNh*%IeNdkRKc6yWGYG~4Z|E%`k%kT5VJl4{~oLfGk3Pl~vIZH$sq*G%z0z zyV+eJ{}OoC11HN9d+IXwAr%8Z^k}aBt70I?9#&YEUt#q$3|*L&7Pkx!5!5=lzR2S} zsC6?0wcapZ_)pY28xlJw9C6)PkL>;$-Ai~DC2`e1tAWlU6$1ytpkjcWgG36a zkYspZ@@7}j&-Xm(A)%xoigw1f25@tXLP9;8HvV-bCVPF~|91EQnNLQ>MdHJq;zJZi zj+`AD^U$_{&6E@kbb}H{0>4(=Y)>MJ^0BrR^B#+^hLJn~Z=9WZ9@<~urSuF`VkRuw zi@EymMS#Ec^SfX3iZ$fQ8wvY+RXRL}OukF$kk5}q{?yvc(# zD>N5xcBJoU=)0^Dx-2fRdG?NfAqA4>%EvE)@1aFlfmO6sYQl;E6+Qd<6)|o^jL0rh z%opqdNO7k~e1J-vcs<*N7U^cqe~;)mgaJdU>tDW0XDv-MMXm2_m3wgCYPz^Kfk|Bz z*E()ht25|mZZpwaT>PqRi7dUav?=vT%J!o9$*%Gj(9^47Dhd;6L&;qCRd%j>O5E8i z0P~S?ZchCEbuokON3Y7$b)PLT6)x?whogaa^AgUHmcb$ya*KlJ^6r(A!SlI(K*D@{ zt>W9$pSDLlm3*#wbL>7g|1GD_r6UIp9t=7ElJ$(QQYLDdvo}xvX$S2nf_W2m;wT(m zRRO4i+emeDJjLx=-EuB>Kee=FKN^0-+1!5{&~FcBI1S25W~V|7F(G$j<An(H`&{#+~>B2}teMB?-*yUB9CvU&Q}% z+PlnoAy~J}mT4q9{Ew`~X*N1HyQ1;lc;@UI=r@EpQ8b*j|FFJ?HwIr$v z>+ovRq}?pkPC~z78l5ZF)F1B~=ucn8c8o7%S@jbw#mX1cISs07yE=N^NaMWzx&Nxu z>+^cdOX8a{p1m8zBjvL~E|WE%THa|`Mt|!MsOT#a9Jm4m8BOHCwcB!^ z+;iZVd~T6R7;q8V0pRtG97W$hD=Jd=Wf}Ru^4lR{V!@tJVMLWW*RZr$f4;RgxP`4r zAdWYD=JF$GDCyHo7u&T3*Gsj;g%dKjR73XxAvW^|g>%`#g;Gkl_)LML@A6_mLVn`f$G(Sai)(nhRQ?mogsa7;&!s6xx+Zb z#%dnEldn@2x8&NnHS2r+jj$^Cn`RsGjpd+<-ZOjP4*A0(I7!zHE`P^q6a;>Mmb@Ns z{2&!4Jh$2GONHqFc^$z)xj{!yubXw{YEm_=DkEwu@8j3afgEh2XMayiI=cMJU39Z@ zw3zCEt4S1c5ldFSPp!TJ*kH*$rjy(s%A@C5>cqnIJ@(5${Qd4IM&9ybw*hKBwRzZR zGAFzx!;^NRb?R7e?0`X4bG945OWF;OwbkM?2@b`Lc~PssxU73fS~Tmuv}b<#Q}Ufl zrCOQbzy8{D@uU4zk8A|LrNu^b`6REqzT@n=`WV{9K<;&c`a8wDzL0;dfo@t;Rv}Ts zU>d20?BYIoF2zrtOOqkfO9hT9lfSB zdqEn%iQ!r)!yGz-;W>3j$bhJR0GF}odrLMkwaee1pT3I*ssx{{4Vl!4_GvECb7AT8 zZ&LF%2NG;-2TSjMGe8wtJz&n7>g?xsA2+uJhQKcKonON{-E3_j7Z{*lU@o?GLu~m6 z!8=G&>%^h#cRC-}UV9qWGjErCTyeDd8e7lxymGPN;S*5UaXsPi-=pudOb-&dG=*{L zudRt_sJ5dpzvaZbFvvL7eU$xD`k!Ll{TawQU#Ek-NU)%4lF^yVAT=;vzg`}q=9WC| z^6T=+rBxa(B2o7d9i*+S*`lu0#I~)b+W@$F%59&pQPbT^k*OWp0{6VlgErx{`_>kL z(XptM4lT0vaL_Z@H3(&|LRh%l0!6Bfm6L09cMqN}cb_jW@R^BWYD34{?)=zQ5P}n& zX6MO|9O2NSX9)2)%1Yrqkh5lD*7GhEDDo6FJj>MJ;!K=&wztm_SyQkST*esu)S5xg zX_#UUu`muZ?zkwMgUb`AM6$+v`W%GipJ#fMXYamW9niS%Yd?@hY{; zO77V#(}gO&91)9ol;|?Tp1+X^jR?D-AddmYYKiAcxI(^t04zdU(r1VWMT*;dU@!eD;u)4f-c zg)s$_Y{lXhzs}KES^XA={oi7}wwTt^i=v^qeruq%LBbK?baaRa)W1yOBzW%w)Ye zPXyLNFlb`^HOslVU_m?Mle~BQMAl`bu@6DZ0q}9ezlyz%P!;di=w!OZF>j9O9@(ka z4HmtHOH{Q%w;2-ejaFGeQPT&!(Fg}>e~o7x9+(-GiRNn~BjP*N>(*tV;jJvaKb9dx zmI#-5bz3XT=;b|S@v~5I@cMbAS1=PaU!UzOG@4+E4bbrEkg!Kuee#;o8umX{WVDXy zQ^}QMqVe_g>Nq9nxw-FH+)Thc4oHK-XGO~P?|Mw^_1)fsC|@p2tKY*j@!x$oAng-G zBEdcn0p7%&&u{Z6mI3cz;au?5GQT$2!>xKIQO-5hhbXRm^WO6kv1Q(q3*UPY-guf< zRs+j|6J2G`i`TQtQ8|t|Zdhxu6|Z+^IYiEACi99f&P%;Jmbio|Z#*pwgo21nDAUhY zdKVurU3X7hKR0;UJuy<(!$GV$$UZ;JttQMMJ$L3H727#^u?Y4v_2HbYgFBxCWtEX@ zQdHX1{5Zj~(rEiBNmI=sIVapLJ&ROTC4{~Bvd5RBMs7WWv(+BU|M!>3rRYYWjPTH< z%@XS!JXYt*6$qO4-A&<*DzP5)EF8!|Q=FWzH#9Kuyx2*U5bItN@XXmGs8i6xZhhHI za1(n3LZa87nMZ$zOc`Ra3&#KwLhwm{`n4CdA(U0ha&IO1{V;2lPj+5^I7pQc^wE^| z$dMtd*giz9=)Bs-2_i`?P%G!sPaE!4D-_`8YAp6q;V$dnpFV3Mb)sdIvh{AH(o?aT zuB)M;$z{P~iZt^1Y0(s|>P-gFoOL|R4-cn|65he~t9>2Qz%3g1fmVnQ9+_xFzx%iU zmAFY%A2b?AEeC`qCz{M{ziUt6xm(M)WP%RTv0^>G_;k`5Zr#?$`?#d15w9of(%nWo=$Z&(|8WZ*m z*B=?~f$GtJ4i|C3yU#r+X87M_c61Jio1MnL2Px&VjCj8uDGb@W#q#f6{8Lc2@P+_y z+?lQ!M<7I33C?`uMfrv+dj@tA32`tm>*0(uoPEJ43r8sUmn7y6e$(4*jb}Kgk8Tth zSP7TY?jiUrv%tW%QdxQa$0PSE_nzvTqpvC>w~40GTy3H7TzNo$JA8N$@4}uDXdxqD zH<@>Ys#E9A$1iasNhpKE)y9tr+`Ve#>-Z;`P+O4XVsXxdWJK9MgG$2x`M_JI`(}d{ z{?7&&j&$4ACGu2#3(fX@XrS{=f&P3BbA{=yx5}^}TV5miotG59$%fcwmriGZ+ubOW z+@QPb<4BgM#SNwX0NoJDt9VHhVzh~d@0I+^Vh;Y#rzn{3-`eq98{XMEi|yCcr)OZG zbhM$@HW0~C;Eo+U7jCD|o;I#(JCq~ywZT&H$he6A_=Q<{$jY#6tZs=H?riVKg82Vg z=6!tEOpPw$f%9+lg;>HQ=#g;*?k@`z5US&3rp7H4vSs@C6M`sFtLd93#XX~<=Sq_z zmP$uwS0dbWt)tA}E5_dTb$+Wys=Xt=GzM^oBzJ?gMa0Z=rnLj21UHSco0%0Z<_1rX zvonK`UKM&BWew8w?%Y5r^nt%zXg?8*WU7!<2Mgu`MSmwijHOBIUSD8`RFMNV8;X7e z@Bi@j5Ch9)R4nGTF!kyFLh~>vQ%Y4Sn1602_)1{TV|o0>+Qj?V1OP0KDQ61wnm?E; z-%wJD7P|nEnLtf9YQp0J01}?&M#~LJK1#SgRN+IDv>5&v2;JKror5w)|3P8vjZvyX z(=vvD@Hs||9Tw_|s{JWhMgV3U0*SEoQjVrCp zCWZjF@CS^L;M&O%VvwPik4Ko{#NbyX_+9eG6c+|Wq@6Qy0tU4VTCS&%IWZtxBZzEe zKARre1YOsk>FhM00kA#oN0r=9om`lP?X3+^|7V;AdOA&F-IUgs7iKGyFH;OaZcITa zXO0fCt~S`kCaGh0e-_Ub4Za_3^gB{{_d7K1v+S{N{!x%kdZNkTczrAM5i zUtm}MtHkr7`RhZpLRX5gYC5exB%^NJ~rCK+c~P_&{GnIP05RQL;vAFh{g-IPW+kPzOK5I!%=Wwef<3z2`KX*} z{qv=oV4f$$60xBl46B%?zjp+)YEDDkWO~X;0>PqHK04Dq3mFtAm$8ZW(*S(gJg2GW z5IWe~k*ui+T{sxdcxBaF%k<1ipTdQhCFmX?f{yMWP(D34f2kGs7eDB8G49OO{J&T_ zDP+>20)&I#xp4^s_=C=?VV~t6B&`+CDZOf* zE1@(8z;OoBDB=6_Sovm@J#4&%`k-}L_pM5F4EFG25Bw(9Y!c9NRlJ$7hi|38dr3{8 zJ$*Vx>^RiT!J1V#YPvJwJLZ_ z$OMQ)U%mqGP(CcdHnGa0eU?dHJSoB@r6mfto7JWu!g;C#D3QHxxP+6||4}$9T*8Hg z5hYc!k6Q(`zN*4B)0fMZLli#8lfKaZ{WNQ16eH@!*z$1Bs%Xu)<|V_E z!Q1!LF$DX`s)2=>36PsA2{K2Ji0xor%>D;VC=ZD6HlvcPUTCJ?V^g|TqiK+Cb6A}q z91ym%*cf53-?H4W=}D3n8mt;AH$OWz^4?nk^ggYqV9(jFy8ZNjc1{HK`7B;gl8%b*4x5%4Ic=(YoUFlNaO4NiR1>^DEDmWapd` zalRgSMw~gnUqcd9PXCO%ll>;t8HZ6;y{IE4JSca0i3K2#`C8Ag)Eezm_6_OfW!^_Q z+zp@covDvt0>s?QSy5Lx0L_&)3Xe@jw0#DUuXr>zO|Lis@{GaaUY`Cy+^q;glNqpq zuj!`AQBeo6=dU`uTYG2WqSKv)tG;NXy7d8p3 zclJtxHiH};ZZ1g%5B1P*#%yuBx9-9}e8`w<|aY8L_!O%hLgSU^L23 zrJ_#BL51`>l!RB-aS0As^yVq9m-i?``RmZEl2lInC(ST$gbH6wG(v&hNVc;0G15t) zNFp*o1#oz5tb{;W3P1}>h~!a4S6A-wjnf)>@6bArzYXAC=yxhriWRVtT*rE;YozO2 zRs=M!Mm6TTy*S+xcUdYuZ~bcJo1)d$B;}B&R2*GPx0!G1mFs&|kM4JQZM8^omO6eJ`0UmXr=)Ia7}d-`;dy>Ql_WY=d!ce)rAjvw6BKpxC3OD4@gH zLX~`?Q@XzG#*9;SLQP1BnwjuhbnIgjNW3zHuqbAkzk5)MiQ#UEyG<}*){*A%gskPG zstNX#{WXHAXkiELbhjBB(&BQydERD+E>O*k*MK`d*)dgnm8T=mQn+|kSYc2|pH$k( zV?o-iJ1f*pm)K*QVsfNUM(T6rlX9zy@7JQG#;%dACD?^E&SEyhQgs?UJ+Llb!pb6R z3D2lkk~%*Ew5>*UtN_#T){q4$Tf>}9-{RCr$%qy9fd1al>6iP?hz#Y|@&Q331BXUC zV>DlE;mK8p(OOOmI&I}i6SeYK{6}+0{|h(I4MjeyzN5q06D~->%eB}wMcpUH@(>vJs2MI)RCQw1Ae}+$C zeRYQAd5lMgUBL7%k2B~kSjZ+pqb&coRtF?EfBG#cW*aMxKA9^Iv+UjBOgM#+UNFt@ z>=&YxurOgiX@0D;C2=lz34^Wyb8s{pEf#9c=RVagAIcV*h*Xn9rK*mWy3}*?&XiD~ zVeY;)k#bmU{@&ag^G*CFDDj6D%*x$wpPvxx)A%{l|Ne#BhqWcDp#7(vKX2(*h5>FZ z=)Y!$qzM%dj#)@!x{cESD#PV7roXtkG=O&}H2}b3)Wgt6BroX-U}YZ*im#0rx=d%v zaesdpFPeY6A+iqep6u!h(vv`^&wNdRaA1Mi84M97DDhSMjDiyCLd!=#U00?exuQc@ zLs)7MUXS+et$rW%QZ%0GWlhX{o2qg*Z&`=h*Zv}hrzzTnwHh_;v9Zb}i5z@bG?u9pgnCkq+%M*Aic?u^_ir;>x3$4jw z@@3{dC1cBpDVeLgxZ)G9_*1mxXxUMElZJ#RO{R+F7o|b!C)IcR>#+Lh8N-2h(g#@$ zD_V3EemM2CVHva6ZhY2KRTlund}y-TOYvtWWU4b8mzPqE_{DTQw`+t*PhIL-XB=CT z{}3`D^I&;SDT=N$oTOVZ)|yRP@zGKxM6i;}buSzlI>PPPCm?*9)DRkWg*kemXGNJ$ zi7TFVpFivJvxa4wYb*KI7fCL*{^Xe|`LG_oVuicL9(+O(DElXYwEdkfvne;rboJdc zlSyxx%d9`9u?lh+bGyn;1@M~o#coVpX$%Vs$^&rjNauNWv|2JVbpH!_ah&5)EVgyA zahyv9imlN)T^?JRlHJ_cu1~$}nyG;{14|OUe3m0$YbcpB1}gOgU6zICx@;ye9ay&? zgEUc8ouicWL*0z$>65QqqkYZ(#1wEuoF{*vkwH z%^e*x-Gey>W%Qb9Yz#x1;-;RbUdk>D1H{THvARLp=$GG-RX%XXg46VNwhonB$1HSt zK0}J*%?8s_FIlw7tgpDW>!S^J8S!+tJQ<@d%)cn2oT4<|Mz56bkbe5Q`q`m|1LS_U z>;(C5R~oQ^58>iHng7YPhiguT$LATajHmsuwOtu5{Gr{inS6GRXQ)dnTP&zpvAW%^ zw;0RcELR>A`PiFRcf43Vef8OO-y087%uJ{){wcn@8yMMTJ znR|@~on8F0KieYl7HPdu@3*H^i7kLSd-RkF=r%YJYKGM|=ss~)&tUuxe%z=cZ_k91 z-9}H%L(%d}J}ot>19neR_$_{<4bdXcn}XW;n~@R;3G%fAp4VuKn? z2-9OXN#nf=<{5NYwUq(G7t8nAEt*)stIYioY2MVr!6cI0K>qi{J+4+zF7Wc&>AcW5 z{x=zJSFSwVSbiscM%IAx5Cr0{8P&hZ)W>iblv&I=$dFKNmw(EEqwgVZ(RF<-mN;Z; zC6kc5pZ~cb%UN`+Mthp>1ecDw%Qq_a{?Pa6Xkiv*v4w(E+i4o_7*qVuhEUjw{gq>; zI!dbQa5I185R%jCCcg*85dBkWSOG)d4nX)d>B){Sz3*iFD%)%RK`)sO4l8fgeEbWA zae?&Hj@H{{2bV|wmwnwgGu)#EMQ`>KeXO@oLOp6)oeSem0b+w-(bzi)-uZez{I-}T zr~M2Yl(svZal&s}kIwzNFE#oeTK+iaYk=I=P%4X@jURBY>mTS|^O)0LihuBa6u5T6 zut`dGWGra&Wv#-+&MFEU$6{ULRyyh9HhO|AT3IH?xzwW-{U>*3?W8$k*5!4n(6VDG zFDYUwAI2&k(7wcU#A^FW>}#GUJ1?tyUF8b&!@er+XpN~dXT+%NsQWOIy{N<4wB)~$ z4Y5W1%&6$1fj%4?03AZ@vLCyCQD}FZ`hXI6s>C{BuMSA0>*Qj^5Ef{!k? zV_4Cl3s^`ZyoVy0O@AezyS)Y<-$C_!B%?9=v~$m)3-GHh4T{O-Juczi*1(1|UHJM! zL>++F%qw3}e_HN~`fM7)jFw01mrk>?G_4hVysDR~?SLLr0qYRFX}8ZLO`N5hSs&H< zTBfK|$4kei((lfexY%N%6H6P{+=fMT%oTY7B9Z3EZ`PLKlX@SroGOK*uXXyW2xgq2 z{ziAFBQoA1*W81-jgyJr3q7a_rHS}?vDz?yoCK-w%s@8-RID<=yJ1;$x=YOJ?KJ3Ksqpt8hwO8Cn{N7Tt(mV>uM3ldzbZzBF^ z)mz4Jo9cUuYez~rx5fB%okDejXA9jquCOt7ciU^#^YG`9=AL({+uEAUceV)&|v%?#|YJ3&1tpVV7~5?33=vx3 zbl-HEO5OOKAsycH2HT$DLNkN+vh|9~=nPVB4&}Q#I;pBVb!RE#Lp|(s8qODQHe9Tf z3b3j91Ft_BPd6sDzsN2hw2tTuCP%t>7Z5%jCp+!{YOoF%*lN4ck8mPI4P%{5t6GRdCD4MZ@6v zjR`HOMsUr(o7z3IF-x3g@Y;z^!5inkTU)E3$|~IS`VB^TL(VTGZ>}XVdrcud$L9{| z@hT_zkEmr=%J0^#Nx5xlde@+r>nTG4z!vm8{BBoUv@+EXFooqenTD4010EIArd|0E zx*E$is;Cz01-$8%%5B)w=CLP-YVry>_MlJpb%?#gP#Zm?8>I7omAYsIZbKU9vvaWY)6%IG@$<)r;kIN$C7!2bk$D}Jfa zqeLg4^8>{W_N&3@ZLj#&TjSY4uLXQ1qfi)2MQV+7Riik4#EPBJ+>bwxBrtj_RkCn3-Tcz$+^q*i>wy_5t_7&@}Seh^;i&79*{5APO&vZG4Z2cmr z+9o2MtSel?{Exlbk)roSl5nQ*E;J1TOXVn94vkSPhF+jDw<)Q&+}B8YInv6ZcTZlj zMrlzBU+DA7$_k6mS+~A;%^lM`lNqf%zQk`_ZyGLe+qcB{(|QMQyN4*hhX$|ntQMZO z)MnybiBwu$tO1bOu%pKu%Z;B;f_pz}L@Hq}peyy$C-0${SC6t}^l}6!+Zs^1T;^kX zYue~{{MvXD*74&v*<|tJ!^=z8b(@R#ixGzrJwg zK}rmssc2*uNfX3qUw@H$Tn)YA&Wjc~g%v9ZxR2Fq&Bjgc^b6j01J@969t;omlfJUz zEM)`&qQxSuIFhEr8XxE|=vet&=>L8c$^eJ-4VT2)dH_(yZ&MM%Dc_nY6Tr&~>Uh&Z{)0!CJ zNTbFGX>LsI(%{8+ir(wKQ3B3aZTp0;(9=f``=1#_45&ddkA%8|oHD(6GZceIG;vpx zE~pVnon;e}UZTZs@-Y&?0lk8bAYR~Cb(6+jJ4P3z1{*_6so;-VUU!%RD*6tU?uSN$ zT(`Rm@(|l4_}f!U=|P}3aOU;OG}qM1yyKE`EDlp2W0{=eI5!{_!Dl|^P+HCp^^h;A z+mmY;n4<)&`kcKK`>LRpn4$79nM3)`YVjNsIB&C9AID3-oQEV|rR*3#7-ZHyR$vkC z1{k8gtR6K&$4?FGmYaiLewzyH+KL*<7pihgZ?k16Me?;1$waJ1D z+BwTb(opqe)X-^Aw+S7GK;dR!KB=WKBI)Wm1!;4%B1Ur}^V%rX!*k&`q51BegI?*` z(4zCJ#`@adlO7voQ4KQ@`(;pd@b$!O1CT*^orq58qho-`~D8h z2JZV!x6*Y$K^2vV8$Q+~G_@rEK(Y8y^?gDG!A|zEGOzAD(VDYbsqgfQH7@9|3g-bO zMNIiap^1_~*D1wtZkMd(+5T%WJfS|r#RwBe%kmnt3N$P|dGSZ?FMZ?6U(~g8U6~>F z<6T_e9keqy!%brHhSs{X75%yl?IefREv9&8E&QPht~1}NU#?86Twf!cq>GT`==~yv z9`j`vVsR0@3SEri0inL-L_AZNDp~3|nedx{$1DqP7#a}P zZ19*M6quz%D@YQifq!sXED6srm3rpn{q_**u@rO3B%tofg!KN}7>!x~r$n`sn>Uyh z+&lZN3?V+CUe0s7)>Ees1fJs^^hNFWfD`FSQaw*By!$zSA&? z=t>3Bv%lu#KbBQ2*Z%269oVhoIyY8FWGQVgX+VNEdnVtaoBla9Uy$2eF`6hkdbQl5 zpN*8dE#DG~dpWS7oYvTtbUcD}=xw!>cr)`3Ur-DHFx+OLRR0yr>2$VE1FzEa8_PUS zw~93yA^_4^JObGVSrFX)Th2vm8s7RPrZ2V71CFKNpV4B}8?+&qmJTH*g&T`h(DG&M z8Q2B#WVAwzs!1g*P=8lmT$(*BNF;jPbcSMmGg{nBpH0(M0emHTgA`p>s9n#>7jaun z5n1~>42XwJ08O!~CROWL2L{-7hp5navygFtDj$Men=AG z5iC|_DcSa2YnBG4&HgId_g~e#9X|~nKEqY9FFm<%L!m{<{?)@X;TLX)?X>O7CKWAC z)4im3HIh7MEiL0%9Pc4ZHW7m&I*f8`Xoy$rYX#w-#M_y{xJ6$WdVnh-$&OQ`8 z^V&F=HQnjaudjh~g_xL7Jz=NXTJ>Zm<(LG`S4z_Y1-n>eeQv=yq_toVmK;8dik8f< z$CxNeAWRA>Nfugb4xJp~Mr{7~P_`R+mT*9M+in(X zD0Y{+<&zF+IL}{JrQ}th=DT+^V{$Uihd`QrpMhJy!{SJYvfOb>68HJHPY|X#eN}&J zzm6&TCFV4erXKy|osN_nQUD;W)0j@Z{?>P-{-x@2?EVzJ;_n)6+Y^`z`gpf_q1o&6 zK0D=;AN5O%j$ZT`fe?JHviKHbouY&`yS6yAxttx!;r=pD%1ozUqh^?DjQ>XarOW28 z1?F=e(ukw(eGF1XE0+18LD1#ekI3!)o7}E)uku6GB3=7lOciXz0{g);TAm(_gf!Ls zn4^4OMj@)lKyAx${fBFJF*g6iu{b^ExR2=m7vh_@VxG3Bw5pwNj4k($#})8 zF)N35WdKGr(KI{HGFd~KPg|zVKTizx{7TaUaVQ%y5b8AG*-LGvK6#N+r88p+&oCiv zM%X?GB<$418AkxIxKuohU(sC}YiL;SXVA&F;Ef$MOQN?M~Di?DNQ{M_(eG zWATaAKs`6@^z?LJu3Z=qZ)l$O966Hi$Xm}73iXL@(MwXkA}&jE5MCU4OheMc*0Amo z#5vf$Sh#jd4+40zZj2ya#PdGf5pyFvc>Go2(in2`1E&HW(r&0##FtTOw%rYJDx(i; z@Zg9kr+e9*6*1X3cI_bZj}$07yLK3(w9RnCq)|Ta)XQK&H;tMoc5L}&vj(MDVWt~e zXF{uem3Q3E6BG0rm%X3rOg4|1JHEKcp3eA|g#(94m!R81Ktx{VlTKFw?~-+YSJ3GJ z0w9Syh|byN{!7rw;!gmm@LYb_dVa-h-i)xX7%FwRAL8T7Ub(Rz?bsr-+|fzqWhk~I z*b$u{9HbU&lPds3b@sJO-XG4YkczI(?c7U&61pGrLzUb{)wjA$E84V)wekh+Fx}p% z9>YtW5ONxw$sY_xBH`)}SC*gl>jy)PpiAzv-v?a`zJ8S;Q(Ft$svPF8A@0aWdPi)% zD?W*S$$XZi$yKRW!DCLe8I@+3Se0#5!**Eg<`<3T)s&bNOV`zL4(*eg{He@aeRj_k z1r~R*?e>dXzP35_x!ii9x25^W35Os{>N^>Rvl7Q?{r#QqpH>jzaqz0}?l-E}i-L;p@ICG~R8@&FkIx>g-?&sEWcE@pAg-yoG`DxorMfsLhj&I^$Z*4hEXQM` zWM;#206XL3KA7&4o~Bzv<9+%R^>?aRugASDW1k*ZO-awWl{#aqk8Jg9hbS;Rgv^h( zCsTZV)uDBgO>Mv{=}dfle1YfIMhYq?BEEy>^y!Mxmq&=x(~_lKKa5SNzE?KMd5k$I zk$h|#<#_GMy`8e4<^a9=Ogr0cQrY|1pWhC;8noq=xX;rG2@Bhl1BGcx6yq1Shh2*)o;6P^iHH(4yEnUm?&@Xv+pyiYW^$!#ZE z@LX+#dwb38q`$*Kf8K*n%d2j$D~QmfJQ#8WV%FqOa!+F8%fIFrD5g@i^R}S$?pCi% z`qm8|^2(r`?V&nlDZeh~;Ze1sc;ao-;RE~dC#)9)3C~I3kzDu2KN^Q3WYhP?8z&JY zJmH-dM9|QmfcpE#b29K3-!}sO|MR)OUy*n$A-F$oKRPySb>Q+d8G;X?_B$FIU*$i^&(Cj?lbnQBz1=UIon3S!KQWPs;a8+s`l;AtiTeVlI(+Jr zzF(aV{(keAMkBvkmjLzi$$3Y*COXn=H^zN44g7lh^-R9;oj5eMg3evs+!Wc?)t0pMdoPJZcyjGs$r28u*m=1WLB zDi{^mpG9aN*0my#mG2p#>U22QlfpO3j7NNphV|xa|Dv$KFH~Ixnco-kssp$LV-MGm z(mXj_{v4|u(^q@VM(@v-AWQu!5k=5+*X3rm6I3r*P;$J*?aK#UJfb*uY?mFH6}OG> z9Sr{HDQ^unRSH)tYwI0@OA^B30lFdhq3q-@uUl~$=06-ItvqLZtkI(uzccOmZChIv z?Md;KV9$94Pjxnx@BQ;h-F=AJd)0~VTgP8Y}B$~Hpgt2 zPyRm~vcmmwGts%daW78KNNPIemlljyZE;%VcvJ1w{d?M|Dnf76s3AEcEKEaj06xKJV)Q6PM+vba*iax z?`WcI`tg8ci60Ko)4h8~r${*Ad+g}GgYl9Ol$)G2zW>G@?*jFQR9EQ&?^z+V!*N!sy z-p7)MPVNPX`pM&M?eLC|mS21EsND{-YEXe<^3i29R3-bW;za*@?{Qc|a59$nkx;RnSp5;b%b6&aqc-;yzP>kVZyDEbpNYagnA= zCyZOFEwYWqjq%S<5+X=#XqEcG+l^ojOAH_VJ9D3h2qjO3eBGnnI6#Sg5GA-q9+rlC zDQfR3MGQHj|cdrKf;j^GANU(D{ZP2fF!tRDMb$fVUJi z4vZ{HD9k%*SDfNH819t!1Pf369V%>>Uoh<5xywAbfHlq=^)`SQhNnM8JRVev-@KNF z>&;0g0?(=(mf`%f9LSe~^1&I!q^^wJ!;Sy%99f{2)Nyh0p$(K&R{F_m;=X8u%w{$W z+EV=4C-{=j3BZa4;t5IZ3c>t`Q-(MFf_?2|;g(G}5}?EaR- z0J0xWoiXgY0oT7zY7{fHC^KWHc)JF#+tZ2UYa%R6fi55Oo=zlONU8QP;VtLgYxrm2 z0An+ylD;DjE>qW3T{~|3_p!hf1vs^LyY47_HVIV3#;!U4y*!^040UuC#gUl(c;g2M zT5<4a30<&G1CvMZWZ~BD0NoFA*e5cr14%x(z5DwU-M+Y`YDIYei}RPDF!#^ZCP(h9 z_x}NmgjHYt@q_Tsr~WQENP$CefUC&GBcv$31C#g+akCSEI;osiO}{nVub{G!k}wK- zuDVVa7#SN2y?iFP`;UJ{aYcfTl~tDH*m?5Rn2?m6m;O7UtkWrlQ&7({yD5Nc#7mb6 zCyS-S)s}bnw8?4l-V?>Wc%LZi>U!0l{KOvV^ZQKDjp4Jh)~L|&@=hKEg!O3=ij6!Qw=+gA_!zQi3e+)sDdg2cVVYGOGJx-hW9 z(+P!h$k0hAa9u;_Y>=ThYTGjH8M-JkbeMC&903ZDAA@WpF+5Y%l!v zKgmr_>GSH95o=Hc^~+3XQu>hBDH;TO^cfS}DgCe8nYMD;o|4FS3_nIt_O4eSpAwHb zPJ7_$?pOaAy;tu+!vD1l-f*DG4EF|NNBO|$_ zl?YsR9`~-#C-G%vWrL$qpbqQXr}Zd{(!g&}@o;?7^E)GIX1`x0ZckhgZh;tWD-Ik< z0x~N`ax~uf#Uo9me^>X9fCI6Kk0`z$KPlj!cNdxd9!8%xh$KHLN`Sj<@ZnSN;lSZ< zhP!&K;NI>D0(gTdz>@&KshQv8%HK!fVZan|ob9>DgZtG!^80D9GMF?{o`3NvRF}f` z^wB&n{U5oKDE0S?J_3k>t9n}1wp)kOA=DX$SJ9twgTeiDgB-p=ICAR={FicKm*GW$ z6gttTb9C;Z!+43jjyJ9YX_u{@UjF~0HxAW8i2{)g49Qcz?85X9owGRDl&vN;} zu%sRiU-~=zT_U0YhBfo~EMhMW7_rU&x?Y`Ax1K-1iuf&Xrg6_0sm7c6uiGxJuSC zE|QB=fj{=au#|2RrVGMM@pm^3jX~&F-iO6L-7Us^$l)aJl~%hZ0!2_gK6O{%pQjbC zaKhydSXx5H%ZK(f{{82y|6HD5$nu7rTPFnxIT&>Ww+2yA@7PmlURjTOI^cZ^;V?uO z^VQ=j)c&j#$Tfs&!p`~xLca1O`V|@OSwE3(y{9-&tL~ZLzb@yWVO_Zl-#8ldfEKt{ zGVbKyz9(Y@tLR@+q`QY%=n5h;5{xGH`fUH1jGu{-F=vqI+rdl;E9C#4V;>R3;Zf!k zr`l79e-=(6*^$83-Shr4$)A#7g%N;-mqS4Hh!tmTeMLBY>c>ywD&gQ8|C}}6@7K>G z%gcFV8CY)u%LEy4LR~-;USZeyI2`wMF!b!;FbF$YzS%>C^IMrp%)%cr0~Zm(A+kNB zH(xX1kP7IFB;gzsIFJ9joPUPp2f|_e9Nm85eLxkohx4WyR*}-hp>PksiQg;uxJ*q8 z=Rbt9HznLF;oHYb#$cugcQ+_@L3&5U=zDVP(W;V&<4Aw%{qA}HISyYRfy{yy7RWy& zsyJos7Y^@#)68>m_xt}n>))5>2eP~d@5X`YiPppJD$cq4wsv!69JiUa?Wm%lGwZz?i=sd>? zAAcE~Xz=$i|Jgto8w>asjumXq4L+zGsso(3Yq*H?lNTx7)ZNp@?jh30@``}czf_pt zL3j_DE;NQF(>ArF|59P(RPY|!0tMusa|*kt&HiO0{Cn2Fg~RXg!n;9u*>b~4oE`XYQT|V<|3~`S zB0&V~8|i*^gUw~PE8+ye3;fjx@* z&vD>DWY+y~+niGSG$bpM?7pEyN1ynBm6x*Wnfe{e;@U4QT|V<|3~_b z=)>mCl2#5tRdYs2%h|ur`nM_j&&&BoW}QPqKKQm7QlKj|o~_~*#viebUTTJ!@0J5T zGKc{Ud~!txq1S>m*%`6(x#pd(q1{>0nc9Ul=%m90yxzQ)Kyu20iE*a}|xH$+jWL+y8>79G-x|iK}(n$xMhMtKcK)DCMEF*)%%Qd z$z3v~1f^rGXW~RFhEXdu8c&x%ep1r+&@&K&sRTuek%@i2gh+1vpfJNBb@RAs4N30F zrUQh@r}qi4li~S1)tjU|h_{8oazXtx@Vsr+iG7`j&L{}m<$VRw8mT}wc`f>gR+9SE z!fBr;hXfk6+&i)@3_)k<)Xs>1K5cz#Ass;``6O%~4{3mBsgxZg?1(iR>`3ijPlgG> z0Yn0qCP$RpaNrJT)?gGphYBDAnTw+BzU!;lRPRTWtsH^{o}v50z}bE+vq@`Dbn2lI9ZJ> z1+RdGV+-b%1)Hwk&Lx5RS(rbf(~HO^Hp+7I;r)7~UHEo1)fTl7laiMM?X{sZ6k<;I zGK;!??aTo(=(!P*+!x!a5BUR6cX9t6a|2$AyV_bZE&DGMJ9NY8TJiCDn`YOPRjV>lj+~2i_Q9`0V ze^?l1U^qbBtung<+<4#nF`THereu*d6u=#}CP`yCZ?A{T(73k+Mh7e$-@~5&NKvACE(W-Nb;f)cAvb zc%El~@l?uW$XZqd&fNp&Z$~vHsn?-%;{E2M@k=nIgtLA^PjDT7|I|kZCzV>u^gl*# zo{l@j{TTRUblesV8+MNahVKMu3esY>A$lO?t{{~Y>XANEx1%_{sO3;&NuZPoZa z#@o&Q8RX{7p!G+acnaWIdFL=nx3=320%8?#t(A=kUoaz{CE0$7n!8M|eH140 zcxMppA(J^hs@vuZC@zw=QM>XJM40AGhq3nlhVZdiAuMUVGYzjryNcV=Fgv0yg81&< zPLL^nC7wC|8vnHRLaGzY3$vMEa02M1I|z=c%&D9EZdOKW7L0bY-AbLQpQ;MtG)_^J z7|QPgQylPHb{ubA2F=(|moCv&;69fII_Da6T+j!;`eghns9qZ0t##&h1x=5Xt2srw zDZu@UDD=w3PQx?5bo#n7wZ+XMhf-$`;%bA~{$tVQwlfhbiO<|$g&*@ON!5;TC?WLz z<*Xm6OLpVMRd|O*hFO5ft(P23B@%^AI!E|yd(zeVxIIZ0(zAgT@ZEVs7 z`%<5dLuFV&D{*W6v z0+YqXyiJKgulWJ-4${eiFlXVSa+yiYt?&txNW1qZzTL?sH}LWjto~tsCY%k|5~a1|#g>DerbH&oVWC%TEch zjC7rT#Cgaf=Q|;s{yRqYEJR{a&m_73800{WKU3{u%kH%M7p-!?lhe-6y+wd-v7kI| z^W!5$B%NJXX*_VvCz?DI_{t?B(nUvPFNOzo&~tQ7c0J%0PVkvE-4+|2$#Z$H%6ZjX zN`sTRz)DeM?zvpJV6(TeItYNfNp(B+QXwv*4G-{hS#Z!IzPQI1yvRe$>KGQZfpU>^ zA*qanV#-WvG2Eg1OiC(t{#C@lJ5ztHR#tGm+x)ZMWEa=yJh%-Sbvwk&TTUuJLM6F$ zd^d7oVqh9?O^u{@Wd5)V+n$x(z}M_z-cy8r%N!nA%(Yu+thA^_mK&=A{4O^KzIErQ zwPthracgE*Yk8qNS5_yf#e0Al&`5-jXbrTxzQ*+}#5Y&jQ9EPI>V8j)#C3i}7^*NY z@Skdpw{3`=p+#>~#^|tLo2n0>T+MN_9>k<_L>fuQL3g<+`YGd;W=X2*`?gD5jF8jQUvIi_|;RD(Z=_GaYPiDFu5BIRj#jnDl31+yRT>LSCt&c~TIpBu-& z2g&tIoYy--m(NUqN_0P>I(p*T8}Fer7^2$WSBr>b6;iTgejn$ZP*-3#7AM4a+aa;F zpZsx}kMJufWG8zBlGZa^Z;>emR5lV$AhDXFBnVDjXzlAWKxkr2t@vl@uVi(QO~-%# z23PaTtJC~FuB-qx3;=~g=_^<6o9xi!oL%a$q0DU`G;200NCnUDqQc$6@dXK(5(YrN zO>z18Nk0^wW?AF8@gVn=dye?gHvL30b30>9SQyMyokZiPsi@!wEuc{0M8qKK&W#J% zqPAlqFm5OcP5CZxPS|fOH{TL4lK8Y z9r9?I%(x$g&<246k|ODoo*{j6(ab~Kndx}l%p!k+f}1pGAk@g>!5>CKM>4edn>El47{WOR zegslwzOP{hEB)Lb3xIeCWH0=>Iwzu2t^tz$XLgk-BMFr_4A*MFB;WCQ2H>!f1PPyK zhPNEzPHsoTELYlVxv=vMWqazhS4T%%eytwhyJLap=&jRf0Loq2VNw52#7LjHvE#@In$h2e00zF64e# zhsqxjEqFU^3s$W)Xo!yiq>B(xG@zaH}Kc}h@S1! zXvNNO5XL;|tfLUBrr%OoNwByIc_LI@t52`<3IvXHR8{7NHeKVnz0@E}=9nGSD9`$v z4h7WGX?{iCZ)pExQ&o^qCEE zKN&F_>U~763U`VbqM(jQl3ejUWO}h~Ts|7)SglDJ6}{?~dIGaJvhHV$)#yHS0M(wx z_-m|RTtU{tW;}1OJ#Jv+Oq|^gULp)_ymmphTp?@VUv<#UB6q z78S29UVs%EElZc6gZk7D17)h z7#gdS;wqpV5d(|*mS+;8{aD}tODP5Y8h@yOC;*n51L9AIv7E>-;4C?XomH~6JYQNW zfRTs-W`u1iMvzpTnE@u}5SV-@MYKxm$3xXdR)Hs~X5}oXDB&dzi{Xup9m2k3nT6ga zj~YAUGB?1>-)Nz{i1W_zXuZ`d#Z|h}x=<+sRIkigB>&MP2kKtKt=- z&n@CfY8owORjb*MU-NYeLgsh28eCQkXbNiFZ{m25I=l!Q{Q_|QP2S;SS8NBWe~Dig zHkk_!hS`ovq?Cb>mAdG{H_`_2y!&QZBo3B2VJ(O2ky%C1*EHui$Zz=^E^lcgqqinm zli-wdecKfBjS!i7u<2aidrL1LM)!3GX|2ZgJLYAy;23g=QGI~R3q?Exvp>k~WnzdZXFa~3 znRPP*3;LW5Dvm8zCjqT4|H)+erD%!{7KO|i+lwsr1vb9Zm&BJ2ET$H(!juoMzx(Q9 znYUBc%}ifItKs2c9;>{Aba<0S*^CUbV;K&Otn@7)&U;E(w z#vMeIY)^oP3k0E~P^SXjP;#%VSMxxsQa%2dyXbo53vR1JWq!;PW{G+lR2=3z@^63t z05(q7kd|@(R*ppn+jbfz-gDg8*#KNvSOg+k!vjPu%JQ0=hCNP$;VA=o6yj@en<*8$ zp%=jo$wvaY)}6Ve5=TbKRz~8P3vzlF@`9cLBR+`(nZ1 zMGEnW_AFV!J3}naJ?3;KR9M^!%p!Yz^wl{*tFCVMHMG8e z*W5d1;!V*B1SOuAke=`Rpkx0rl79GrD03S4h>>!Iw}!q6t9Hmzv{E?f(dI^q#o0iWwK)dLL)xaH++t_tQZaf z4@3%xVoAb0t3t)Mzu?Ws7uw9=*9>g|186+>k)(xBjiangyRI{$sP?$1x%cT63~aC`?uzFb+G6!k&j4NOa#j zNlX-czaAeotroKidac_RK7OXm?uE+eB6zJ!oMK52v{zbn#hkk#`!?pdK+lD0QrUOv zdRkQ77lp9%dY=~{2azWmg~6a#K9!;e2h(OC!nMa}KV{&vF*&d*5fT!@CY<_u0?e*Q zOEMm>aN7QRalo2$(_9NjOI(uH!0Mm&WPjrj{=+e#Y2SVez`1s#!RD`EoO5mYxgO5`S*Yr=B;M@ zw^g(Mijxxm>&^H7kU#$q`Lhu{{jsaJ-t7GU75Vc+fGGS~$O*X21D-w8Td8<1hx<)R z>+ks3-$)k{IXhB>POdOZww-$?g(P)>K23Np2}$d6sR%EAOX-$J`DMn=ZQ=F$N4*Ny<*{P};y zn?nw_jyGrdGv3^29dCZ57p!H6`MBUQqHrOxS_0fq>LhIFqpS$6EpX9GlJ65B;;xnx zupf2&cQ8AYm;C!;V$$lo5S)W;&tU|{*+^(;i~oRdRv|2_PiD)SJCi5?fysF%CAgFi zi0rsRfGH6Q8xIr2SAQ-Z1+p={$Y0(3fg%Y6tQfO>V~0FHLVZ8{ym>{?-{$qVCBS?T z0`&(=93DQ<;Pr1P>D_<>BQvmGDpNX&tdnLile^hZ#C7}S~uM*~kwQUGy-lFebl_t6884kP)ce8QGMKrGA-Hd@Ce zK)(ey`S%~4SAzMby~o5--hx$!4kI@AArzP~E0 zk6NI2Cln30qR#&a2KqBj?(gNk4ahqaNiNAgHh3?a>{-H-?{)_#+-p_ya?6C-M+8GM z+Ujv&vr(<@(of|3`*l(vQ!E#4LkO!y4Db)?hmWohegi*wJb;g;q1O4+JAJ$gAG2#J zS^zwuiP>3#pYr$uTOx$M_mX+tZ6bDk9xzauwCeZ%G`QlV3~$Ax;Q-JngV%X-g!AD6 zVfXfrzcbN-ht1r+ott2cgr9CA2)FwS4TpgLkvHoAp)~n^7?vu$=wda^-@)YHpAm)t zRURdM2qV11`cIyP$iRSKGN=g&r`H26Zhc|I#o?Vu|A$o?f$4gA{ZC^SS-CUN&R~@I zX+jO){#Wf!2$ipI2+g{J?%{zgb9f5-%0Z#V4%b3f;||R>ax^vjpVr?Sp>e!ZkSiES zbVrMeK9F$PKSTr&x6C=g`X7xEe*+b>h0ZM5LI2hi_0;ah0>w!Gx@S?D3xvAq=eE(1b%exGMA_<+?)Noq=Ks1t{^i6& zQ@x)nyeWEX=2|in1zMA@ed%pq!KT%P3tHrVbm22unWzpuXE~eO$7$XifaEaxkt;u- z>@ZzX#@xYOqaTuPi0~ybEq_=9B4~;E@h(n8Z5b)Q)rv0P%KPEN`9a`PIeM%ctJ!o_ zBGx#<>1|SEI52ZSx_V>W?~8&^O_o@&qTAPET|oFBgQAgtz%lM8{VG3wSDC8(H&IT$bv3u9ubdrqt)FXX;*+G08@3sTZ~TWDcmZTQwf>Pg^GX+ zk<5>1!_Kqgal2Ywj(nYAMx;n`8>a=6Sf@m|dXpBZrs3B&;bh%&%q#^=gRU~Rf@LEXMsBY0=qNRC>dimO4 zTsmPmd{G_o*Nwp*?_ZG6Tt^{@^9nKhXEs?;4D7JfNF)D-LIAVX_frqYBpU&9y%JVN4X5lB+bSy2u*7sg7m>)ym=MZ7Ix9|hs zLnECUfdzC6R|?Ze3s#K{_!DtS8no$(`BIBQ|aR46LFPiqpyS*mEIRQW~<|_ZB+A$ zOEpP##=$JOH_~k>q0_;N8CNvKigm`<+6ez81RLw{;5L^1?n=b%NH0-8Z{>`)@|PwW zxHNN|XkPT1ql<@^6(kk_s8jO}vs?nrwF)TYvut-?Y0g@HU4)Kx!84__mWWo2;fFzT z{F2u+w$A>4sG? z4yh45KZc(n-Ofl0!p46Dd^@1u^iQ)95ABaSOAy}l&_~?2z3Iy>0rL6lEZ3lGs5Ram zn_<#FXsSkLjF=UQ7H^R7um*-W0TG-#u~wLGqz%tfIVoeZNR0 zj_b5Ey_0cNb7C06NQi&a>sH$~4%Q`2Sl`S~`n*iAz9nZ*Zk!?yR%Cr`G+yr8_!V+J zYOyqs){i$wj$OTD8T=7j+&N2IWvlDv6aX|gY%qPb{PUbe=W#~COg|H%d^?=l+r$Yd zaLF&Upz86)qXkR&cN(%=U6l7KvJRK@%MBO14FzYeq}9Gx__8tsXC{^F@mH z{vmqzlKF0oJwN@HcCfEV^gE?^0sg=!-aFzTMch?R@dtZh(sVYyDPE^0`eJ^8^!bPf z(`beYko^u^NhKG?|1>deiobULRG{d_ZK;I-FjIXt77F0Va9gBBmjn61TRV@X^^5A**Fm?_l*HD#@Vh*}23?$A zMS5NFZNApYXth^!SDv!7VKLb>nwal@+Mn(T0N3JS_~ioS;gj?i(aOlsc4Bkf_d z3tlE~x<6Lx*^#{<<_Zj8&wJd(j?!`JoCGN2{GG~f=p!=wstiZxxCMp6;oZH>!wubXpP_i zw?Xy&3sk>DuHJORiR?*9i?eu*9+`)Ru#c~5ik3je0Ml(9ZiMLy0o_&S1BSy%M{><2 zK{Q_{-|k&vgH?B?v|6eL&U#{anXkaE)nyWHH9iH;PG%JGy!TuLD$l0bopy4{;Uq~t zz!?2pXKGI6eY+c=cC5=5UClA8jUWt>JB^x2*u?F;_4j-9M$1kImX4Q%C$uKn3c4;> zDf2BH!JX|aD!Yq2vE1^ykR8ELEkdWg27jsH&E<@VpYD?2?j}24t9$ie>WbEku@5*@ zl8?t-Z(hylC?u^Hz$)^2U?$AFK+};6--*t-lP*fi>>Qt(C8O*wkIyt1b|G!6q)d;6mK$6cFy{O_GeoWS*Le`!mrlg%k*?%~{?IjpB!jnr14hEDy>>b9z;LSL5^B|LjSV~?g5P5WrjhTm#VY>ug6v@r0RaIC{&XUP~H_>U=G!R19`CyBomJ*eu^; ztGJ8lWKNg8OK=8|HgeJ6(dE5G&8P9@##f}FVEPA1E2EvI&zeRxoO%seHyDmC|_jyu|S`LN$$!!B{f zEK%0M!qxnf8UXIvkuq^@#dVsxXQF2f+xbJ)DO-I)v=QJdev1XgFU71Po-nNxQj~Qp z^Tj*M_I~EE={q~0;?L|A9(cbi5^evyI$Wr=7mN0pBMsip?0B_3+njz{Ym`>PNfDra zHxG#3%3ajE-=zo@`ebH1Va`vt^%IY7ghPC%>(uw`fp+9OXYNd^o|2yr4L?5_ zenVH?|%2s1fTzqkhmuK{MOZ z7K}2K-zs>1tX&4zVqq}pf0(Ikl>W7AqAlf{gKmT>qm%)xD09IRV$s|L--YtTd+dDQoNfyLPd%WbRwR zTqPZ6a$1iF+qSoKoJlHqTE0vx>Tq2heN4|CpqkX`80Ogflu9nP9fk)&D-#(mYOa2= z;VjJjuuayuCSt6id*yOe$+_jQt0bE9c>*G*G}1q+NH?F0j&S;{GVVJ2u1qU#AE%lY zXs)c?HDzG3>@EyRm~a0~`La2iL(S~Qq8$zew1_v!UTv3&Q-}b~1)_Y{MS7(Idq!O6 zK!6!pgxKPOzDDkCPb8Xls-ToCu%TnVMJTc*!Vp@<@#{RZgePV~t+hWS?A+ta_%10lkIW z6Gh8RwBGiSf%hL2+!;R#=m37=)`6N=veultll01+CW=^dy1GBGnv5lp%yw8|4as63 zNX?lw8+`aEEuf}l$1GGZSkmnd6ba9*xt|6h?MMjb%*bv88Vo!MQRBl+TyAX^BEqQF zTUj~={xl46z_rLHYUmAfspVRam@6MGrn@S7Q?-pslE^t#wO^C-p?VIH$XI= zjE;0i(ye3K1@?iqm_(ee#+6i!<;Q=C$o}Ov>A5&{FV%@`Nn}s5vfp@@0i@7M6HB;Q zjW0$6D`F+iG~vS5joz79cY`;2z2ZG_3`RQHqi1aeT;qj&M)_fo_8QH{4sY2-#@@}#%sta2~-#xdr62#G9*)~Oz~ssEhk@X&ok;PY12900{sZbabVYpLFMxrg-7<$H2+({yb=XoTdomD2 zuB_;oC^YA|Y%W1nW#)m`;#^qxF3B8vqhP!>D!DcXLc68LEI=I148nc%{D%ZON#O!7C8ZqD9X7WXRVeuj~x zq$vCprWjcL;_nQ3%0u!zu~madNz<8XcP;MNN;H_`sl^pv@m|wO=P+}bh!mXTbE-}B zPS!k6QjhZNEI{G(p+yclHGvlth4oa|EO7z*%~adndY|TL+?}ryU9P6Y&GQrmVwNjf zTVA7G+CacBxhD-7E$K^oln~IFetD>FfQ5Eyhgbp5*EcPEO|0kJ^JVaWL zvRE<1F*!|FylzZycAt#XwgI-RN?X7PPn^S3;PcDC#WP0Z?xDYQ^o|~s9K|9{+?{2S|Nm@T|+_(c* zMpcu{EO6;2&iH`oZmrf&1+UOYKSwLBTlD)#BBbw3VFS9ucTXODK_K+m{TEzidU`Rm z>n}wb8s+*BIeKYMN^Of$PriN%g}s(UJ-9EQ(%>!aXTKK!L)9QIZBVOEdse4>mnysM zb(X!_!x^Xr;oFQY9hRW+6&I)3{5a{=NFFK#pZP^$X1@}r_A6XENf9Uu@t0)=j6)g7 zpwe6!K~7GaSUu>4DUhS2>Db)xx2l);j>C^#9H^V5)6;H zIAr^c1D~x{s;X&Ldsa8?c=LmdF&6smu3hf-;<@+e#u=BIPWyFR*iJ-cjA8E#8!II{ zTDJ;XTI|kZP6w8_U;sj+X{1-n5Qj6 zT}*yRq`~n{)r;f<^ddrSxd`N?}U>>w=iBJWw69eap=)% z*ywUot8wy*zzc06!FqfGnt0yW^~koUG3K?x^G3;?5Sq*%yFb^kN2!oS}fWZMmfIT2&E;dw>MP4uxaK_ zo(M2qiEK-rOt55Ed>cyHIPNJ$rMfmj>k zE%x>Lq1EcLlk}Y*%#2dj_m(O8JGVHFhceE)KrYwMmXsKeHMKLLLRqCHeqvf!^x*Sj z9q?DXUt3=8e~3P(}{`y*(N2$Y~8jAe1kl|0Ot=jh2+-BKlDR8p*Y)K{$F zIH2icB$n+P-_|frfBaTrp1b%WgB1JJKh>efxWS{Xc-+>&B3 zHfdu|Y-%x6D>P9~>&3)>c6Z4Ma+?SG`(!j(CN#TKD`S5nTYMMidYDsJ_blvhK zb-z3BDGwXl8`3H`W64tV|B%_NT$HGyA% zr4!7uluO2a-A?Mme9p|kOF5?tD7(`F1r-Z3C=jT7qjq({a{wxk8ip5P zbS2#och2w3IjioIz^Wb8g6Sy#c37hN3>Ahy-rY+j#WkdGY9N$pZ0=Jj4L<18RY}+J%Vc@f;y62ucEJ@k6u$WiP9zEc#1dt?^7;W&0Q5U}QcLGv6yHeojTTF+ zXO687KU>xrna^F}+{2gY_A@Hzqipc(Pq~I(PfLhN0ndIESNv0{J!j%Zw`|+fX2@mY z$)bcDMvg<$@#6Ahv3(Oa9PK0DF?dkVqDS1GKHBG@V}Q=Cju5F@I$W_MZ|KeAPVTd} z>c-s9l(e>cTkICx=waVQ`lj2|g!zvVG1euObrOmt9}pIm&Ns7L+Eq>$puTrI>Chu6 zveJRVU)W*RNH>&or&FBp!Z!&f`Wp{IX}O3j)ICyAS+Azy<~}XS?*NvaI>zyp4X7LBdG(8pFg9j1T!$I3EFYK%exz+ zUHFx=ngBRTbrC~^?y$(IN`oL06pkBZO}jBrnAjut>zuc>(U4Y z4w|_!7&639!bL?{Z)esT94)!_)RAmR+$(66LmWTUpskjQq6?<12kf0+r^DI`lftUb z*9pINHNHM|9dxtqjK81I2_g$!Z#7ok45O^-NdCIQoLb?Gc-PfW^m#>fW2@te`&6L-Xi8G{5 z7_rIvWwoTHxLoyJG<^o`8*Rcp$QBZ-u-i-j-rl@<47N~h`pFjBqA7$BAh-GPrC$Yg zn^tWH8B)%pLZ2zCmO7ZwccKdU-HQ^2T&6zJyYS|a`UsFkA=Q&z2j`#9;#zefL;Yc0 zlu8fM8hfZ-H)oK1f?H>@`D2#Vc&EVh?87}Nt>!H$fryBJjxqjHX(fPb1A~&(mT$eG zyPBk)#1R+imVYuUk!1Vc`gBfI5q_0K*`m$3%u*=QWnP2R75}PErjtvv^AwD4*ahE? z&?e5GD5XKBZo8amhudbD7Jtmt^@A=$fJ_i)s6PL>cy7SMUT;CsVY>LSMN9lz+<@4f zjVHnYc>z|UXlaBqgnvy$dAMUmShsGBvVLWW#=kaPD3r~9|1{h(Jk2KPaQdNkGM6>9 z<$>Aslc-FS!xE7U17~K>);)O+bvGBl@{>b~5ir(~t*>r&A$oxlCwdpo*oLK}l`%LjyO z+n{baWV*eAtt%D(BsDNtN!5RkUiXezAKnS3u2fGH<_|BkCMDX(oLinb7I!t-EqlmV zE{0QlIsY?EVadH-z!|hB_epl?xh=V?B{yfYsoVS94KOq@_jY*TmUE{wm{JX%ouJf?183YGIbm z`B}RTOvhk_$|RQ`Y-3nxaS<-yDsbnz(N`X4IPl~EQ*$qNdB?zV({iU2wuRYo2yebP zO_w|oviOYQzT3JZ@r*+5s!w#qPbtL9Cfd)~uHSh?0P=zms`!Kmp?v^Tus@JrT0Ujn z;~{GO!<%A1jP2lg^atb;)G+yFF-0)V<>x-HL;4xT*Dmrck$tp1OBsbatV|`bMESBU zJSCl@x!Y7V84L6WhCgCnjCHk%nmtTy3F5n4>JsVxPD@EyIm5#I!N4dvO1@E@rAgFM z3}Sh6A))JwL(zWHE}X|lunAv~d83Moih=qvX0(B7x!e0~GLprU7lYGAK|9ALj5PK$Z>k<#aV1T4$@ya4d1)#qLWJ;Ch@{#9OJHq4^r>b#m(QMSBAP{7 zV*FiS#bq?~xllh}4|nwF!r0fC`<`zJdZo#A&40bsTsiDrI|n_KnlnU<)%XMv-IY$E zrHN}N)QiG+Z#iaQg>L!Hqn4M{k9|0|gK-0scme7t)O%0rgaT%*HAugk5UD*wJTryr z5`nq~LFv;=&BC0gMx2IT?rpLcrOkeLbXFtf*c?>5X`hePzl&B$u*o|lWUs>eykN+S zMwo-u+^`DKjDiZu35a=~o2m7;TETQC+*6;tvG%umBJ_z+q>VW}Em}}Wx44*_g=>0t z6t^~R(xK*4pxR*<*{dw^0Ogq_U{jknh@z7}DDBxqq7-MTodBaaE@zb&RlO?bgS8*F zz-b`g3qnT4HK1y*>n6a0^g*DGEBj3O@x#>#;;I+!hhfACxy+|_>_{3$q&uN<82GkD z;1foC8b&*gBb8~tWRFa>O#9S*9i^1_Q?p5a%pK(QXUjQvhAxC%?&S@#*f0Gs<5H;< z4$>Lsh9f?7+`*6&y-e#hFz1?|=;0nG7QnVVqGhkleewB~PZJj^J0L*qwo~(n>YKxZ zKR(q3LLsUKG7T>~=N`=3v@EVD{z#2gfjkUMSf(tm;0I*C7}aP8McD1qB{u0w1+iaQ zzTJ!Cg^L5%@Ew{_#6wrdi`8|UG(KNfecCLQq{Oaq*p6yy?Z$zGBnKiCCs)s{d(m^( zp;d>OOX2{vkF4%0*e*7?S!4EIwkf@Qc%UdtTMHn&#nrT#BtcHpDKH z{^a%gLbrwQMbn^{(IV0)Rr#EYwagdQ+>5EJUz`~XsT0Q*k7cJ&-*w$P8kSOA6rrW{ z?oAWM1w%K9t#@8qV~M=poD1KPH3t=WtnLW|UEeO@&(S zt@`V&O|hHh2tLeBS4$;7vkcwuHiaBGW|6R)s&|W5vOD?%WVwTA{yK#;Sq(m$cjZ6b z#l-UwYwkDb=@!|}-kgGdns9_k#?G<8FO11W|~?wy(^KRdqdwW#3drW{;M|@vrYB z$i>c-3y+w0WwzTWbIvaJ1xl=SOcfXNJxLC_o%JE!64j+F5yLRaAiVGhie>GqkW4=N zUizSdoKp@HFoii=;=-Ic5b$e?wNb7sq<(|Lz?E4H5P$Q-Rs3?zFmzc;* zi`Lr0>@`8B>6iqAm3d98N9412zFb|5H@;E$m}%B5vxLXJ z01=w9IrqW5*2LswI#s(bGCv@eVpGPL#V_eRvL`|fMu{;vex&RfiN>1d-igU_+A?Kff!CG2_=GLNYm+_(w z%4e3rb;0Ne98p^8Dl45wQMM(c@`bk6m-9v3!Kt@Z(Gj8+ujX`IYkrECh^F|V?k!K1 zZFf?sb`WE#p1Cm?qv|QPd@G@BP_D>zv6|*D@?HD)Up?mPKC`o50rKMF+`;>ed-=u%JczLIE5+-1uPyD5wAH>>=3=;Nj zH(qTWOmuO>SBKad4OH9Lg|)7@8;s{o;EGakZaVlUYxq_d(Qpg5_cIH<5~NEu-Io|V zT3qUj#pZ;RbHc(7ncB5z*ev#|OT{G#{UyL|!93g(*RGaxi99Nc1D`h-#b&{MO}8RF)apHuvyzAxnv#-vA)l zHfi6?q1yM&tl6i~oho_7;BFj4cZ$j|QG(joZrZ!2l#lz7V_Nrjz;#7G!aQ4ptj0h`SMUi^5`Q^eiZd_or#QLHcCV9Hd^3B_)?yo@e}!t%xUI3Tg3~6cC6VHU92Fs-%fk zD}K=uDn9&KKGZ;08KWr{*)JdT&C%-9qMV7{56JP`CeETQq1+tlsK`083RRu{wTRKK z<#Qnd`uAOVC-i3+wNH!`DOs1WWz^<(FQHS#F3Ob2yID3wHp_}il_iR9t#P350Q(J$pKYL@R;cr-8lZ1d8O73O0+0IPUFPZTm zhriC&X*qEwp%Lmef%?4L!j%iF`603PG1CsMBiLOYE@-WPt^)3vp>=^ zbf%moaL4+S!_$4a@$AQ$%TS%W8bd?KVB`=;{|U|t^hPocCqkTuOa|15I4?L1cS^r{ zX;v@qYqi&I2P#$f)+%xiJ~F&f7+B)@izMXKB#5P7v3rcQ%)2b};uK>uAMX_+&xIXN z4)Uvk;x}8-PgnN`09Xpr$?4>P8@YODWOVhQ(RO4Je$8aCBm-AKdwP?3_Ntwh>EAZ+V#@%y1L`F9Emz5P_O|Umfm#LUboTm1Tx7M))ue zzOAEKBmIVXKr!_BKF@%^JWid!RiZb$9;8ePXzXDG@ye)<*>B56q`iyx6k#-|92pHd zP>|WV1^IXs`EU~JVTQk-ee>dpvv9y)T(gd~(g!`+0{iMi8?Rwm1qGk8S{2-JTzDmba?$(v0JRO0(MC|y(P4Ofd1WB{6b`2zAA~fEDxs5 zSlP5U0<0Y|2{xmVHF1zmGYLX|es?gd zU;p`wuPZ1>YEl@OeD}W`CzySs419Ie7MMPKz8`XVmR~$gwXs1PUyz9SFp>5}CK6Zy zn2C_zc!B3buoKDOXChd{;q8gGTWz+GjU7P@{@y|bG84hGWhMfLtl{r75rxOUH51K> z3EBJ94bB`nU`yB}!h%V8h^wgukE&+Nb-L8@tVy!1rpj3xKgGa+)4N4$!r+{^5n{T@ zbA4MT4Os+8bg0B9s;dG;T&4rP-XH(dQl6kMuc!#-$;-2j1l5+@z|Y+$9ugFxH6}Z3~PP-u1`9GO0)63JTfJD{AD+ze3FQfk874@QyRRW*ZOcSq%p|Tmx6p zMfl3_ST@@V4|#M4Msf=|3>@2j_u3zgh3)EFxs*NwV|D{qn3L3dih=&qf80}$_7m6X zKGlXbR3{^8-r46B|?550tysnje4p%MDJr%8kt^B|)}Mk$;Q zgee?2ypQOlfcfBlq{Be}qdLhQg6|Ybv70e4|LkoAZFyy70NCW4!$X%qc!@Savl@g( z=xKecHhlu(VNGtRs;b#+*y4A$H3G>)r`zA_?>7^yzF`dnm*UAwdpszR zH7_qV@SHhGy>zs%D+`c|Yc>#ORas`>>M&kquzj%kQ0;d2yt7k0>3zgcS42G)jFZ`Y zxAW#2*7}D?J^W>y9I7%l=^3<*?s_1Cb4rfwUKxdW-0sNN1c!(W;0nO2#WQvi_S#+iNX2(K@trOjeu~>nt`lu!cv$;cic@@qHxN& z)B1Zos7XJXZmfXkUPwjqFLCknZ)tm2@0A)Px)ZizXp0=rKhMMB1q=sHl<9J{Bw1NhK~Sax?4qORvA#BhNDAG*`VW`Ly}e+#$$%@5XplsG^k zcj7mmJ@C&KftTlSl_>l!@WKF(s_<_DFMmftGKj!S#TJ2=35XEpe;0U}LOCfyd&wmpu_{SHE?*#*5Cl+W2K6J?~eCTq>$*xGM!frX) zZ;+S&3m^I~4$7TLyLo{R{Q^rNA$&XD0J|j%eCRWqkMUJG*o{x#y*!&YW8F$Kkv%Li z1c8^5EdnnmXyK`NeiL}%MIQC@Z?ZP)0mlbeUTWFrKOy=I+#>LTD94R;{VwpL4G-1* zF9I*S3t%C?QuQKy=($_?(Eqse{ygwrCw>zvSpR}Y!LSraY%+ll-FFKgdI-|~3{-#N zLKyf(it>oP0UtWSmzi_uD*dI{bHzpaDd?HAUk~tyYZN! z%y9E&tjCO|za~ekK;Xq|i@=K#8$6ZaZvro-$fG{}P1a`JIUqubjKRkjLEwdbi@-}E zqCiscyTD5UJQVid1YYc6A>SSRj0hT8vu_qO`s2>C7{Yrg|BIlJG#FO+wmy>w@N}5X zf<`=upb=Z@Df|{n%STA;a{SMNMw55pjB+PmtOr4(?Vgha*{G;X;0R7NRMpjNzP82B zz;0~4oe3_j@gg!tj0n7J-y-nxN1xe<$l5UcCTm0d&oSBo%PV;D+BA@|DQppV`J*fM z_@mcfcMhYlkox>j5J98fErLdW+bgtiv0zo5clJA?6tw-PpwBNjl4Bebpc_K^|r`Qg?*zCyGtu*Ey z>>&*z@Itdi;N_1#GX{~h;r(6K=AUD(1dTSW21Y zemn>om2D9;`s2=f{^>GW|AI%sIo#RnAB_kaWo{NUDn|s3LJIRcw+I>?MKZ%T{~~C# z6FH-4loxE_>}>m>x#71x_W~3r{}Q(tKcOfE4&@U}nrq9QKegGBty`%SBJje52)r#uvicW`cfyH1aTppowuL8CwK z{GTqPjV}n!VdyA}BqC^JvPICS0#@-X2paKktRMW16e4JJ>0bnm5Hy{O9^Ksm_=-Ec za|nL>7$Ru&NXN}`3loG7a0TSQysfpxk^S>W{(r%ziy#6oB3lJs{^T?N9LB9X2c$lw z_b31nc$wZJ@bX7j{ztFB?i_B?gGCkSbs~aB4oZTAQ2x(5|HsQ{{R<*$XVT)nh@er! z7D1yxI8??UXtagy#{W3H{82z`k0T|*^~U4&(@`VKEXcsnP#Tn!`(Umy7)W5tY+vTi zWdY^BMyAQLQE05#fH=su*#e7>b1vM@X)q(H1Qf3xGdeD3fu;J|8Zuu`Mz6JdX7*;@ zT7T7xDgfhf=jG+WkQDyqV89Ud&Air2bx&6}U&}IIDqau|k$r+)QqEgvHhSF{=TlQ44FWI*-MA1f@D9eZtLiT-$O4hMY3P=ReaMb4K4jazit+&96t z980xba*igA?VCNBl4Y~^5D(rkPoQeDKaumEzm2%~a#eu;?2&;OeqwMb-r3cx$obvr z#THeU+0PseE$>v5Op09wj}87K=m`${2z_*~_BC`Ui(8sOz}&CD*h;Nh~Dkldw1y)6Eu|I$)B0q-**tMuV)8eKvz0+@Ae=T zjWIxUneTPQZEzb-Vp#-Rz-bf2)_0e*wRY9%Sh>NOP8)+ClhDgJhoynQr|#8Zo%cv% zKxX9B--zPB7Iu|wFpVEqUG6;0){^?d%H-ElB8i+PhSH9U{rYG<&n)<3SZ8HvFR!3s zkh}DIle(RUL3p*3aZlPd`{vh8m`(y%UaN(nR>$(9lvu~ABM-mOo&}qN{l3%r27#Jo zI|2~n{L`~l>y}nJCK}%rT$+*TaG$xQ=rQ#Su{;I&t=~cd6&mIb|%c!s;Uo%-%d_9YfqGp<`xs6=d;ZFpw`T zsvItYy=-tSJNRDtjsX9mhhn!O;)au3h5uOHuHWw(%H~Tj=P!y!eDQ$dKeS2v*Y(B0 ziZi`(@aDZ=A3?g~83b5x>Mt|Q6Q2dkdP(<*j_19-y&v>|-X{+J*)I{Q31m|wmiU7) zLjqqUjLD<5yIr45fi?71QxT1yVAxv+v;Ukq#f)2FEdE)f78YgdvpBX*k7X5 zacLqTkiv)CCj<#5RSmz^YTMl-kG?U$av!CC+y??sEvSFuUGD;0% z99}^ORq#n?z(@81nWE|bUe*C{m97Jch@F;GPhK6004DyQ^k?iI_2A{R%*uOEA`1SX z27YWS?5tVaK`I84WS1KLq*p1DvGG){{~6?;AO;Wjv@X*7(M-gyUm8r%hfqU&0mo)s zhvLTIF-Sn4{>dqpj0fNl`^j{ww^*lQd1y1uZ-S}~oyT6&i{(s^0N2BloOWL|>>ywK zy>$aaB#_CwhlP&W8P~m^W%^ChjeWn~kT7y63_O2h)31*JOZQ+K-yRSLu`7#YqB$6~ zlH|HRB|kVR;x~H+B61R#MZP3pW<5s|Zgw8IzQ?lu)pNy}q8j#VGF5(H6I!2(LrprG zja9HiD9yAT2j+v%UtR#~(ga?2YSffH6_hLZDFWhHhMjvHk`Dv^p+@~alSi3%shW_z zavS{VT&DB!J^pA(t^nkUla~n*P89E%hodev+{ic~gilxS%BL z6lmMp@5X?YabBd0Gz7fTyr1%uiD!o4=8f68g-xuhj0q_EV!Mag#F)L0vX3cTNQ~+R zv&xlGLE34XfFIq`JQ&C&FfuMjnXs&a)c-j=m7Z*HNFH&!wXTlZ>l$w2GoHk_H6v8c zgfyxjG&*nz=_!jGtgCA_=VucNz_VZH0T_h~#JJ0rFM%a?A)X9TE6o<1`~fqa>5*k1 zdh;-)>}oyke$}{$C2!#)3}JOq^(dYeJ@}*l%p!x5n@RgTI5C70o4IV_+9cCus@l<< zJBm`iQN=Rek@`|;xWa(`?q2gGOx{Qwil#2TJ|kLK5F#i{Ji0BH%4ysre|HCjqe(qn zTIn)!g@Dx$^mJN9yHWc*5pUE%lzpWuxW3p{(mEplaUkJ2bogJDQ`>)AIgRrK_(Rap zZE)L`wf``9g-gbER$sMF;C9!Zj}OiS)r6HC0TFBtm$&V4opq_8O)k)j&acj5w}(KE z2cObY&~^g`HQ$Y{UYAg|`+7TLAdS_OtGM}%R4wFoH1Fe7F?asFK~_D(q8_aIS0FWH z7`%QSu?xfoVdDKC)YYV?PAb~%0BtH7YE(hAIFo}-@uKUW6TBmJF9YXLBy^m zZIafBrJw|4?X4xOksJ?WyOA3iwu0iPCxdUu41D}d3`ebgXEzN$HMCK%v18KRFC#QM zGEz*g&+R2*Yc9J!6D}-nLO)&qXsfq1A)x>g8h+H5lvMN-I@-?YKJy2D?D=(rB~4%< z{=kh=u~m7^*{1FN!`Pq)>M{fA5h?krj?Q`}?xl>?$&r^@sBCJc#fmDoQir|{V%6?I z6!5{zZ0eVuO%Jr=%C>DWO1Dlg*B8TEoegSHAUm^;fsK*|im`l)5Rw^EV(n!@N+y8M z{yxY}+VY24P%9FKrj#5JSI=Fw05i0CfECvg#Wqusu*pKVqX0+dLmHI&VTX8lc=q~6%eVs z$C)Q(+=HY}{`MiPq{(cnWP!3ZvY>iPmqFqME?PJzX;r@0d$Ukm{=TECA8Dcq~(X`S-IN1oUKtfr1bL9)ewK*)+b_#0%HM?K( zy-%2X_9|>R)e1C&dVn3|sGNM9c+DQYwH$y~IYH{D=k`WUS-V zWQd6WSh`_uvU?l-k{p#DJ&O)(h?!e7yH^N-PM!VOm2GFMQh^}R?Fq471Xs~#Le84R zFY_@w#-=LQiP}5VO0iO^-!8)t90fxWDyV$(pe%LGK1+`ToBsYip&y@WjM!pRTO0_d=f3c6$dsH?fz5^8 z!(E*#C8S3>=HuQW$Z;a5CGP8lu*|$nPWV)QA!{>Ve3nj1n3BluGEeHZ zGV;fAFiqHNCZ?T*vzLyBH6018?x3QMb%}(G6aI?D5 zLwPwIG66$Vr;fm*DT=BuXH9|i^7abYfS)(lxFk1VQY0rDb2!;3$3Yej(kI>xJ4gOl zfMl=8%P&PArWS}hK^)$9JM|kn5Nx#YY0iepT(b(;}ziN{qh>gnKSd7JMZbrtU#%O7%4VtqH7)rjrysO z%!vXV-S{G9Oa7adyr?w1M}>kD_0HMuo8qqtsz`Ypb)$%uhasMjduRFP#H|NRud9ly zS+4ozoRKGH@Tw}vfzmKFqP*BV)TTSu&sR)vT`B-C{~*4mJSe+sP;vdrvQtC zP#%7F??BhV8R9OT?9n6qSLYgeA!wJ5+X{k&Sh0$w#1oyBMJ3vp*EV+VI zysL)(6R9cpvHc#gOUrR9i=UA}|{h zaL;KA0xi$vej7B%I5`X81UKt{iIxULBGFD2;JlBdBHR=wT+!FpzcdbqkjqFlt6C!< z-nG;`x;|c`)2tZqhuE5J<+h=QHH`x5YhZwoq?>wen<+m~rgh7~Ool*kP63#j=ClaDv`B2gx?JRiAahCj0ET1kk%N^?*@f5WCV;l6{}b%^1? z=UU-*>ev{4d$Q}No9VFKRaR?=2{Z>><|Jqa&f+0PWhOh2Xi@W^4h*E6YD+=(0tO#M zJ{?07kT~vk**cNT>aKIpsNa{YMEJIbPqE))M6`A`TG#Qez-xVc=Xc!+u8lPI@T5UA zt_eG54@g3iJzyv9rsnTo!LW_BPih_I<#v-CP!OY`zOaWzGH zh|g0X@6jFl%evVsQ?#%%rKPFEtaH` z?W_wRcdp=Co_>H{*(VmDQ1)2@&~kUPN-4SFjn&nxk~qyD zhU*3eoWpLnJEuN)d`!A4Aavt>g0DL?_qKQG=uK#A_tHJ5Eo<@r9NkD%YwAL zye=zU)q#>es4Nn2*JpP&xNh%_q@l~$T9Akwt|2>O>-zZoa>jtF#LdZcM}hVDfg)5Q zWLG38eG~b&Su~2NdCR>0f_tMA0(o@#92flS@v{VW0Dz;Jp`7@S){)O9WVhUF!sRUt z$IyamCyQz*u_BNat{uwQ*J9lti;HJ%{OQqG$*kxmb`W%;Fnks!zVQB~7)K5q)cy*;hf zNXe)WtOzdwUNY@JD>4TmpK$U8UjWv_rX_h90hxTC-P=iL)9JP&<{4fe`D!TsVQ|PW z&M+a{0JtH0Izz88Rzt$gE@?(0tE_ElayK`1;$t~VuEz<^+aqu`DC~T1*O_Li;THDX z5x#!%Er?P2a{!cWRVnn>%$uh@*(GIfX-hS^>8;sIUr+Yk3-(iOBF7MuECK7N9?szO zhWIl?(_<@XZU9`@nr?Ecl&kUScH-LMt(si&z#R&~*fcb-^?&DDF0pl*TloHY1Td6G_owDSHj9 zT+edP)Y=N|Tr?lpHhZ+`Ba!BgstFd7%UOZ?Hvyk{JY8BX zZaP^9s~E)d9)eIQ9;X{prDU)(W^1?!ExAf7M3MWD$+#thJ|Y@@0Suuy zJivQL;DGso-Wn_{a{NYs+eAlQUoiUb>3}Rk@#hdsb0CNJza(KGQ{|n0N{*AWrIlQ< z&S9hULED46)SYT9tH}8h0^5``juY~1bUg9*XOtnnYcCken*mX|PKhVk z5v!Wla2+Ba_!5>`t}vl6 z9?o;t0cwG)*0d(PnQun930@ap+byaUcLcq;7%;FF!ZCp!kpX zu?O*F^>w!SZ^=jq&kua|VnEB016Eyvj-Va1XSK;N^82>S>XMmRT(4WZ23Y2j17u+Z z%kOan>}eQ~q1-_$t}_>NY~1@Gstd2*U<%C_NV(oSaFR==-xa6y0*jUW42Cj|>4SKP zMA~4I=!Bw8Nwq%uS^|;^-6bLhQwk0xl4{_tFkMlQYEqoj=gDjZGd<&{M(GFaE}5j; zmdeF8KunU=x_wF%ZO!6qe5+oNa^K$kwl#5MM9-X?Gc{OulUy z#&W*b)6sStjS9gG`T_uN_SnOwlLMsNkbtwa5RaPyV9kbPAt{Z4uv-&p>5q09jz%&{ zFPaQ#+7XE|Pcq)wqwko(rXG54c!q`n%+X%PhI%???yQoX=AP^6Wp>w#U=%UbYM<mg6yyr`peq5IbSI0-g_Avg0hry)=<;g{?V*nvOV*IhMBUyQ4 z3kJ&l{Ze-tH(Dp~4Z1fQHAVj$5_W=Zl=-9je}^qxhbGMgyVdP~jv0*&i$oc(6{1{} zb9@$X_Ls1*z!9ygll*OXk1f7Q%UbFMvG9ykr#W&4)?w|8lhb<9JxKLWBXXKKkQUBfapqu(LfI2jYVC$ zd6ZblqOXA1LGgj2Fw3-(9=k=ezUb7hDG{9RLl5jcIhv=C9Ca%!dm3WS$OH&dXU1?g z^!RF%;Q6&#RewgX1^B>DqtlqAU6syoazXG8d0!QhG+4U${TMK87vF3e+z_T{M+Cft zjXquy{VZd;eLZt?47d9Y$go5SnPd55U1vw1@J|>@?X~lbMKyemPF&{71a$>`= zrrh$@WK(b{Z^fl8G={7;TI*1aAj9p8JB2xoV3Ne}o+3Gtza2hv8a35U>RJ1v+TW4V z-y7|ZJ4N(GV(4hEn68R(~Fj8-xZW(R7ir! z%WmJP?1K3TL=-Ig$vVB|?eVmZ3}bxpxt;My#RnBl18w>%r5*7-R&X9Nsh3u-9>yx_T0>O-;h%~MW7Hb$7w9F(a{niLLN~cjqw_kCmlmw^i%HU7ker>w-fSDfr~|kVd90S zQ?5zV+x1wDB%;jSJN1@)wbNB#LJ~9SNRc6`BDrdsK#W-3f+R9)cCV>?DQG2c?rRKJ z9EOHX0d4Jl4ET!0rlj~aakA>SdS z1LS&YKt>qiy<2qq`QT!u7su@7<>g(Vcljt){iwiMcPD`gna)7^UTdWk3p@Z#&Fs=L zG4j?e@lb^pv^oz#O>iXnS{|2{EepO|z0>3bpWnJ_T(dk^tL-7Yu7bzbhY!wabQ%h} zcx;_uddxthKB~Unc@P$g&fGyQuCI#G?B$Zh z!`n~jl{oP9$1H^Epg0V@6QzPA_q=G+S^LzkO79 zGfleT*L3KpndzW@u?$`O4Q|Kad z@Bp$28eLt-W`$&*a%E1^&cSax3F%;k=yPAe18ngbMoMpJ+Vecb?XK0jUBvVrhcG`{ z&=aKb!5G^c&-zaxOW+oSIQscM)UW>)ZQv4|Ayhv`V8O(1FYI}h8BvqEsqW2Ut9t3j zF>pvPxaR_}^^~2(E!#`_>)MsqW`irzRPvW_WWR3*=gg}>*?$5t`~pO z2+DwmlFJvIFJ7R3zf;@pgNABp4;AW9`{iySFRo6MY1laZqe<~K2DOsetzGh#BP4Qj zDS!C|yuO5j-6=!!8V7;vcuMDu4E@P2QqHO92L<^?`41k-oSWV{{a^yO%K$4GYxkl4 z$GgnUr~)L)(iXpJZ*yJ024B~M^v(oh@ONc;v5iMxlMZ;rmE2ivMC>YMZ=0uR#)e{x z2Pz)X%xd*KMunxCBV5_8rZb`zbx+G8w2Gu z^^L+m5YPYNZ>elT$nY#mz0ZK*&UyD2Co28`9J7yIPH!sT_dmb+FQ`+c41T>+glRq(%V_OG8*u5HN4$$78tIHcMF?4^>A&$%E( z@T8d0ukU)b1up*Jt=M9C5ZaLu^Wtx})RSZ*b*2T|Xe+PbgZ% z;1?8o`!(`djI?I{A<}xWA4IBd6*w_q!>Mm&OZ@X<|Gp&T<-a$Hx9>jrA~u4L>W#3A zZKi~_1K0TX6uXm1Hp%G6gP#9Lv8&^qwPo?a&-CTk;b;E$8c&etA52n988P^YwenSHI zergK%h9I(l-=hN?5uX8hySmulZ(U`6eVIT2!>U$uZpE)I=s!mXzS;y_+d4DLhA;oG zzMO^?s#E=s-^{AD@f9K6z86XNn|Yt@2`X<7Ri8f@_Ascw?}o|qCiitO=kG(|fEGe$ z{mR*ZA6j@a$U-><6!L)MDA%|Mw&M_4^y&Yr}uDY3?PG?sxki>3(3#=w;Hx;1bie=4mF!SaKK{??elHNlelU{mw>_t&_qTMvbMVmj z|9iS0&mQe-Y%KtiZYm;Q>X&xtk$!O}@Ap~#*Vqkx36J#D8J}`N(98TI*zXyly{qfE zbL97pYF9{7&}GHsc+cy*eJ>*h2PjC4pnbG&i`}>py_nF%+EUO<@DN|`*uYEO?xMX#9*^nu>z^@j`e)_A1)~Pdq zlMDphYK}%?dVF)OfX_L(O~&pD;B;(ZUl%l>*a8RQ3rIFmcfMVuE^vK^wDnJuwxwkO zf9RortYhz~J;#@!*IWm-DpOKOGxtG>^mwi8M{`Lcnpw`t=z6Wnoe{S@7}06LyA=&SVzoP@$^8AXxX0o@6i zzS9`hnxK5lm((}z^1~wJzJu1fzaDmc5e)9f5|MZCQ1<0+xK;9N!gC^ZleU?{KbF8P zeBV2OC=-cfnHa5j-%A~s>R*h}>FY+9eL$!9EP~6&7cB4 zjfigbe(3{#{l%mo#%uPiHxHXvl=Uf>ciSZFWj^135v&;F-dwvUm#iU0BvQf1HBJJ? z;%i{)?}!TLSLSVH^yv*GZ+EVGtogYxm2Z~zCSU>Dj7V_8YnVP8QYbhkhoku< zhVxUi)XIIB4Cf=aZ@FqqgvdGhCwuqfUUG17iGSQx`W26me@G15B){Ue@x+4|ueZBRK(%7xIV}SQfif;MAkY^?nk)Z8|3CH@sFBU6F)(V z|622=)xnpQ&+Sqm*=in|zV%Pu04Jj{aDrDG%nZS}0VPRhw-J$KYpxkN|-7Dh2X`&RAuPbqQY zCt0TRI`NXPk3|6A=j1!qF^}nExq4`@U$m~l&CHd5g3R#~>CZxe!hmwHVT*$nz-xXD znW^dmcp5upscxqExh+{97rWFxevEbk5`YB|t zC%%4whoMn({#O03JLTksp>fa~yAT`7s!x1~dTGu%w6+a`r#=!1@#o&A~Ia9Ut}r`nsvR3w^wY$1s7d1saPx zGo&+&Cv%%m@}+ow?+qVaNqHL^dlVKs26ZMDnO13f5_mXAvfgURS2!{`|1h*AV3Vp)?D$6}qb+GUi-;?rQ1cE;*3@Rvmw6}@Kn6fb0=+ER7In0Nc` zHg@WvZ*@OfSQ|%UoT^=6Yk$`XqwH`mwV|Ko&Tn&=ua~hX&VM&VK zLu45z6k@ri`8~q3AN;YO9y75Fb~7(z?EIgZdY4W~>A`+koouPhTcSBb!sL2uc14lq zoEOmAaPVfs+xqs!;3^feu4h*lC{2B;*_4N0*Xl1Cqlw^$4;jP(q>-v9V#;gPj?0yb z)KWG*Br*NBCvjC6iJnd$^e}QK1Jxp6%sU-f?xEliVc&XLqM zeRR4z+9dPWuv9@pi*G#Nf`-YX%Kw`1%Xa7xasvE^IUUqSubiQvXjOtNc+VGL&0qJ( zsp9EO^+qGR8+WV9=_3RuW|k9It659((=EG~RaCfv=M~Txg))_1BiRd_EFHKf+m?mF z92UQ^%O5_{8&%~et(tew(fJRw`<5>N zBUPq8;M?d^_G#%glz+8X9ig~AuKDC=qDN%@%Tj3O@4ZBo5qMSsTyp#42H|#utwIVv z2BtSBUm0DV<9$EQDYh)x8lS=Lcrk4EK_E#<4fd0#>a|I+CH-d(mi}#0pI85!sK;A{~5BURt$pi9# zw3swgIs&Wj>$_UYLOMy))>vgO#?wDen8XRoHD^B5Tq^o0aGADsIw{<+RIt=DQdr4x zi5N6veSJdL**_rcN3D{V|<;(rzM_aBPh4Y9`1td)72@3#}t1`ndd zvjsMK6hP%!-=yTUgjsqGZO3lOl6zC#q?rBT%BYUT=Y~e=WO0lAHAzNi!6`L`qgn)hL+3B_LGq##B$tYiz}ZdC$ltFea9)`||MRaM6XQ zy^(4)w*)Wc19QQX7%S{-LTrqYS7lc^^_>y$RUQ%~YNJIePmAj{a?AD_OKZ+dj^ePA zcuzVt*SDkfVu+h-p=5If11#Y^lakZSUQlEOmaTLV zt^q|TH1plx7O@>nSThe zIa~!Vvh~#+S_ZBIce8TjagzD>C%f7$KUZt5J7&|Fmc%7wQ?&rZ44H^OFt5T%=pzdx z%uUrGfiVgD#|O@hR>;DngHT^{#@Yh6V#j{f2R{PFl+d)*kgoVa=v7W(vIYkqA1l#@ zQvDDFbVTZCDt*;=>-v=bK#+XW;yc7AY~iun&=am4XLavW%3C|h7bZFsN_ltg2z1C^ zk2V>9cjn#c>V$V2-v`RS)Vz~?sjz;rbz7(Pg`NETv#->%4r=GC)+|1-ljZU~lC;A& zH;y}bkB;A+hemEaY^cjM?-ZKZbts19L7)xg+nIFhzJjD8%lXeVksmjb+0A4&PWMYM z_Y}8x&cj1!$mSBPKhJM=Ku@DZXI*u>8CIO%+{H$vMM0Nk73_P}wO3I#_H2QP7s3zo zEV+gA*ZJq+h-0mZmS1Kq5T)&SNAY9M`8#l!D6_^Io8kwcgfKvrQVesNqRc^k)%Jb8 zMdTaj>19$}MBC^^RswT1y@e$&_d)KRN-LCL$PORHzRXIq0{gz3Y~MT|vJ1HjE_LY4 zKU~=|-ov4+=7Z|NrSg8u#B^MB>C_W)(3{0We)aJ)-yz1jZtO%LD@Le>Q>DJNc(y4UG=^ie>fin&h#2A)EPO&&^>`N%B)$|rt3`-p|j-22#N-3Xv zQ0b6|vbBPGnxjTFZQcM=nmD5QkSz(^EXKCtz}YeE3J8iWX2Vu4Asz!^_s@8+kt^w`?p4>D!(*piEiW^%iA|R+V&{&>mS=b#yaM;u?zYY*nai9+m3yNf?#Np;6M8G6SdYG-*a&;n;mc!n{(EZo1$-WnZ~JX36M85rn=iO)uao z_h{btChaP1(7ol!y!5&F*qbbYG`!X1Q;3_`uVG2kj+P=`Qsy<)h%&&A?2@wL`|u<~ z*{emw;k11Pff6GB+w?a8i3KR+o@_y{-PJj!I|$H<#y53!1>uVvDo zKaz^Hj*Xez4zV{a#hD9DO1?cJmrr2{&R~^GR;62LLjC!c& zLr`nqI`1YAJ0Z!OSrlk#2{uX@k`D~+hI_8BD3Hk5X_sLZG#&e#+#mErY36y0`o%=?l z(s0iF61j{t-*3B82+#V?@_OLv>gKRO7Zcx3Q8CoBVI9hFg{LN-ELL zEJj4-#g-fLb-{I%)r7Plnj&W|Z_`4GUcPaGwWGuzIDax4GcpdUKjUWk()^4=y8&sr zRb5b{F($jbygY}iyOms><#=B&z|o^8RrX`Wmo=}d=|4taSI31dxvr*jg1Srl-OcmH zclFc#CX@N1vdV@w3Ho7AjVA?MsrKpT1X?uyv+gZGH?W+btvoW}&9wkJ2{TW6GaGRVXI}OQaXM9;Sj+ARlFM%a$7Gxtz#piq#Wr$p=h482}65gDs;nU}$HtUw)kNwV)$Iu>~2othg zc-=Ig%vn6Su*-(U2ovQBg8R4RQM&qhlH9b_vEHWfaNEVoZ_e!+O7BZoXs`aJ*M%0s z6!CiOlcx;6D5ifT|1#}+wjHL(VGAqm->1kWSNO2?=nXhf8d>T}T(RvO1js|YgmXi_ zu%&o5gomFM7E#b`M$uy8bD0%Sk$tXZGw}GI$~wBmWW>`L9Ik77jjZB~it+uCoXZ8) zt<}O^o3aJ`{FaL6ToO{BO!mh(->D5VP{Wpz3sQu=Z-<_Cy4UuZPmMB+fJ4X=gicbq zQ)Qp7ctw{|aK@MtIWc@V!oWP@R+tTs^RW&=Qg_>@6n!E0f(FIBLcYw$X}uG9odytN zpjxW61>LJ(+GVv5udAgwymMkDnl>0BdH`>FOy*tZK>gP+Z|9coxi~43YU;K8G)z61 zq`!KpmGiDs8}5M?*OK=z<3hTg&ClZVGCH?KNnP*me>uIOWR~T$R0L_A!k)NydBq;2h=u|;R6=NQ{;H*Yp}OmRS76mxfL$la(ww^vO<==JYHn4^(jWlWXTl` zopMF9=q2Bt)RebZCOd~S3W;-`rC`Zm<7sFtPc2&*ZoMe7AR=ii*5P^4nRbaW^GKFu zdhJI-G^aCFI^tztw10B5w6c1t8U467x<{ItdUHC+M$dpGKS_28)Pb9F}%-}&nfIM$;6 zYH<9Y1Ev7*J6gm(oA{rT&^{xrnB|1i(q5mqIBl;Ve}QBVR?V-|$-XAR0^!G# z;S^>XKh#aX!dxO`<#=l6o9I0Hp}${W)pO7MYh#}}fMP>F#-USEZ$KOod4~Yt&n~ZG zEWWuqX%Sx>|`6{h5!%+pUqlSEb4tN!H$&^LY! z6tOAAF>XVg9vaH#IUSgfAB4nMOcTFtOZFiP5Oh^T1ui_n?`&G20%`iBbxY88@dGou z+qfV?X`=O3#;{F2s-myGPnz`cGa`hKDx6ayBl=AOn@MEw9+iw*z;)4tb#fdhLU zGfv4#mMBGT7_QR+z$@J2!4}%Y`UCs9R6NUok@*f+seHj%p>n3g&T{bHhLhxHRoR*1UI(I7`ai$eOzCxIka#aiY@xZ1ZpYh%!<*1AM8@bQEK1#ciqjBCl z<5dRn>1U=);B^wAl;7}| zo(6fWV<^wQgHDz7*Hig;v#vVjQ4Fq~2)-op$qGdeW`iUGX@q32i|MvlrwXFhNn-Sj z$WY^??vb$$X%bHRBa=#4zVvo{KZM;q*1x z2N(pEA&HvFVle~CK$}~4yMDOtR-bqWDSej8Jhw7)f8~8A4^V(I&ko_kvWz|$LT}>Z^OYGYq>ZMq#yREso z{zYn*)=S$?hLD7b$obgtr4>PxU(}ObN=7px%K>?yxQVwz>&tk}z*rBh{CwhKL!e&T z_Yje0F6%6(V^9nLmsI>VixEz-Gg0|X<(^E7PHW{9`sz}IO}klS>#c8B0C;n=WjIXt zFeq>aB)5mW@ zE#9GWuuJEmh9!Dr&@?yW40BzlXe0U9_}{Cxj~?;uuk2ra(*^XIyrQeq6y z!dY=NXt$hG9XEwXiD(dk#=jSJW7 z{Wuhj^N2#t?#*@wFrMcH17&gZKzI5sLu8cF;BNWKf}s;VwG?Ri_jZt$R3#|*YRplit+_PCgk_63 zj-8m=j6;m(A04%8 z*Em}Uj=q(%lIKIqV#1g62w3`5&TRhXii!i(gde`oERl}xF~-i2>*EagA9 zDh5krt(lI9snmWYX}O`vbt%ELerkoPW@S<22p`R4F9a`aL z%@?=C-+Jb&x$UsiMB)VgoJo3?n2MwvnAxx@d~2Ii(o??4v-Z@<@7B&I{=@r4j-haw zTT;+ts)LT6r8M@)M_PQ$L2k?`-}*Tkk;&-R88Kg)j|@RCdH1kqX;I`v7RF4^u6d@2 z$kP*ZMJlW(V_FvmxqZi`F4L^A^tx{D=U+rbyK|S{g<}r+FW>45Pa`UJp`F%9D@3Qc z!?lXa6IUN&PWzT;v#jDP8I&pC@oBPi$dC=gDg#YkqkX+gRzRIz{>*Jgqsh~2DsWyG zmfIpLuKNr>r874VaT9mDwWw7m3RCz8GeU&)OEk*{MkFzYr^+`@$}QF?HyBl&|7%Qa zXJvKcY`M<3&Z6}CatZg}1491Un z4|bYRE#I~8Agi- zFDYz9raz%M?#9aaP-<1fLoX`PiRe62Ogg5xOiPigEcU8im=pBdPMs-LI^joBBzBMS z#+$EsV)%h5%RFd>X?A7YS<36CmXqm&S~Koh-Pq}}_WdSa4#q7@LvZ$Fh7k`8OI$+j@XnIGNxbDZrs3}f?aN<|uf`Gg+xk0I{eG0sD!HSmDVDbvwqDF3)x z9QCD^y!(=;&YIc0eVd~)mma!;5xPtRFE2w~y98Y3d0EDfi_n1}PSOOry^}{72WmnfWRmG?~rMx-S_+`#Q^k zndR7wnK=08G8kVRz*16du~TAWeC{7FRk#1Sif&v42x^A2NA}ODg8cTAD>tTC7uP*% znf$VE*;c~D(Jt0q`5}aCzBRnDmMB6$6tfsd4W{*x8Iz2;sqsY5Lvcp(%+SEQTc}-J zCO@%Xon5H=PCmUm_APGlk1X06Nm(S0(nznV5nlS_yr|f}3uE_E#K6>D&ud_bd!t-Q z>(lB=%&2m8nqIoB5B;=uw7GM?K}F9M79o7Ja<}WPy?6YsOo}k)L_z?LX)eHqM4WiF zMk=guFTcLTU%C9X(H4xO;!K&8ER51=OPpB9vb<|Gr&wk=Bl>ImP3+pRSX1W1%1X$# zIYlEaE5js6uci^H70xhmym!8L%Ko}DSD6Mch5V_({Iq!Qgnr>Bz+$rVKQCo!d7WLx zG1ttNt2neaQ;TYqx-xS!2}8W`$|k2{mm;$KzS^5PDGz-=sFfQw=+-+~P*@H%hU^X% z=BQjHr6Mkdi?tsi~k&%-xDqrh}|I0cn2 z`3Nvz*D^IyDBrGg=Zc{O!zYQfl zH8;@mTKjpnES!5Mws0XUa@lHbKVzkYi1lZd?lrl#{!Ms~cZxHOKt#n*vcqv0-*R)3 zmC+1ue4_ap%5(5Ok(*r z+a;{hn#EV0cJj`lmrLk>)g3T#N_cowJm0+?c*{1nK4j?9-!m!*wiJ%U!V`ZNB&=+^ zHb0SpfSHw-z6{iHdRJlPOE-w07O43^T5B@Lv6YuoyTy7*C@L3B6U)%6Glo`i#Rnce z)^hXv){foj=+hp3zwhz)1%GNKW*J9DOYU}^I+6QhmOxzX5?wd;$0g;vc(GtIhDpoa z=n1vR7Kum9LaS|-j=4>;bEhWJyL~Qg!|`cR%2tj#ZWE@DT@2|=*AEeToO0O_ygJn~ zO&!mb4r_dUoC5{Ng;?RAkhD)vy zg~8G0BOl`)(}KmOO6-b8juyV@qmGNLID7T}#C}@3jJuo2wV`E>`cp~S0b6eMj%XvY zI_tA{(#6Vvv;gwW{$2eZKP;pYmvtxj&c7Gl&%o}u(CR+N*>d6&At^NRCl)~fbH(cX ze@+q)`9}=~e>%TyfLXAyL~f@_t*_ER04dnD(%Er&v65~)=kC(JY@FezyQ1(^uwp4c zi<5jbZrKOt+b?yRlIk0xmu?W!u1Oo1a-Dj|jlS+xtB7Z^1|M5D=9Qdg&O4`carfMk zv)i1z^FlQ7^y!Q!V(g3?$$16mFH7rrgvDOm?R~q@8S{`;vwK zBObLj$ZhWH(8;1uae}?@|6%V<q1gGPT#B2BQ8lrnxy~Tvr3Fz}jrr%PUmbtBUy6eGP+Q_z= zeA5SR;#9$+M!XZe1Um2cy||G~c8{?^eY~KnxdhO}LwLarLuw`b_TmH?P^Q<0bA>wwS|zB^XL8?|-2ei@$S=QzFm2 z63<{l2K`7`DceoIL{G+`SFh9vhM_*FIb6(1vfPpJgSDKcSTJCW+WK6B_|ie$DK-no z=%S0mBHHZ4-~L8!vg>P2)^$-h0N(cgbEfPxxlY5vb}28MEbJKxjq&rjvftZl`k{-c zA6WDBC5?wKc5@B(9@54oZLm9RJMiYXmsNDpM?3%D_kWZ|Qnry(9mRP{6g%6GdyQ47 zF@tQ}X$x{ph1%$hfKO;xn%!Tr{kKFXH5*pJPTxOzW<+jCQT%(VE{E}A^=%MdD=-1} zpDm)0Ssojgln3We3-eu&>%+PO<2#(6&`?o9Rf9gpHeX3oTF&E+6WiTAih}m;9_nHD zo&h``afmO|6_%*vy=Hzp!cXs=&ixpt z8k4QWZE`gRcLhJ^X`?2NY`o;l8G6FSPJbA30b97&^DZF`W0Tmo72j^Jwh?H9MY-7i zb#XqIAO4ft%W7^WJGJMa^}(3m$8@4c)I6h__W&o!q4tv*kz#I^+jj|ezZv^Ft+E3# z>BZH*=h;&T*Blo&bMqo~BiLv6zeWamGm|Sl!iu#m9ya18&Om~avOh=VkbVr z`I24M)F*5(mUN6v1Sv*#q2&2T$e!wSuuMs?4Klhc$w;Q-CJ+-sEf&Yw5~5#4%*NgpZRfHI8|&{LK7!UHi+P zT&zZ`9qTw%h5FTu1DH`4Z$qxd}RX{MP$#buG7P z!DmF{HHx-pZkVql>-4GSb>E%dcwrj8Pr-up>`;=vvrTzK3qDoIueA`V=GT}SN(z2 zV0p&8-dn8SSEs*>QW*5L?slalr^AVyDYLRFpYlmWK=DfS9rUq?OIQM5z>lG&Kz8FhA=Zh%(`Cw28aTjzGJ=#PV^$>Dng8!>Ac zWFOA+*KWYeYLWsts(q_}0PnWyzt6KH8FoL6NSh>brus@e$atWuV7nlmz1GP9>vV#& zR}F2<*p%kU;o{;e>HRtfv&KB8dZ%}>r@wpWgdTP-*3VDzfKO6WgrOT~i8zA#T6ils zz09#Zm{UUh<736J*pWaGm~N-D!D$n?7enTi9gU}*GO+Z#OEbUW;_arN{<_y4RXgIp z)%ISLw=QR>CdD)8Z29BqjlWD!t|m{JO`>+VpRcrRDq>?T=~fT3w%cB|6T7Gc zIM4JHKA>KH5!%oA^M$(P{1nQrI$Rp{RsFn%(674kxrF!}BVv+I+r3@WFUF!~R^P+W zQ4golf@gj4Ix3)MauOW+t@G=z>9c7_%bJz;c@`<{PMc!`GT;0HDZzSxv^#aOa#qi! zD=YO(QfuBWVp@#MoNZRr`q=%kn_+_#ciqB>ZbbKbPi5sgUB_1ynS&no1A4ZL1=D?J zUn^QOVvk?-9BMS$(tM-F8Ao)P?&LG5cRrM@acUSF@Bb^&XTM~xNCBzBM)AtJXz>8t zS1mdv`h=BZ+%()`H#ijKnQj0nw7kJX41XI=7M*sgH?kUCs;>oC=u@YP^Ve+ea$66Xe0A-98b` zi^`0%JW;6Kq6zFJtKOl*+wcM4@YqlFFFAQWsCIEPJ?`C5&Nc|FNS&)~czuwUXI@i% zJ33cD1OMNAx#lN%=5OYhWfNLE>Y5uwzj3%TwXHbDD)eS)EsZD->N12{mnJLY?uh(H z&%(M8F5&Chn?6gtL%|)U$CLH@{qGV%%-uT5?ow3N0&m{(nDKg zlYZR(i+DT|o&~;r=)OGH$(qx1ls*_G^M9Xy5a$EE2U2mSO zlkvXJYN;n+Hn%E>PX8RnJ_&HGm3OTFl{|C9nO^Xs->09MoB)KMabVR!)G4iG{s5q9 zBmN#ZP!eMB)5F&wf;R{ph%N%JH+EQ9%*|{s1cOgGKH5Jws(ozD^kRkPeq52&m;V?- z=>rHRntXm-LERb~pu`-7*vVP7(jM!V5pZd4p@7`8KwZjaPnXO`vr}gOWDoQBepiw* zm?Sl)5~A~r10X#q=co)fsmZahs1w|bBe2u^jIT{Zz2MG)3|Kt?7ZV8Yf+l9m2H zWpa0mUhHAS7uuN)upYGnA83}x01kXD%;LAq|G>)&ELhE=LYp~qA#v46m-58#fszZb zsBUg(IK*!okYZbvyW>11usA^VROI}qb6;KkJr-tp>p)11id+b#CK)31PvEUG+sd^- zQzpdVcVO7d%b#tR5!38C`~r*m0;eF)yu7><0a=3KL3@6LDl*6C?1NX8yuq;oC5dlC+avnB-}~S@_+^J46`Q&J0PA^0t%R1W zZZq)TH0z!fG6RT|?ryM$lTJI9j}ckIJ%!*-mVaM2_1WQnj0%{zuwo0FWEH823qtCmcerESImIftw%k7`Ui-xEsX#h=ul zqXS|qZjXXl*Et_olHXDNXyt6HlZev$Fyd`oIOO}T08O&NM-nwjGSg!ZLX{tOh>Fc_Nent zF=}yh=IeI2E6ju5WHql8`e5(a`7h`G>-N%f)g7l#wmsYyWmN(rnhy^k zzl`;)zGW~kYhxg5$(5dsGO`|3{;&?nnuRCZx`T^0-V<4Pr0(4_NKmyB^$@;tfaR?zjz5e;SJ5piy&F8)VmsIpCmVtF)7dt`05KL z>)GVql_=4q`9;m&X|{9ZL%&yOSt*S-T`P8o>Gg%jId2%ZUa&UWDl~t4KV@WVtdZO} z1^V9`z%x4ebqC0TZ?Zy=O19eI-F)cgkUaH)z5Ec4wDT9+YfGy%@RYr;&% zljwPa-JrVK;E;cg0E_z(e6#h4L|rLcXkNByZVG!Mu;>uq{-0%LylVhFSGd{Xee?P^ zXBFyp(g?N#@I>$GJC{tGqYbff`*o=eX+Fps0JCZVsr z*MV3ek~jt$n&*BKhX?=a@$y8<{719j=`9A_EOU0<4g8|q^MlY24uF_i-v(_C-b9`o z#oiJ8tK)9ud|)@{c>eqbIG%T@Qpvu!2Ce322;Tun^R>2ifLteJabK-nX`ixc5)%g_ zVuGz8zxWvmeooM{DB1`Xw{e9Vd=IS0^1)(A=|3~8*S}YMmQm&&uriB++O{b)AAR8t zv2Su3s7Puas~2Jqgo1x%sRg0XM9_CXf+BC8$*;feRLWMj2e%8&j-C1hc=VS3a4xh~ z3QBK)AEsU8n$1amPTH_IL$GE`lMXDX>Vm5N1DqCAbpcgn@ZvN0Hme~Es49cBpPc3b zs{UOh3jqKW;Cy;m2mqiE{dzL#lmjY?Ec}btN7o$v5M~4#-BS2;M1n!!Y1p&ChPxtwOvrvg?<32(?k03 zzZYQ_RCPgB7gQB=xqhadZK2C*p&@XgA#k?9w$Ko`(7U?OWwp?|y3l4lS3LPl8{$HZ zb)m+(P-9)Fu`ay4GTW}bkXHTURff;K@$~66nuYhQKGmY2mx`2DF1%;;50NbFT+Ibv zvo^EvO5op$cXILzuLS->Ll)j%oz2=IMOi@A1yq%W=%3k2UqID=Yhz*}8}vy}E<-v=+y2dfpa2HG7ui;iI@e zCQjpsXYJyL@+wQJHl{!C3);9w!)l45TdMYx*kfOATso?JMy_#x_mJ;2X}FA$!5tAY z9z^8{LnK5e9QBA1zdt?r(;Mz_6-$-usfoRb|9;{9w4NT!X3>X}$c-?Yf>h|7rnsZ) zR>pb`l(9NwqFCvfLlaMa9tAg%{-b-hP)QzKDgANX!<|a@E_z1LH0|I(jHpL&a=gsB z0bbw9$uZU58~*z=0@r2Wo5eAX^3BTAKgt~P5C8@b&Iy;zMU!2@z?b2FJ34F@3@6sE zj2%0;ODHeL>`1SKj(Mo*Tc%`hJXRUFL*@nCbuM6-Kzia0nFB9ohq+=51XKO~dHBlM ztlbY*KrDT3W)pKjc*W~V*)w22^>)-OS5V0IjkO-xrjQ-K))_jLps*hBls^+@qbVcF z)>UAxM#K>6N|m6(IbJ3?G?~ zW{v;gMm-oQmT&+Z7yM=*H6M8Ki>Wvy8S1~%q2eC`yDYCt*a@@Y7jB|119 zIwHZ<9mwDX%3Su$jL*t^7MeMW6|yPj8Ph8A&8ziGpkqxwJM-WcFqwIjxy&&iv$Uqh z0hL^SHJ153-e4H8}+~H#JmHCfm$Mf0>)>{3e=~8>+cLxK%oSWox#^-tp47?c~ znRIww=Ck891C=BizaCKrdV?HGf+$Te0E<`7u6qe7h0@B;$$WMglWHKC=}W8Wdtgz0 zcg^Nm`pnEV-GFe$K6V{68T7DoB~VGZ@xro|u{y^NL8o)od@WVH@vg~p(0?i@9Rdd! zMV)v&B|Tg2?;>_p0POCKP;OhVkZrIs1^SKuHo#LmfnE!ppaagFy8{US?R+w%o=_NU z_$&BEzIuxkBeo`eH#f=WjPIZ!82Gs{^);jrkkkYK26&s(P;sz{k;a~DbCh}of@M|b z_3U0RL;B}rJ{x`3sRN17&-Ym=**j&txdgHFxtUYb0pZ=u9_X;XInwRDmH?I9X|FT2 zPQJPJ_XiM4y7~Zt9Yt4W$sPrB7J#_Z!S-rsF6bcvfH+AB`G+OAyn1opb%>`&fG3(@ zGCE>T7Xfek)&RoQnq*OM)*|nLwf3x`eF-qaSf=*-8RPT13K5!NSa?BRg& z>hFq;f!>fR=FfvM!~+@hRcq?Y8sz6>{%M$+X&{&tm+0cDGR=Jsx}Cl_)TI-KFq<_g z^H+ha1xw(`Q6J$zYpb*}6`b@o@slg!dq~7{4~2U2{+h8_A%8}`;dQJ@S{JKxwAFG> zE^$YJR6Jjl4a*+4mRbtNdh+Wi1lo{Zn>fXl0KoYEZDg}Lsxj0&S6g4l{7eNjoSeLY zRI^(Mv|1T8HrWhBv-N4G%z;O<;`7?5aBK&RbS{n|AYT+HH#@>F<7wsdXjk|UNF!fx z+D2VQ-ryX#*sNSU>E9|oxUF!N9MebDnkG?uBgc&L)FZA7bc6))UtN#a*+tFy>!OS# z-c0paBmZCjIJg4!KNs9RWqU%66oGzy z91Xz$^ziDS*H-yv)=EIxB8|;354`#%Bhv{;9LeBNy{Ha)Hdhv0RKXHN-mlb`nP67o z3KZ5^!bky684*MMOR~Ln_b{(EL#G)T76Vn-LALRQEL6|l%M(z`y&evqlLa(p+;Jtt zpJ7oR7pRU#p_POl-pB_pwRig3-QDh0A&qP6;0B94Cdd5f zXXWt9A6i(YSK#!~s4T%4q|)GE&d1W|j+Gu9FvrcD{9xeZz0(_Fv%=p+^zzueZ@&1= zngt8VFc{ONL7dCU&m!p4^)guEY9^I!w09GvpmUt-nOv!P1r}dPm)f6I`>w2QAGod| z?n5NF@#E?4`H6uO8YM51C1|-csI0oZRz|?HyfB?zgKv$yQ@6LFADn*^D0?AoxN9^I`FtY-EG&en2o5c}7uI)_(~$?#0?va4B-j z)A!dA8={@OspGFi0>mGEN5I9L?`FXYm2?tE+F*R-38D=qtHsas>BrmmXtKGm5g$h`umc-Frsxsd0c-WEyee; zc-PbwQpvnVfm7lvzkD+Px6(=taI{F&d4pTBpUrBWzDW=e_@4eio@O|zD_=8|9{B93 zqa1TLeYbGXrp`l`@mpAn@I|$Z^?|%Z28X1wS#AUjrTo_S|6b66)f!u2Hhy1~C;Gk- z?elQKdH*PUBP{jcDX$1$oZVm}9CdC_79FA8ioPj2z;+pXH1EFcVV#&ovJ`800xlwU z8ps&^tb~#syqK_wFKeIWjF}D-BewP9v8XL=?Q(s47BvS-qEJ_O{th0rC+shIew}oU zxz((Z2A2eOCGUgGELWtg5Hmj`ssv+`pI}kfpT0jbwZX>`y*LM-PGeOL5;a?sR%0~< zQ#lu}Ivj5eD?BjP7N*({4aw36_=#qBua>c|*>FD$T43nG)jck5QS*&uYS_org7zn* z+>>m(fR(!yvz=_;zwHg&*WrK6KdowCMR=?2yfP_WjD>~lKQj-xATBQlj^N#~uVp{` zWWmW!UfCe~l6z-%=_K!V7%H;qB>N~{JJ)W%efe_xlxWq*VabyNqG{?z6nB z9%$#95p+wdhq7*T=OHjM^4bLCWy|io0l9O)jRmlbm&ZGylO*Th#omjfU< zVlvtKFq7e5FZTg0)nAj711J5s;@Wn~?fS4)(Km%d5HkgNKsr&?;ZCwXDFRq~KmWMQ zN3#f7_*VXr9P{L}7YOX`S30ftwNFz^ea~oONqK7HiLi<6Xw?%bIG+S@-?+1+xL&&^&6(` z__KO4?SN<5;tS~jZRw?^+i_h7+MZ`!7*Q`ljD9(FrmG8bmNkCTgmOwa86q>=AqQZd zmiVywaAM8@yDpCdh;l&T7sVd$A44yU-KdCvkV#=(zIxsTX4$m1B+#QwG?;^K2`xf8 zTQNy#?HeF8cai^S1!ulhazfF4Ywl)tt@I3-vJd2)@VF3%&5>X7phqeccixGOXvAGwxnK z-rs0y{oO4zl@sd1_R(?{OXLn|MS(Q?A0~S{?T0vtt@!|$)JOU`{2NnWs4*93Q&z~U z606}Jv>2NE`NI#lOr`s{ExFJD3yHk+I9JP9D5WG4i{=L6_OR|$2T(lVY)0Cg482Og z;4VT@luQn!kP8gYM%$%Q#_r~P{-qjQto8VxWfY70yWdbegdvRs#aJu2Erv|0?>s4} zy@)1|#JM5kODUxRbR+@K$5)iUzw393oEvsEde@_!(7~*Q|1})YFo4oFR}NMV3LYgg*kulHN=o|i$S#_UvVu&U&@Pk_wuLl?H~Ks*<(G2ajhgF*zE*M5WnEgqOP=(B z5$Wgw;{9!1QdX-R$oxJ2_1v4HJyXW4NeFV=rGc*vy)th;HMIA#2KvmIDUkVScFkSS z#a)wczHspuVcV0&vP4Diu9&U}a_EI7hn{i-xfz*-TxL%}b+wlzI{AByq<5itM*b}E zZhsa@Mv-!XBKcLjI6*NCh_%6i@7Z}Q|L}h+5`Wop?btE(T}{|lLN1~jQRPoP(jGFJ z!Z^+MUj_q+bJnP--Hc|IMJs76N#s?!yb2%nXn!&(>>(pE1Lwwzo0KLZSl-B1h;xwH z7XV6rwi$(1ehv%t3SH&DU7TI{td8R<^6MPzs^eB8f^TfV7MqtKcxN7NqwHHcS(m0{ zPeE_jp}khI%AzGc&h_`m@M%taY%4(c{vNq)&MIr7q%g!2@+M?f_KLLnn3jH2=A*fw zeWOV$EW|Cf9AUlMtkE>Fq%ACwQ8Df^<~G%kc2ek5UN#aw8az5_e(#3U?l8jj(n-gD zNAIGOUG7~Go-|V$lAg-;Q|uu7lb{o$2MF7iujY!Jzzu(d zO)Cw{C_zMTfC5HWG*G1hOgxxvP9U(j4j>U~Z@0G0Qq0B{r}a&KfDz#z&2`K2a}fcl zoZQabqCM0d^__v92i?le>v9@-zrjMf2^k4R-DZiZmhGk0{#A7MEGjv7=g93Larm3i zp2{=`-Ce`L^gfsiP4f|3Y>lug*RS&|Ni+20I zad5*@LOa?^2D20N%#r}!^7h2E+3vvFT+&YLB)772b?-)Ai ziqiH?;GAJ`a#@c{M;u0XBi1t!EQZK?tdkXRNPn#yQ-eVL0ZXF|WEGV@$bEo^qiAV+ z+V?p+cZJpEp74eQo)2O&l7RhowG51#L;^9rOz(usr;x^Y1uC2X3VAWM%dbuwc><1Y zqwPtfG*mps`S)3N1{qHMW=6Xiy4`kv`nOexJ-tEJg4cs2fc14f@L1b`ezQn?20is{ z&jSjJyOy7L!GfAqI{bQI92*5Z<#5OH%4 zH8YE+mf5Fl?91&hX*5qXPaLpeaZVDvu|Xa^Sk@VCnvyL>Tw2*m38=C`1%z8s>9?_V zhA2sq!`+=>WqkELOiP%@k~kJRQk(kYt5)Nqb7uiyS48)eI{lyMl)8LVdVZcv4(~;j z(m7dTHAfx<*EKPV%|H@dc)qoWIG8@TWPQH>5>gWJ3^y{^4xiK5uNEWDBlO(1jS+1d z>Wm(1s8!}#4K*)n#cD||hD;s7vNDH=1oXDdkeTfyv_fpKrpQ`NL>%4r^`HZ(iFJzo zHV0uim_F={r*}TakMO#R3+9VcuHck;W?Kv)>vxD8Slkduh@EJ(F-S|H2kzR`{V?Kk zO-ldr9milX0XW~6JWKkE2ec? z&pXsH(qoDn*=Jey8p|n9swhX(eBcLkMZ*XLw)m%hh8Ayn0%J4zy!Upn(r)p%eFuTS zsyPpS0_4r6cSl!xg50jWQ{UANsA7ED3 zC%A4kb^s}QW;!I!tc>F3Pf<&^3G-5HL?1!~@8hR*5Ofr8v_x%r63aT3a>}~XlM_Ce zCWtI3*d|0wPNv;wZNR4GioEfUw0#`AJm*(9S(;o&_TG}MiWKe!E1bYJ%DDJ%Nsh~B z$}x9Dxc3sJl6;)|2*+L>T#<;@!4?Kzc`>OUP`!yXnLzt+{g#9@a#lajR~r?T7viDE4V4ROfjZCMXMHA`(}z_L9Q_gJZ5-QAi@A0hIGHn7drc@MgBi{F^a2uf;Y zp}qI?Wwy_}!hn?(7l-NpI~M9tUal2ubm3*-E424OjGG;Mt<=Pvr!8pJ+!p`8!i#WG z^`?&^iq19h=vnG$9n1?PYWZQC&3=H1{`eM!)hOwwX`p z4Y9zpj8_@xLunV-$qWR+nL5K`x9lxkpHv+bjX>bz0IR4zYU2rK2%-wA#%NTokE23% zux7t5nNvD3b&&j{ZsTM?945T;@=!Du6+`_(@#3awEkxFz{c1W%W_8iZWarj51lFYo zXWhC=9j=6z4Dc(5UqJ|NNS4w>{?-XfYeA7=1QZ$m)&K+9Uh!&h9iZhm4g4dWf&q7h zEUxPWmpEO?b5p(Nf||J=B5CrdcurXLw$w)w@|2gAr4son9HEf8=}Y%Z**UtwMUIg+ z`^jfLbPQu7| z!eMpKph+czu9TVKomn@t!k(Wb{i3xh>0R)X$S<%Ic!l%&uXXO~`ZsjGwHvH2#cPJ( z3lh*Y&m%dICb_Nvl(j`*vt;g>i|YUpAho@#M}~vB`hkJTHGq@1`k4cvWONobP00?( z1Uda7rR7#QW>YC{zfhpN+aGMn3*S~?S z1!pB1ESgzQ8GVCHz$)G2iDAFG3_&iafJx0{h90+C#y8Gd%poVQO)%}a4}xQp5vWX7 zL(xe=h1u|?87=RMMsIM*u#pqIf+rTZdV7%BRq9tt&>Ir;`D>Z0RXdW!tsPE7zh(sQ z2RKsE@Ge;4x12_9?G!g{#(-w(!TWu~@Tn?)$K%dZtmx$6`EBF;O@Kg4cFPSJVoa>0 zj{11z>VM}YBa7=)>>Xk)k~}>f>^g~CzM)213n~%?)Sf680me4`D3D)tXMb59O;U4w zb%+1;^g}yfnbgS!->mCR)tmDjf+AU9p>=X`{yDY+ zpY#jO$WCpvcxIG$vrM;=d|!@9E}s|3?{6+6^TL*23nS;5dI(0|_pz7LEfxnWbXckM)f0yUDrOo3ynC&h}b z$QibAa#`AbjE8*ldX`I=)-@eo>NcA)tu;x;whrkacGp5!n4Phs4ZtfXS=UIC(T786 zUD0_qn{o=yb~Vh`v-_55VP-f9(Ys}{;n*5^V7h;6WrWr>?y@xC_c>qDU7@2pXz7=e zi0ZfehRP>uHHfTvasJ4|>K-U(!*tim!*Wbqci6@wC_5z$Ywy25urIcwp4X~-@(oslpfvd8U} zHgA6@>zD1$oVC;bWrqMwaf7>mc6VS}z*D>{a1614=+**v=eN0hQe#^gHYx~fJ*M_!QU#tBgooQbYl@^Z8D{MRVm^jfAq^}7 zS(i&$>tcIBY%wv&$m~$I@%>Y4-CyQ5yJ8e^MIyYy;mSZM0z}Rg4ilAAzi)sr2<&46 zA+aligJe`_5P-dnU3559`I`?ds%ySkoE<#P_vc}Dk_5U&w>xhT++dd9R*Nn2@^VVG z3poP}B`W}jcV^Y4{*x9D6K!&$#iMBktUGq+Pz9|}?ba|Jh#;s+KM(2%2Jv5!H2!0u zcFW%G`blgxKQG>}sF`CrSblU?he4I0YD@bI_3U7w6TEUKY4o~(fBR}AZ97cV((3fR zukK_yNxs=)x7Pdj2Nq{@l@o0G2ij7`Ze33>Zja{ooCc&Zz<&Z8u=T@lV=!rQ%rX=wZNjOn+q6XAlLDLQaC)2N zDR^?j{2S`}G8KEq%0Pw70AgNaOSSTad`n4vXD+L>$T|x%DX_^Im8iJUt8c8I(}%dd z(pJ>xWqpTa6_*HB?GAY(0|G}#MKm0|?gB#gG9KepSJ7T4djpX1er?=UHMjyN2qF%T zAwOJyFw?#rhN=f8UKd;LOOjV$%uq$Z&af-D;`*2ln#TA33PtFl&WCHp! ziq*Fd=8n4o5nXdr-H)8^ZH<2VL2F$TMlCGK%-eyye2r=sRd~}s4c}Ea9wBaH@vf9g ztj?i?hfhP0vhD~#6gB$qJE8PprCuRZ3WDNGvKJ`N)mgOSDipE-A*woZ%rkJ#Yib^- zjcs7uwxr>`VNqSlqSo{#3-3+S8H;KG*2zB~aMi1GuhzK>2hmSi;s9sHfL-i+R|sIY zGJGf030QbWI^)#7jCdK?{apX#tWk-y zKfx@?_eWcU*D15F4F{_FDfc@w+BKq>heJ%N|zoxj`a8TS!^3BdCOSVD|^a=nPUxiUK8MP_6 z3DoO*(qUD|r9oNX4@+f)HiVLo(k8=5l4{}IGEvRWkiwQZ~D8phsTE!Mgy=dzHHE6gab&CScAlo?$ z2h#YQ63>P5-+R56Zzc%h54Jv1jS2pdT1K;FX~fzFvE+t+VPtH9k!Y9|OCaq?-UGB_ zeed<15c|L!KBJs-+HqZ8Sv?kAn^&EIuVz#qutOGpl+GBdgTgS@fkbag3v$ z;+bhw^i@ZvZjxAZ_!7;2e08BT`Q?;J90HZpr7x zyh|$PCPmRy8JQH=%d{K+a}%j3#zQhtVLcU};+`%ZO0G0(KTK?07b`AOwtG|A7MaIR z{a#7Xh7rE>tg)njKru*O1WMXzm|#TzoRb|!Z~!a>ufrFYSgg`Qec|KL8hXx^_9B9o z_Ba=8ydQ0!@6R&C0b<8VJN0FJtd|%V5f`I)7*aUs!Nex+*Jbt$N)_{=W~*ZLc*z5s zKsT^k@f9Q8>1(B)HRrNIVFGwY#7}~k&Pk)U$12&?q}U*-QAO^c4#3xM(J6%!ki;f$ zzRMWN_h%{@(eLBfqwC{Hiua#WgSZz`pnt{d`$@(c45jZJoFePy$>{DZ>}oi9os@6p z>}6sEotZ<3O0vAoBRGf!=!C5W87wEeAmI=2U#lldD_el^kvK0H5y@39D#sY5V$+^V z{Q613y-Kn;25j-UhRISQrY;{+SmFT#tf`?kK7_OD4LUU0FTlSEjH` z)sKH}!hXo54X&JUq(|t9@)C?$iH`j^JS?OdPSy*$m=gSzB|4=$$|Z!i%!Y9p|1Q{Y zB%FR<^PY%GMf+KTDm$qr_+my*;>wWTGOYyRP53dLyExjdP)C|$G{w~gb=;Z9ik7WC zCQEnjBI%hopl&BnBDMo`@;fR&vvW7G7<7Lp5v&$8-$8@86($;_!ZU3# zLYo`W^{4VcpXrP1y)J)nL&YuJdu29)62{{#JZ>*P98_-11f)1Q@$F+U!Ie!ajtpFp z_ojF5irJg2GrAt@IwTdvfC3lZpBSLo(9d`2^`-9Tk!#z-*{A1|f4n@qI2$9l>D{V| z`*;x)ptLlMB;%W&hfeet)t~3+iK0-gpjoNn9Hwoh30-$mVmt+AY5#SrH zbPJzAu9R8cIcRhN{m>z{o+?HZW5MfoF3@oh`?@93ClVD~FvRJ{Z-efP5*KGnxW%}% zB#SewI+t5qb>RH95KEGbzh$7;f0cxOGCA`V&C!3{b*4W0g{upQE@+-I&Q`kb#p%7g zS~j|vmM)+qDFeFg8w!NHLZmHL{4j(ZLjwzT!Y?$bp_4kTQ-l?$QGHN!A+evn#ua!E z2%Dn!P)1^Mb2*Ed{VFl%1Z3RgP0w$Bg-)WR@bboY0D6xUZIDT2G1n1HPBAOW+N)t0kG? zf}{{>-Kv_sTl4THn5bW0`xbiQgSXkUCbgg@#KlX&ni&4fcH8gmvdG;zy?Kwe)O8Iv z@QH9bAuD{ouF)+GNkrld*>@%RAYrCbdOZHEQKvUGYs5B{8Pzs`{r*n02*ij*NcR*u zrnKvVG^}gfu-Tcv?SxX)205m(nD5*QdMhf`&VzEKb_AZVsA~B-)fOtNo|wzZC3zcm zMqxFO{_&5HU6lE%#wls4H5eWE^&H|#9j~-YzKD*M-9DVvt}FT`Wk9>aq*Xf5977eA z#k^0O;CHcyq=43{L$=98f0(-2b#~@bM|g`Ib7#`-U8I>I{X8Wb1|tEjvYZ0fAqb@v z1TU%1JGO@EH2k$wffaX|^3Js7kWR96JsvpBDbIheM5ac-EOm_((;7<0QuZ*c)!}GR zLL5=9tfeA*wSVy(go|53#F^2ZS*4@Lw`j-OV#25SLzUk)t3@>-!~=!rJE-1)+T4mp zveG(-O5cgsoX5Fm@n@?a;pq{t%u6QuX?|BAwKpV49cHzaKGYosyt}m5l3N`9nI?`Q z(WBgYnyRZ1Ne#f z6tqv2eDK?fq5S3>%k3pIXZ3T7vkFoDEUJZG_e6@WOO%>7 z;8joDFh%?ER#@h@&j#RTXNX3KFI=?{1!o^#E_z)0p!$(fU1j@CQy+4*uSMRcKEE^t zotTeLLmEwKchiy87MX!{>xVd4OpNpGqV-E-1`OZ_c-_HHmfTl6eM2ZODjR#k={;6& zPR47OM#Q^aT@Bv0{xjkH@;T0c3M79IZ2W;|O07&tJZt02w>B%=GfXW)+$Fem5A-Lt^ygDKzcRGe7zr!B z!tRaT-KoJwjAy2yMY(+IV`Cl1R`(+&2V$JbLpqM3b<*fO`}n&%2}a+$xCibPRN#aa zA=B^U&D9ev1T~9P?;4{y2}4|*B!>9@l4c9YIc_J}iKi!O?PhAvvf3YckJ)yQCm2`n z&culML-@+E;cYPuZoSt%r=O{-RJ{zPd8AZ-{MC3uJT6(H9X(PsbekG;+H&+s>yqAY z-{;6%%w$N$jpH%2?FyN-RGhGz5w(QR|1~>$O|)nejHG^fHiY|xM4!$}xH|_+Pz-Dj z-trw>7u$4N?Uy9b1nw~vtR(0~+T28QSHr&tSy9RJ?p7;-v>AbB!+I0)r+2kKlVHbi zzO|?Cq>%H|z`UWP3np#SKVge~aSh(1vIWHKnL#jat*-dI<-kqnG-ZkgX}sQ`l`L?P zeBBet=#^koOOf;}Pky~iE{1O`8PEvV2pDpbOgQB^p@yA@-d#{V?1T}twl=`UH`h-*`0E(f{5mGeQMy)v}Rofh$GuO=Mb#LE{-BDmT^+9_~d zhu7=m?YKAlTkY%wA06S5M&xPtDehw}t)!3VpA>nxOPf*!8oD1W{a7~MRcEn5_y_b7 z7iZF67WvljW1V^RcG8d|a(D&sz^JyPF88=iRs>$jKn~W{(ni9kI_YOcoHCA`DZ-)* zZKmH{I7=2y9mI$kn5-sCRzYKY`m?sCOsm$RJY1Ge6!VXX_Oj{{-s0gsNNzfrpFTtt zk5Hoq_!dpO`>*uc>I$0UTiRUUJ(`%YU|f1HzbQOmhRw>3CU|>*&1Om2HA(wu3R#?S zp?Lt=^UJ$|;gPuYBw0$J=KpG+a8~X;eODcl6SFSW?Xpch~Xy>L}+cqzCgYO7z<2lwW&wH zXt3Vq4m}K;`d2lo=5$;%n`Dj>wBin1q|TUQxaLE}IMK+yr@H_)CA`Fp>tn7TwwZj> zn{uOpu!&JT^TA2{bN!yT!A%zWq<(Go+uaRMETv!~$YS%edZ%<}-YK@;z|DM!3%FJL zfErP^GpdAu5wW8G7z;Y7vX2oPA|~-j>`~NlVg`+Fs5ev9u?fC(4;%3#R>_|B#r!Tm zu=i#V`4h?4WOs}|<>+w(Yu_r_GaP5AlFQ}7;9g6G7YiF?MVts*g7f)-rHOqOp(}4kfQv#mZ3oe2rXmTgoDgh=$4ZoO+ycPv4evc_>F$bjG6OHTCIm%q3-` za=pyxu?o$8%k;$;apuuCUA}3)SJ#V@W0D-N%sS@3GSF<0p@-OQoZkY4^3n#wW^-7k zuF)?qIoY-DDJ32vYjy5xq(8En{dA%W_{kn}u#48&ZCwbrDJL@LivGPE)tGa}1sRK; zA~5UkXDAo$_|AI2-PGmD3+@hx3e1(gU8Z1L&Z<5wN>$pv<*FZNfG_`oBoVRc5g)pc zWE&ArBBn>v!0XoZa5`$}%Fd?!e91;BVw}RpehijKR$a{QN>s@1LcIE$xEz7L zIo3hZ?p#V0Tl2N_jnvGIUsPG2Ar~ZM2U{FN^DPEJw?;~DBr>X>fp0q4KE*Te9owI0 zGj_F?OHs!Ke+4#wztaH$gmOyo_I87>{OSdGV1`6nKVqG*@mBPAWZUQ~f4w8?bv~}a zsM1ix#EQ=#pWa>6tZFmygVc*fMYG=)<#2v5MhzWob+8@3Hi4q^P(xVBG*;6;Z3#D} z05jl%-fRPU-nL>Q`4-g3!=1!X|N1|eWQmaM#P4Nf1Rsu~SoIba&6E&O2qFN$Rz=&7 zalLPqJwN`^o2GTF37$A67`Pg$5`v^xlXxz)tF+)CW8;L5t;B%Y5rNP`ew_k&zW0Ab3OvFCs}OwiR0xA7VJ_m?HHgbiXD&)pMp#ozfCQwc(w+ zc*9Q2!R7&H5#=3_+5|j-v$&E|r`f7bo_;ZL$-HV~4~o|_wAVQ5NEA1nZvE<*{}F>3 z>ly!bzw~w;f<+-$Z~B|OK$6+x^r!W|p?!z)abm4cI-XSo`orM(%W2*1A`Jry z=+lD3XG*MEt&GUF$PzO$F0!68)Zt(gK=>G}vY3Whzq#%XytD#`@yU+3D$Y8ZPHPi> zH`jp!&nnWQNpp?3r;AT($BM7%@~?#eKZwx!2m+=<>K-9S{Dj|3>^u27lI2EELo>qB zdA!Yo(jW=Z@%Ub9Pb+FN9}a4kAD@Mcztrc+zdmB}05+j$H~n;CJcVpsI$FZW4EHp? zGK#^O6@B@h(Wq1FzH|?=eN}Al$a|TVWjXl^AZb;-bN3QtQgaVp#}}UlCCuGwo?|pD z@eJ@}jG`cGJZ9;_=!mZhEx`=a*Euy zmayMAx}zbAhp>K|wqlTQim?*Ow;Cy|ZMp56bzEgATuEt<-R~gtzyB+=*Dd9F38=*A z{Pex{XVhTX2$)P&ZDap<+`jb&v?r4d!o7|GIXFi8H_b;@kKPOKP47i_OiFuJ>%9qw zFw%V%a`Z4~=n2RU)IySKf;$EkfenpO+$S2$cwEBr)v7J@Vm~hNB;}56*?>(0r&L@x zi4bZ4ov0xyPbk}y`HjfK>_}?#rPER;-fAprF)qP3NGiqBn8@S&)5Sw+{`doKWdV*j z@kCy$oT64Uam$u0$qXZpg|9RcO(7*=f(JOk1C8D{$<)bf*qFP#%}jToCLxiVlqim= zqnk{9V#^=VkESp{H$YcNkAdI)1PPpSG+G)xft(OU@U|EH9z4@>fF`&27!R%TmSX}YaFS*vM2&P)@v zT61lgEw`)`v3yd?2vhNkfb7H8lOG+c)I`+glU6EZ1}F-&oVxM@jf8{%%|}rY(GXA& zc(1z*>D~T#cf9_^q2SGZUgv#Y=XL%*ROK5i@*VM$y%YX~3I8Dw(lBZMG{I$ZRACr> z7{ez|v?sCLa7GP*5TTdTC57!ix)Je9s8S_phsrcsE)dhrF*Fb+t(o_eS;4F_Ny*$D z9odH$aX-R~EB*mvb~h|HPnrcbAd$Y_{TJ}^gAc!2P^@gY-rJX4^F!0HJ77j}#jd$R zGQO2BFTw+kJsZt(qlFEtby@gOtw$jKRoD@!{ai3$+}VT)@?APS78~j>{4to*X!yZS zUX1xcLJRbiJV!GEgGg_h>%kSkwPrL-1jmjy+G<#%XGW@;OF>6iMxC7RlDwS(jvYZu z0@wrYl;f3GE?2jEZ4{kuUNe-5J`<5Teg$dYKoq>L_0e^6N_SerAA0zH2h*lmID88g zB(xrCiXP&0>Hy8ZuUO*-cMjQt0*y6>6tE+4FOFPlyq-uuyL2MfxXRL3AqR2!U+0Sn zfSHXt{mX1(HWRh*oAc8F{$P>m7w4UT6H!VlTy!c1XnT%@X!^VepE5??R9Y;V<@u)h z!Q2%<&5yA;tAtyfo%*sVm=r(e!5S;jjpsU6jPfG@<$bc>eLM!7c0mHp(t3&Q``;Q3 zy~&?gu5Gb}@OJGN7S|;cr5?A-y!$r{&2yaei|-umbktQjexDl}w_7_^WSqLr{`I9o z6XdH38iJZ2Z9me`FGdFGv0`PRILu;A!anU|Th{#_{`noui-6KT4+@myZfj9!Y>4)j zqxM#&{%N~JFOu9Y(svih_2@`^VPyzChpVldf1%hy$MKu2?cNPzbT_Uy&m#tyTGu7a z5=Tu9(WbgbFXjv`TKZexvJ(4^It)%2ngNLWDX1l0%`O8+S&OzytFUa z=(}4WUiKDIT_x{L`x^RuOV?&?JxXbK3Cj6UEeCfBoW?Fa zgU+zGZPUf&cUC7u66IPJ$f1p)}>V6$@9K> zWTslsPWh3orcwe3pkXY41_jp}I`D1aiEDFq{bJgF8J0e`14~?KMln9?2LU4Z9Rq(J zyyhGNq$HB#7v~yP^LT(I$`t^xj8E+k1!FgTsAT!MEWrcj2$@o59hMZs7%tSketl6- ziW^KDy69wolO|3=dJRoRY&qBJIbrvkWUv{7&%^ghLxXs^`Xd8zCzFXFvtZh zdb|>&zY~+McKrsLE^G(@!FsQ~;o#NPTyWb)_cdSyWH*vBJ+0&fzNy|H6^>n)xMhut z=1zZer0a?7H7mt9-Pj+@9R7)D(0qQWB>r13BRaxxPxZv9sJ^NJF!Pe?`_>H6@iO|e z2nS`}1eUGALLE(#n4k(C^1%0bq#8BXrkBg6-DB8^b3n6b*DH<8UAg@1l7%LY z&YP_dvUhv=oylqOT?+sXw+o^68cY$_TkP~apq6R355xr=3I?>s0U_BJBNGj+MKZsH zPIIq*w(2Z|O8U-bxDQnTWEm?p-fR3aabCw%vFB!cLO;g)Yj|*$zb~&5vu1}g zr3D{?V`)Y`%gTwMt}Y5Fn*7}f z1mhx7dmAaJNgCO90+uRmCowye&|p9(=`Hh7-5r9STaoma@11u;gDk}g&Y1x>?nT?M znjzzn{Vzl64*6N8R$m%ZMrN0SwtL<3i1*q^K*1VSyP8N7vu*cFNK7&vZSw`$u^K2b zi9DWrKc<_)ZwftC;wZgL*`6E!!$)9PO-0t|3n#`Yq8qH(W@c4er~qgczSW9L5-lEQ zZGD(zoctwziCX0I`A% zZv!)oaMJuzFrlD1>RvQIqZqZ6GH~j{xeU8;yxo}4lU7Db6okd=7rf?^l>8h8Gf8R8 zL5mnv(0PMBp`O2@1T4lk8o9x^tsy2%nV-6cF5h-Uxx!G&VY z)`h;-YRMJYMEKr&Z$|=eOWI#}IlV>O%GcfJjP4s7Ju^lRDJn;iXO&BS{TS#e-J0+L zF#=F>HSqz@C59gQGbd2daB4M{8?3-?rV&qIU#4XTNaBD0bf^LV<^JA@f!}`dxYcHi zIhrn-Gx$-KoU}H(5oy0^xQ|hg4SyX96zF>zIdzu>{K zmgh@Pf%!pZR5uM3;x+W2YpEJK+AJ+3Sm+BBzTo zJ&%~pN>vD_RCE%S( z7Yo*B6F<>v32zkq<*)?%qsw}wHH48>8gw05RyPbZYHgo@quzwft*K@PTs?Ry&2l>> zWYSZ7cxrxhuXJB`-SV?y;qR8_8<`d$7n+a$`E~$qb|;_QZ=K78CE(9mT6n-)H^-x> z{mI>EMiT#wXRhvim_MR+UDNATPhl8Vd)gpz)ELP~(I5@`ClC_BO%_Y1Fd(eU(D3Ql z)X8ngHZeLWe9BcP&!x%PNUurPkY{QUVXCFwAHD69HPt$oxttWv^u~FuHp6YG?rc~> zMnBNW3Nc^|5GT6NR|&-F^F~%-0yGfQzg&ls-jltPk+e8nWnZY@i^P*9`@k9^m-y-2 z0n5dsZlxI)dMAY?Td_vYl zf+{GWjhDjf3TrnO5T#G29!Ne;Z`ah0mLtD+T0>}U`m%-L{el`*OL%_jV7|<3*s-q|+7sp)4|gplUkC4sA8W>kBwC0N>`T#SBi*9|Vnlj7-&k zkQ+L3LwH(BR7cy%R&(N~f{UU!(MAGrj3PuWH&w{L!rKo*j$OO3Yuo?KhT6P4?Ix%? zzsX?ZpHq}!0lKaT{p0ok-St5g9x+Gc9n9hLG3&J(Jzf^<1=dclbC~d_m}9=Sd$nGt z!W6;;3R#dRI~>e=t}oT`%_T~I*YNBl=uFpk^@_E5C?(`)5umvvYpR9r{4@v17>^8U zry?kEXRcm7g$TM-sKf()6rhXtIk-aHf4WNC7uGCR`2?6rvxgSVfF^H1h`%k(UI$Q$ z>}MZuKD9dLUZqTn&);m)+@PXNxgG)AtAgQdTm92!JG3rln{@!ko1pJr~Z#=*?`gQUH~w~t2A zXHT5$>BnWM6s?ynKSEC?@)o(}#3(5&PGKj|uy`1w`v=5#WLp%kOhbzBZiqIaU+iV> z7O8}MGA}W(e+Io;zbkfykNIKrQTc-F$~&FF^# zGG(ZtP7VCWc01V%H{O-WWG~7b6iFn0mpdw=Btz;x#ZSnFyNQfh3^F#j+7yzO^#D7` zK)2mAYd7=g06?ynoYk3Q25-Z(Cn)^C0BQd*_4&NPMjIS>f*)S5HhY5%{|NN`U7(2UT-jvHoZpu+|`5Fv@UpPzO$br=I zo)Th^*+n-)hEG%4y1!7%C(H+46;m|*Irdx21eE6Zy-EOG7oS*-UVQ~iZ)?O~I~89; z|FVbJOnEYAP;q9Cm!z(o<{c6wDvki}KJ2I&$&V4b@Dizdwfu0*EVD%gjw-T=}Pniv+q=Qla93jt}lo%}E#k`1Yp!6X~Mra!BKep*$ep^=%iF>dnx6Xffj0 zzVDd>`ao#@>7-z@Z#V;4bX!6IPV>lzi#&jRmC(P5~9(wXhO>dkfH^Ow!7vj3UM6H=tU$`cmM7Ma9EfJ$m=%R zi|74sDh_jjX9zEmMicam0M{mzE?0>mQixRQ`+JzIs({H-O z$nb0|Uo{I6@pgjDgo~@+&y-amQ&miUefcn~#L#^V%& zP-0-Zq_t%C^R3p0ugL%sJ}UWtUHld(oP#E}sw7d;b$5iWzxI$J{~X%}#Q91!SGG8{a1{609=+&FR_q})6d_!kD7n{pm?0Cv3t8d+ZPWj>hxP6XdR$wcFdT$GqZW((eqN zxU^7{Lj`oPI7J-Go})kBsuFs%cVHCYPt6Dkm2PUQ(z>8#CQ~zLE^5oG1Q$KY6q)&l z&$M6Rw7F|RZ|iEY&{9)A1nkdbNk)8(u9BnV8mJcuz(ge^z$b(s%APvSOaGn?{}ng~ z03T1*taHGD??DPt#bsq?1BdV}AeF06C))nGm`qt_fLXDB;g20Ps3O|G31vK z9Z`4ri{jzYJsuXtNd?KFGT!+S?g8$WF!9O#?)`-r!d2|^n0F252bO=^U{N=+#8N6b zSZ4n(eT{n`nPa{64+q3jJulmCI8)VcTil}j{fy@UP2CB`z|kULONbAUf1- Az@w z35SDSmak-DPng|P6U1`oaLj)-Q!^V^06!Bi-=pl<*v%8=c1ieOqAt4ymZPlZ0)YsP z@j6t0qKTA^RSBJj8G_v-om95j3PKhjm71aB=4q1&tzd!ZB2<$M#>CO}^b;$8p1a=a z*0SXy<1bey!yW&)k+CQCmn!%zg}ZcP%9GX?KD}0m_f0T-zUhI(5IH_p4*oP-lFi+1 z_dHYSBI!?5A?7o7$#0TnXYp9v<%}~F&wT6z*?H;R4b)DC7d@#huahVZpD0wlmt zFX25g`+_x~3(|UpTr(@EGpX$p))NS0oILjVrh2++FymX%p|)) z{?etB8(|2V{bH@d8W*p%<<4GZBITYyVG%}RHNR+nF%~Yzw~P6L5$N_Z$z3v)X{G=6 zg`B{JNH$9xZrW64KHqgBwJ4HC@sJH3`rPuRm7l-%GxuZYPDZDI8J}H2_h^WJ_hr*` zfRQNC2)B8fjzWO$3hly)UVo0F1G3oeth2D)@`LQwpLvn|UA{jgh%)Y@fgHKLg}l+Z z^QM3LDz~fwtm&vTHU%=)*XWVB@xM{dHiA z9Vj!cpQ+yURLys`_RH6LZ z1xqOJeQ!4I3R;M~YhRe%-MhvAcq?$4U3+Xnx_=Y`f%NSj^rE8GsVf$Vt^A5qC`~*@ zpU6~e1_dYzcJ|YM^9qaoawCo{xDXYYsm|ajaEva`>Q8%6u+)V1Xq=~U52r9>pn~b{ zJsYEJ5F;Fmdd;jQzY365Qq=KfW(hE}zH+4%6O^byw>_6SM$9o%^ zruetpzi@&rTSE;&ai7CP>a39{8XBEBl7f{bn|7*L7Z7kP4n3>b`^4`PAV>0Q?)-Q* zj5A*+t@-1XANujvR(x<(mXV6MNqt7F!joL%;U8N0&+G7aYga#fR!1Uv#%vR!XFoi* z!?5_hDGy{U{c_J==tq>6dw{jo_&*;vf60AXe?y#TEywX%Z^n)tf~7`A!iC?VNu6QU zQfjqmw)tNV9xlV0|MUO1C~mQ--tqWL{%~uTA<@MVlny`2g3MqYc13XONM+w_L1cm` uEA)DjS$d{HmcpJM2-E7AUT{7gvpZlJ;cU4A?E?cpyLavVn!F?Y-2VXN#$0s( literal 0 HcmV?d00001 diff --git a/docs/docs/guides/integrations/imgs/instructor/instructor_weave_model.png b/docs/docs/guides/integrations/imgs/instructor/instructor_weave_model.png new file mode 100644 index 0000000000000000000000000000000000000000..79545baab09fc2b51d9946b789140f17c5cbb0ff GIT binary patch literal 204362 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%0ANf=Umu6)>EG2270RvB6P! zg-&x)ozqBvV+{R&g(3a{x(-zdwP7hlvZr%dXnXCxC}Fp$(zc&FHn*lPltLGISJdAL z$Gn*6co4>WHwkvuTRK|NIR+i5u^V8Ert3f8CCfsxQ0i{!$cbGUTQB)#xTPV%EU6Frg0Ul|BeivKxN>;xo`=gPk z`Y-z?L5-1`U=)+g4K;6_jF_sX&!*)$U*?&b5`zb-8OyH0W+pxv>3-3#ukjUHJoL=U zrQ^N6;(`ZK=$KMc-~CfK;&0K3n~m)uY$~9!imfn-!DwRe5S0UD_mv@w ze!4_8;cD~k!qOs4+hm7CPBFXl#RU#DbM`IzH+IeLUMH+sM@xHKnemRGU(DF`QRF!A z5lhfnHCUw_Q30qpx*lDXHq06{x!o-2`b}~1eiSVi&qAvYhF2;zql>{Y-V2qniaul^(aWuN7vRPeR?swLU7EI;xt9Fkx=pT9n>Le zR+K0TeFhky=WRlk5MzB0=>g_eN@MNn0_ z#ew=}(=CQ3;QNrnO>JK=FIBx2g3UMg`k%(&CedXi-s!#%1et@beF@#GXV(S38)FVywM5LdmgM9}+h(fg$aEUn zS{w->M#`f>8A7%8X!8+9I(YF>MS9i?L8vi2l47(IevnVfl0bNV>ZjG2Gl?>(3wTb+ zB7=v8BdZvG3n!WB^-(K2?zn;1Zz@O7@73jS2cNgX(b+C}AZd(o2`Nc*r(QDDdF-!5S3T^gx zywDwT75OLB;o{bBB@HP5J*m!ko{Mx=wro9iJh0&&krOQYy`XW>TIb7=>|IN@U~Y({ zaFD(HX3-t^z2^HKrQsJ+&o@;u^gJ$gTJFF+&r0?tOk((W{Quw&?9T*UMe&w-3@d3oHB#KN@}V z6TmS=i+{8ag&+IvCUyrEN%OUC>v%Ga1?H9S)L5?63bv1vO_^_Z(9#y>O>any1e|oF zp-yUIQ@@NJ=8Jv$EX4v7>skBl$Q3lF<3ItDNo z{D?_DDLzYVL~Ka8&);qC$u_BC$AGs1adC|=iUJ1SGw*6Jh@}{dd*y>`z3f8Ov zESS9gWOhubjJ-kmbTB7R_kRageVNVRO>^^3z;E*1O0D z??7Q`8iT5RJ}y>1I#Wo%!Zx3Ly~Dqidq5{Bl5jr!js^jp2vIAUo9d z_wu@&g=L$t3>N?{km?@oFl#;9CG9ajeM%ZOep77vTW|5EsIe=%K}GidO1$jskjwlB zZRiWxYCJC7>QT>7j>Gr2c;~8B$ z^@_fTZNf*3R;_h)ExIFyODNmQol>8V*7ysd*^2+f4qCo>Jah%&w0l8nQsjc8yp^wW zPsS&ea_b93tX}w86}zYkde_T-u2jsg?RZ`HceM0=L{9WhsqL#eS^n;u=2~{(Bu|H03T=5_QsZK9cVnB*_x*jF(ln^8 z|4vhgo@=yV5OLw?xXlkG z4)3=aOzD|S!OGmv&tjic!A_L0&(a485l@60YTWe0?;>5zu?unbpD7ngSP0EZ0O!Q#_f-VgRj23 zyY@f-gUu)8-p#u)dK3jaS!bjd_xs$ozXiO0abq4lw9t@NMUvc+HqB~ATt!pdc=Av; zZ%&Hf)$TFezx>%kt3B2a$O(M?_cc#9wU?$yJM464>>B)N&Vjvt&gFJ|?%qi(FpN0@wNqi><>0kuK=vVaK3Z+s&oW{1uMy zo%W~yMvi2oIYVYhm7#2r?iBZvc>~{Bqe^z69nqs|2HjlGo z_YKqv#b^$N_mhF^$sB#T0I)&`i=>_0+H;zI-x{avj(TRaUTn7Kut89bRnMrc;Lx}{ zRjWW@Sme5>ZFH`%_m6tf;6S|Jva;kJ5qpN&Vx;$%2QND0M)XGU)J% z$@d#;10ccu>+hF*I{dvy1^GQU_^ZUo!jMNCrZY7~MXo60e0(LC{s;fe*7?glKE67b z!MYG)Y!BMOk4EZpUMO&?MAU822UVYR-r}4zLO%GVV|B)fAsivGeX%WM5^;KVFxa@J zTt^qU-k%Xj9G$x*5p;Akwco?psvd-bU|NLz`jaFMj37{5z(!#mBrV}ðE63+u{= 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 z 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 literal 0 HcmV?d00001 diff --git a/docs/docs/guides/integrations/instructor.md b/docs/docs/guides/integrations/instructor.md new file mode 100644 index 00000000000..14af92ed394 --- /dev/null +++ b/docs/docs/guides/integrations/instructor.md @@ -0,0 +1,164 @@ +# Instructor + +[Instructor](https://python.useinstructor.com/) is a lightweight library that makes it easy to get structured data like JSON from LLMs. + +## Tracing + +It’s important to store traces of language model applications in a central location, both during development and in production. These traces can be useful for debugging, and as a dataset that will help you improve your application. + +Weave will automatically capture traces for [Instructor](https://python.useinstructor.com/). To start tracking, calling `weave.init(project_name="")` and use the library as normal. + +```python +import instructor +import weave +from pydantic import BaseModel +from openai import OpenAI + + +# Define your desired output structure +class UserInfo(BaseModel): + user_name: str + age: int + +# Initialize Weave +weave.init(project_name="instructor-test") + +# Patch the OpenAI client +client = instructor.from_openai(OpenAI()) + +# Extract structured data from natural language +user_info = client.chat.completions.create( + model="gpt-3.5-turbo", + response_model=UserInfo, + messages=[{"role": "user", "content": "John Doe is 30 years old."}], +) +``` + +| ![](./imgs/instructor/instructor_lm_trace.gif) | +|-----------------------------------------------------------------------------------------------------------------------| +| Weave will now track and log all LLM calls made using Instructor. You can view the traces in the Weave web interface. | + +## Track your own ops + +Wrapping a function with `@weave.op` starts capturing inputs, outputs and app logic so you can debug how data flows through your app. You can deeply nest ops and build a tree of functions that you want to track. This also starts automatically versioning code as you experiment to capture ad-hoc details that haven't been committed to git. + +Simply create a function decorated with [`@weave.op`](/guides/tracking/ops). + +In the example below, we have the function `extract_person` which is the metric function wrapped with `@weave.op`. This helps us see how intermediate steps, such as OpenAI chat completion call. + +```python +import instructor +import weave +from openai import OpenAI +from pydantic import BaseModel + + +# Define your desired output structure +class Person(BaseModel): + person_name: str + age: int + + +# Initialize Weave +weave.init(project_name="instructor-test") + +# Patch the OpenAI client +lm_client = instructor.from_openai(OpenAI()) + + +# Extract structured data from natural language +@weave.op() +def extract_person(text: str) -> Person: + return lm_client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": text}, + ], + response_model=Person, + ) + + +person = extract_person("My name is John and I am 20 years old") +``` + +| ![](./imgs/instructor/instructor_op_trace.png) | +|---| +| Decorating the `extract_person` function with `@weave.op` traces its inputs, outputs, and all internal LM calls made inside the function. Weave also automatically tracks and versions the structured objects generated by Instructor. | + +## Create a `Model` for easier experimentation + +Organizing experimentation is difficult when there are many moving pieces. By using the [`Model`](../core-types/models) class, you can capture and organize the experimental details of your app like your system prompt or the model you're using. This helps organize and compare different iterations of your app. + +In addition to versioning code and capturing inputs/outputs, [`Model`](../core-types/models)s capture structured parameters that control your application’s behavior, making it easy to find what parameters worked best. You can also use Weave Models with `serve` (see below), and [`Evaluation`](../core-types/evaluations.md)s. + +In the example below, you can experiment with `PersonExtractor`. Every time you change one of these, you'll get a new _version_ of `PersonExtractor`. + +```python +import asyncio +from typing import List, Iterable + +import instructor +import weave +from openai import AsyncOpenAI +from pydantic import BaseModel + + +# Define your desired output structure +class Person(BaseModel): + person_name: str + age: int + + +# Initialize Weave +weave.init(project_name="instructor-test") + +# Patch the OpenAI client +lm_client = instructor.from_openai(AsyncOpenAI()) + + +class PersonExtractor(weave.Model): + openai_model: str + max_retries: int + + @weave.op() + async def predict(self, text: str) -> List[Person]: + model = await lm_client.chat.completions.create( + model=self.openai_model, + response_model=Iterable[Person], + max_retries=self.max_retries, + stream=True, + messages=[ + { + "role": "system", + "content": "You are a perfect entity extraction system", + }, + { + "role": "user", + "content": f"Extract `{text}`", + }, + ], + ) + return [m async for m in model] + + +model = PersonExtractor(openai_model="gpt-4", max_retries=2) +asyncio.run(model.predict("John is 30 years old")) +``` + +| ![](./imgs/instructor/instructor_weave_model.png) | +|---------------------------------------------------------------------------| +| Tracing and versioning your calls using a [`Model`](../core-types/models) | + +## Serving a Weave Model + +Given a weave reference a `weave.Model` object, you can spin up a fastapi server and [`serve`](https://wandb.github.io/weave/guides/tools/serve) it. + +| [![](./imgs/instructor/instructor_serve.png)](https://wandb.ai/geekyrakshit/instructor-test/weave/objects/PersonExtractor/versions/xXpMsJvaiTOjKafz1TnHC8wMgH5ZAAwYOaBMvHuLArI) | +|----------------------------------------------------------------------------------------------------------------------------------------------------------------| +| You can find the weave reference of any `weave.Model` by navigating to the model and copying it from the UI. | + +You can serve your model by using the following command in the terminal: + +```shell +weave serve weave:///your_entity/project-name/YourModel: +``` \ No newline at end of file diff --git a/docs/sidebars.ts b/docs/sidebars.ts index f999d0cd469..8958265ada1 100644 --- a/docs/sidebars.ts +++ b/docs/sidebars.ts @@ -102,6 +102,7 @@ const sidebars: SidebarsConfig = { "guides/integrations/langchain", "guides/integrations/llamaindex", "guides/integrations/dspy", + "guides/integrations/instructor", ], }, ], diff --git a/requirements.test.txt b/requirements.test.txt index 922e5166afd..525f0216db3 100644 --- a/requirements.test.txt +++ b/requirements.test.txt @@ -24,4 +24,4 @@ semver==2.13.0 # Used for switching logic based on package versions flask uvicorn>=0.27.0 -pillow \ No newline at end of file +pillow diff --git a/tox.ini b/tox.ini index 388604149ec..da3ee75cc7f 100644 --- a/tox.ini +++ b/tox.ini @@ -14,7 +14,7 @@ deps = commands = pre-commit run --hook-stage=pre-push --all-files -[testenv:{trace,trace_server,anthropic,cerebras,cohere,dspy,groq,langchain,litellm,llamaindex,mistral0,mistral1,openai}-py{39,310,311,312}] +[testenv:{trace,trace_server,anthropic,cerebras,cohere,dspy,groq,instructor,langchain,litellm,llamaindex,mistral0,mistral1,openai}-py{39,310,311,312}] deps = ; TODO: split out test deps {[testenv]deps} @@ -23,6 +23,7 @@ deps = cohere: cohere>=5.9.1,<5.9.3 # pinned because of breaking change in 5.9.3 dspy: dspy>=0.1.5 groq: groq>=0.9.0 + instructor: instructor>=1.4.3 langchain: langchain-core>=0.2.1 langchain: langchain-openai>=0.1.7 langchain: langchain-community>=0.2.1 @@ -48,6 +49,7 @@ commands = cohere: pytest {posargs} integrations/cohere/ dspy: pytest {posargs} integrations/dspy/ groq: pytest {posargs} integrations/groq/ + instructor: pytest {posargs} integrations/instructor/ langchain: pytest {posargs} integrations/langchain/ litellm: pytest {posargs} integrations/litellm/ llamaindex: pytest {posargs:-n4} integrations/llamaindex/ # parallelism seems to resolve CI test issue... diff --git a/weave/integrations/instructor/__init__.py b/weave/integrations/instructor/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable.yaml new file mode 100644 index 00000000000..98d3f0ab801 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable.yaml @@ -0,0 +1,114 @@ +interactions: +- request: + body: '{"messages": [{"role": "system", "content": "\n As a genius + expert, your task is to understand the content and provide\n the + parsed objects in json that match the following json_schema:\n\n\n {\n \"$defs\": + {\n \"Person\": {\n \"properties\": {\n \"person_name\": {\n \"title\": + \"Person Name\",\n \"type\": \"string\"\n },\n \"age\": + {\n \"title\": \"Age\",\n \"type\": \"integer\"\n }\n },\n \"required\": + [\n \"person_name\",\n \"age\"\n ],\n \"title\": \"Person\",\n \"type\": + \"object\"\n }\n },\n \"description\": \"Correct segmentation of `Person` + tasks\",\n \"properties\": {\n \"tasks\": {\n \"description\": \"Correctly + segmented list of `Person` tasks\",\n \"items\": {\n \"$ref\": \"#/$defs/Person\"\n },\n \"title\": + \"Tasks\",\n \"type\": \"array\"\n }\n },\n \"title\": \"IterablePerson\",\n \"type\": + \"object\"\n}\n\n Make sure to return an instance of the JSON, + not the schema itself\n"}, {"role": "user", "content": "Consider this data: + Jason is 10 and John is 30. Correctly segment it + into entities Make sure the JSON is correct"}], "model": + "gpt-3.5-turbo-1106", "response_format": {"type": "json_object"}, "stream": + false, "temperature": 0.1}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '1438' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//jFHBitswEL37K4Y5O4uVNPE2ty00h7TQQw57WC9Gdsa2GllSpQl0Cf73 + RXYSb6GFXjTovXlPTzOXBADVEbeAdSe57p1ePD11y/3+B+++/XJfvp92B/PcHrpDK7/uKodpVNjq + J9V8Uz3UtneaWFkz0bUnyRRdRb7MhVhm+XokenskHWWt48XqYb3gs6/sQohsc1V2VtUUcAsvCQDA + ZTxjRnOk37iFLL0hPYUgW8LtvQkAvdURQRmCCiwNYzqTtTVMZox9KQxAgSzDKRTxtXgHuEwlUo58 + sKY0sqfYUOBeBmsKTOcW2Y6UyCZoSP/DxHZ/9VjdPGJ5LczwMben5hxknJs5a33Fh/sgtG2dt1W4 + 8ne8UUaFrvQUg8dPB7YOR3ZIAF7HgZ//mCE6b3vHJdsTmWi4zMXkh/OOZ/ZTfiXZstQzvhKP/1KV + R2KpdPiwNpwSKtPODtk95vhPDG+BqS8bZVryzqtpi40r6VFU688NbTaYDMk7AAAA//8DAN7elovP + AgAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c35c96f843ce2-BOM + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 23 Sep 2024 17:21:16 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=1EoBqMH6z5i5b9Dnsbku.cMXcPzgMO0opMqW1IeTQPk-1727112076-1.0.1.1-SGQPbiqW8tBjH2NOggqNwct59sR9pUOoEa4tpeNywqxF9H4MGWFxBGAEvt7GLcaWmRQC4UnXtJcBuyZmKimtvg; + path=/; expires=Mon, 23-Sep-24 17:51:16 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=ZAtLa9awh4NjsL.T6gVANVbrCu667uXx5Bq6weu7cpY-1727112076529-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '477' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '50000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '49999699' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_eb5cee6c7643db21b83cf890466e34e4 + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_async_stream.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_async_stream.yaml new file mode 100644 index 00000000000..846b60ebb93 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_async_stream.yaml @@ -0,0 +1,268 @@ +interactions: +- request: + body: '{"messages": [{"role": "system", "content": "You are a perfect entity extraction + system"}, {"role": "user", "content": "Extract `Jason is 10 and John is 30`"}], + "model": "gpt-4", "stream": true, "stream_options": {"include_usage": true}, + "tool_choice": {"type": "function", "function": {"name": "IterablePerson"}}, + "tools": [{"type": "function", "function": {"name": "IterablePerson", "description": + "Correct segmentation of `Person` tasks", "parameters": {"$defs": {"Person": + {"properties": {"person_name": {"title": "Person Name", "type": "string"}, "age": + {"title": "Age", "type": "integer"}}, "required": ["person_name", "age"], "title": + "Person", "type": "object"}}, "properties": {"tasks": {"description": "Correctly + segmented list of `Person` tasks", "items": {"$ref": "#/$defs/Person"}, "title": + "Tasks", "type": "array"}}, "type": "object", "required": ["tasks"]}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '876' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: 'data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_yKoDN0sZgGc9gjgUmzInT5oT","type":"function","function":{"name":"IterablePerson","arguments":""}}],"refusal":null},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tasks"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + [\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"person"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Jason"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"age"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"10"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"person"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"John"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"age"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"30"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + }\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + ]\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null} + + + data: {"id":"chatcmpl-AAhDecOfxIQrd0zSojRomeBT6E0E1","object":"chat.completion.chunk","created":1727112778,"model":"gpt-4-0613","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":97,"completion_tokens":47,"total_tokens":144,"completion_tokens_details":{"reasoning_tokens":0}}} + + + data: [DONE] + + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c46f14fb73ce2-BOM + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Mon, 23 Sep 2024 17:32:58 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=RV.KIezlehSncF2ieF72rG2OhdRoc6GuN6jvb7U.FU8-1727112778-1.0.1.1-pxAxRPeZMDTjP3DheGXE68D3v0jcCGUysGxnm1kXm4J0OHJsAjvcbhMJyFB_kHQhmRUazIP_OrhiKltvtU94Rw; + path=/; expires=Mon, 23-Sep-24 18:02:58 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=0TpW_1hdyZGoFpUY5JXFFuGrjU9H.nFiNHT81lAMQxA-1727112778955-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '178' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '1000' + x-ratelimit-limit-tokens: + - '600000' + x-ratelimit-remaining-requests: + - '999' + x-ratelimit-remaining-tokens: + - '599961' + x-ratelimit-reset-requests: + - 60ms + x-ratelimit-reset-tokens: + - 3ms + x-request-id: + - req_3481823a78709f99af989fef4709ad0b + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_sync_stream.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_sync_stream.yaml new file mode 100644 index 00000000000..735b8836579 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_iterable_sync_stream.yaml @@ -0,0 +1,268 @@ +interactions: +- request: + body: '{"messages": [{"role": "system", "content": "You are a perfect entity extraction + system"}, {"role": "user", "content": "Extract `Jason is 10 and John is 30`"}], + "model": "gpt-4", "stream": true, "stream_options": {"include_usage": true}, + "tool_choice": {"type": "function", "function": {"name": "IterablePerson"}}, + "tools": [{"type": "function", "function": {"name": "IterablePerson", "description": + "Correct segmentation of `Person` tasks", "parameters": {"$defs": {"Person": + {"properties": {"person_name": {"title": "Person Name", "type": "string"}, "age": + {"title": "Age", "type": "integer"}}, "required": ["person_name", "age"], "title": + "Person", "type": "object"}}, "properties": {"tasks": {"description": "Correctly + segmented list of `Person` tasks", "items": {"$ref": "#/$defs/Person"}, "title": + "Tasks", "type": "array"}}, "type": "object", "required": ["tasks"]}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '876' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: 'data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_5C68pa78XTrguTqDSSpnTuuE","type":"function","function":{"name":"IterablePerson","arguments":""}}],"refusal":null},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"tasks"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + [\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"person"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Jason"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"age"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"10"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"person"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"John"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"age"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"30"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + }\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + ]\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null} + + + data: {"id":"chatcmpl-AAh8f8dO3eseWaihyXtokkuQeRWN8","object":"chat.completion.chunk","created":1727112469,"model":"gpt-4-0613","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":97,"completion_tokens":47,"total_tokens":144,"completion_tokens_details":{"reasoning_tokens":0}}} + + + data: [DONE] + + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c3f673b8a3ce2-BOM + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Mon, 23 Sep 2024 17:27:50 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=tp_0SEmO3lIuMLs3GzQVq0SWSyEU91_A5OQyc3ClE_Y-1727112470-1.0.1.1-tI8XGnZOVH39Fvf6jqSzr8mUaU60hwaADDxWX4.HxRyVPESrQxiNPWDVgMH7.VdMq0eo9REnpmku9i_i1xg2UA; + path=/; expires=Mon, 23-Sep-24 17:57:50 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=om4ZL0M3JLFCC86YgdfjhoqV4ec_dkzVnDAt_cJcqbg-1727112470301-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '368' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '1000' + x-ratelimit-limit-tokens: + - '600000' + x-ratelimit-remaining-requests: + - '999' + x-ratelimit-remaining-tokens: + - '599961' + x-ratelimit-reset-requests: + - 60ms + x-ratelimit-reset-tokens: + - 3ms + x-request-id: + - req_d8e550aa67f480dd4c0e025bd768cd23 + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai.yaml new file mode 100644 index 00000000000..1c445b4b815 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai.yaml @@ -0,0 +1,104 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "My name is John and I am 20 + years old"}], "model": "gpt-3.5-turbo", "tool_choice": {"type": "function", + "function": {"name": "Person"}}, "tools": [{"type": "function", "function": + {"name": "Person", "description": "Correctly extracted `Person` with all the + required parameters with correct types", "parameters": {"properties": {"person_name": + {"title": "Person Name", "type": "string"}, "age": {"title": "Age", "type": + "integer"}}, "required": ["age", "person_name"], "type": "object"}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '532' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAA3RSy27bMBC86yuIPduBpCqwrZuRS5HGQB9GkqIqBJqiKLZ8gaSKxob/vSDlSEqa + 6CAQM5zZ4e6eEoSAN1AiIB32RBqx3G7Z3cPm8fGm6PY7vStYdvexJftVuzt+vYdFUOjDL0r8s+qK + aGkE9VyrgSaWYk+Da7bKV1m6KfI8ElI3VAQZM3754ep66Xt70Ms0y68vyk5zQh2U6EeCEEKn+A8Z + VUP/QonSxTMiqXOYUSjHSwiB1SIggJ3jzmPlYTGRRCtPVYiteiFmhNda1AQLMRUevtPsPDUKC1FL + fGy+HD9tb/ffyPc/hbpXD+v8JlvP6g3WTyYGantFxgbN+BEvXxVDCBSWUfuZWvefEiHAlvWSKh9S + w6kCE+/VQVZBWcGt7lQFiwowC0CenuGFxTl56/xz1hhL295hcenYBT+PIxCaGasP7lVHoeWKu662 + FLv4MnBem6F2qBMrQP9iemCslsbXXv+mKhiui8EOpuWayOyyBuC1x2LCN++K6oZ6zOOAx50a8nHF + JoN0DBlfCe7JeSrrlitGrbF83J7knPwDAAD//wMAtB419TwDAAA= + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7bf503de3a3b03-BOM + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 23 Sep 2024 16:37:03 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=j.LQ49HgJuEVG9GOnvuCVo81abHbWY6tGa1JHgmING0-1727109423-1.0.1.1-VVDNNspWrxDz88qnnUcwNVeLPDDZFyOVxKpghn_k1RDakqCnHnTOtpa7N8bPAdRW.QhAunUwQ5qVTSRIubL0Ug; + path=/; expires=Mon, 23-Sep-24 17:07:03 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=pivsbW1_zLGfnWMV5_MySRNphKbolJWTn3IAKXQbleQ-1727109423263-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '273' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '50000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '49999972' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_a225699b08c44f56c52864f273816c6e + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai_async.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai_async.yaml new file mode 100644 index 00000000000..d6be07b15f5 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_openai_async.yaml @@ -0,0 +1,104 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "My name is John and I am 20 + years old"}], "model": "gpt-3.5-turbo", "tool_choice": {"type": "function", + "function": {"name": "Person"}}, "tools": [{"type": "function", "function": + {"name": "Person", "description": "Correctly extracted `Person` with all the + required parameters with correct types", "parameters": {"properties": {"person_name": + {"title": "Person Name", "type": "string"}, "age": {"title": "Age", "type": + "integer"}}, "required": ["age", "person_name"], "type": "object"}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '532' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: !!binary | + H4sIAAAAAAAAAwAAAP//dFLBauMwEL37K8Sck2JnE5L6ltKWsuyh0IVC14tRnLGtrKRRJXlpCPn3 + RXJqu91dH4x4T+/N08ycEsZA7CFnULXcV8rI+XbbpttHseSr9f3bDr+9PD20m9tjvflt2ieYBQXt + Dlj5d9VVRcpI9IJ0T1cWucfgmq0X6yzLrpeLSCjaowyyxvj5l6vV3Hd2R/M0W6wuypZEhQ5y9iNh + jLFT/IeMeo9vkLN09o4odI43CPlwiTGwJAMC3DnhPNceZiNZkfaoQ2zdSTkhPJEsKy7lWLj/TpPz + 2CguZflyJ57p9qDlUijFb24Orw/b78/0OqnXWx9NDFR3uhoaNOEHPP9UjDHQXEXtI1r3l5Ix4Lbp + FGofUsOpABPvlUFWQF7AV2p1AbMCeBOARXqGDxbn5F/nn5PGWKw7x+WlYxf8PIxAUmMs7dynjkIt + tHBtaZG7+DJwnkxfO9SJFaD7MD0wlpTxpadfqIPhZtnbwbhcI5ld1gA8eS5H/Pq/onKPnos44GGn + +nxCN6NBOoSMrwR3dB5VWQvdoDVWDNuTnJM/AAAA//8DACuVNqU8AwAA + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c3285dc643b03-BOM + Connection: + - keep-alive + Content-Encoding: + - gzip + Content-Type: + - application/json + Date: + - Mon, 23 Sep 2024 17:19:02 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=axFlmGEImB8xYgNAlOHn0PA.3_yhzEnZga0Ulq3XbjI-1727111942-1.0.1.1-Gck7mmZR8ezruowfNj6T9iyUZmhDwTTvzGpTroKv_j6VrVnv3iS4Alx5Id.SFtKAEHyapk_K3TzctvUTQgVT9g; + path=/; expires=Mon, 23-Sep-24 17:49:02 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=TKirprXXPVHcVRnJ.G0ouSAoTgf.0J.mikpv6dfvMcg-1727111942660-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '249' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '10000' + x-ratelimit-limit-tokens: + - '50000000' + x-ratelimit-remaining-requests: + - '9999' + x-ratelimit-remaining-tokens: + - '49999972' + x-ratelimit-reset-requests: + - 6ms + x-ratelimit-reset-tokens: + - 0s + x-request-id: + - req_4ae23d1f2333cbd1fbf4fcccf6745bae + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream.yaml new file mode 100644 index 00000000000..82d777f1500 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream.yaml @@ -0,0 +1,629 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Get the information about the + meeting and the users \nIn our recent online meeting, participants from various + backgrounds joined to discuss the upcoming tech\nconference. The names and contact + details of the participants were as follows:\n\n- Name: John Doe, Email: johndoe@email.com, + Twitter: @TechGuru44\n- Name: Jane Smith, Email: janesmith@email.com, Twitter: + @DigitalDiva88\n- Name: Alex Johnson, Email: alexj@email.com, Twitter: @CodeMaster2023\n\nDuring + the meeting, we agreed on several key points. The conference will be held on + March 15th, 2024,\nat the Grand Tech Arena located at 4521 Innovation Drive. + Dr. Emily Johnson, a renowned AI researcher,\nwill be our keynote speaker.\n\nThe + budget for the event is set at $50,000, covering venue costs, speaker fees, + and promotional activities.\nEach participant is expected to contribute an article + to the conference blog by February 20th.\n\nA follow-up meeting is scheduled + for January 25th at 3 PM GMT to finalize the agenda and confirm the\nlist of + speakers.\n "}], "model": "gpt-4", "stream": true, "stream_options": {"include_usage": + true}, "tool_choice": {"type": "function", "function": {"name": "PartialMeetingInfo"}}, + "tools": [{"type": "function", "function": {"name": "PartialMeetingInfo", "description": + "Correctly extracted `PartialMeetingInfo` with all the required parameters with + correct types", "parameters": {"$defs": {"PartialUser": {"properties": {"user_name": + {"title": "User Name", "type": "string"}, "email": {"title": "Email", "type": + "string"}, "twitter": {"title": "Twitter", "type": "string"}}, "required": ["user_name", + "email", "twitter"], "title": "PartialUser", "type": "object"}}, "properties": + {"users": {"items": {"$ref": "#/$defs/PartialUser"}, "title": "Users", "type": + "array"}, "date": {"title": "Date", "type": "string"}, "location": {"title": + "Location", "type": "string"}, "budget": {"title": "Budget", "type": "integer"}, + "deadline": {"title": "Deadline", "type": "string"}}, "required": ["budget", + "date", "deadline", "location", "users"], "type": "object"}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '2108' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - OpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - 'false' + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: 'data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_IeGGBlZub59pNDAngkjsEiD5","type":"function","function":{"name":"PartialMeetingInfo","arguments":""}}],"refusal":null},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"users"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + [\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"John"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Doe"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"oh"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"nd"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"oe"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Tech"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"G"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"uru"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"44"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Jane"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Smith"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"anes"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"mith"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Digital"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"D"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"iva"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"88"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Alex"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Johnson"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"alex"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Master"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + }\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"],\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"date"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"4"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"03"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"15"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Grand"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Tech"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Arena"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + located"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + at"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"452"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Innovation"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Drive"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"budget"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"500"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"00"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"deadline"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"4"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"02"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"20"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null} + + + data: {"id":"chatcmpl-AAhGWfDsz3S5C8y0eJ4B8p7vPHtMv","object":"chat.completion.chunk","created":1727112956,"model":"gpt-4-0613","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":331,"completion_tokens":153,"total_tokens":484,"completion_tokens_details":{"reasoning_tokens":0}}} + + + data: [DONE] + + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c4b4a08d33ce2-BOM + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Mon, 23 Sep 2024 17:35:57 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=tQaa9OV9tJYxbp0kmHddpXJiI9Z8H8BkUEkJ2yWnXu8-1727112957-1.0.1.1-Xfrjx4pJ3VsqNsEMnuBSF4UAvyzm1rK_QzJoitSXb99gfuGIJ__fof3aL8jYDzp3RZYpgx6_hSSdAwEkWjjryg; + path=/; expires=Mon, 23-Sep-24 18:05:57 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=H06uujTg_yw1rYCAAalx4I6dISmHQ.Xj1_dDvyeoziE-1727112957072-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '269' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '1000' + x-ratelimit-limit-tokens: + - '600000' + x-ratelimit-remaining-requests: + - '999' + x-ratelimit-remaining-tokens: + - '599731' + x-ratelimit-reset-requests: + - 60ms + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_544ba0e9af55a8b5c680b1e1fab4fa28 + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream_async.yaml b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream_async.yaml new file mode 100644 index 00000000000..e2278cc3595 --- /dev/null +++ b/weave/integrations/instructor/cassettes/instructor_test/test_instructor_partial_stream_async.yaml @@ -0,0 +1,623 @@ +interactions: +- request: + body: '{"messages": [{"role": "user", "content": "Get the information about the + meeting and the users \nIn our recent online meeting, participants from various + backgrounds joined to discuss the upcoming tech\nconference. The names and contact + details of the participants were as follows:\n\n- Name: John Doe, Email: johndoe@email.com, + Twitter: @TechGuru44\n- Name: Jane Smith, Email: janesmith@email.com, Twitter: + @DigitalDiva88\n- Name: Alex Johnson, Email: alexj@email.com, Twitter: @CodeMaster2023\n\nDuring + the meeting, we agreed on several key points. The conference will be held on + March 15th, 2024,\nat the Grand Tech Arena located at 4521 Innovation Drive. + Dr. Emily Johnson, a renowned AI researcher,\nwill be our keynote speaker.\n\nThe + budget for the event is set at $50,000, covering venue costs, speaker fees, + and promotional activities.\nEach participant is expected to contribute an article + to the conference blog by February 20th.\n\nA follow-up meeting is scheduled + for January 25th at 3 PM GMT to finalize the agenda and confirm the\nlist of + speakers.\n "}], "model": "gpt-4", "stream": true, "stream_options": {"include_usage": + true}, "tool_choice": {"type": "function", "function": {"name": "PartialMeetingInfo"}}, + "tools": [{"type": "function", "function": {"name": "PartialMeetingInfo", "description": + "Correctly extracted `PartialMeetingInfo` with all the required parameters with + correct types", "parameters": {"$defs": {"PartialUser": {"properties": {"user_name": + {"title": "User Name", "type": "string"}, "email": {"title": "Email", "type": + "string"}, "twitter": {"title": "Twitter", "type": "string"}}, "required": ["user_name", + "email", "twitter"], "title": "PartialUser", "type": "object"}}, "properties": + {"users": {"items": {"$ref": "#/$defs/PartialUser"}, "title": "Users", "type": + "array"}, "date": {"title": "Date", "type": "string"}, "location": {"title": + "Location", "type": "string"}, "budget": {"title": "Budget", "type": "integer"}, + "deadline": {"title": "Deadline", "type": "string"}}, "required": ["budget", + "date", "deadline", "location", "users"], "type": "object"}}}]}' + headers: + accept: + - application/json + accept-encoding: + - gzip, deflate, zstd + connection: + - keep-alive + content-length: + - '2108' + content-type: + - application/json + host: + - api.openai.com + user-agent: + - AsyncOpenAI/Python 1.47.1 + x-stainless-arch: + - x64 + x-stainless-async: + - async:asyncio + x-stainless-lang: + - python + x-stainless-os: + - Linux + x-stainless-package-version: + - 1.47.1 + x-stainless-runtime: + - CPython + x-stainless-runtime-version: + - 3.12.1 + method: POST + uri: https://api.openai.com/v1/chat/completions + response: + body: + string: 'data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"role":"assistant","content":null,"tool_calls":[{"index":0,"id":"call_BXnhVie49WpZQOr0U9iU2238","type":"function","function":{"name":"PartialMeetingInfo","arguments":""}}],"refusal":null},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"{\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"users"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + [\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"John"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Doe"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"oh"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"nd"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"oe"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Tech"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"G"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"uru"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"44"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Jane"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Smith"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"anes"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"mith"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Digital"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"D"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"iva"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"88"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + },\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + {\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"user"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"_name"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Alex"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Johnson"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"alex"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"j"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"@email"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":".com"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"twitter"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \"@"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Code"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Master"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"3"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + }\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"],\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"date"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"4"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"03"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"15"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"location"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"Grand"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Tech"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Arena"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + located"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + at"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"452"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"1"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Innovation"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + Drive"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"budget"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + "}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"500"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"00"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":",\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"deadline"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\":"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":" + \""}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"202"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"4"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"02"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"-"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"20"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"\"\n"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{"tool_calls":[{"index":0,"function":{"arguments":"}"}}]},"logprobs":null,"finish_reason":null}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[{"index":0,"delta":{},"logprobs":null,"finish_reason":"stop"}],"usage":null} + + + data: {"id":"chatcmpl-AAhIsIC97gConemtSx1E7xOZTAkgY","object":"chat.completion.chunk","created":1727113102,"model":"gpt-4-0613","system_fingerprint":null,"choices":[],"usage":{"prompt_tokens":331,"completion_tokens":153,"total_tokens":484,"completion_tokens_details":{"reasoning_tokens":0}}} + + + data: [DONE] + + + ' + headers: + CF-Cache-Status: + - DYNAMIC + CF-RAY: + - 8c7c4ed73cad3ce2-BOM + Connection: + - keep-alive + Content-Type: + - text/event-stream; charset=utf-8 + Date: + - Mon, 23 Sep 2024 17:38:22 GMT + Server: + - cloudflare + Set-Cookie: + - __cf_bm=NSBKxV79SVaZe54.2euAsS7Nd1xE6C.91sh6Y2XQK6s-1727113102-1.0.1.1-ROeYvYGGs.e64d_MP3tonh5J8fSIY3cpMrGBtobP3_JVjb5ZPzRk2HcCl0HHQEVY7D9H_HroNz4Q__hEMjxcSA; + path=/; expires=Mon, 23-Sep-24 18:08:22 GMT; domain=.api.openai.com; HttpOnly; + Secure; SameSite=None + - _cfuvid=G3bs8v7t.3S_BOIW.Kl50u6dR7FTFI2k2lEcI3qnAZo-1727113102537-0.0.1.1-604800000; + path=/; domain=.api.openai.com; HttpOnly; Secure; SameSite=None + Transfer-Encoding: + - chunked + X-Content-Type-Options: + - nosniff + access-control-expose-headers: + - X-Request-ID + openai-organization: + - wandb + openai-processing-ms: + - '293' + openai-version: + - '2020-10-01' + strict-transport-security: + - max-age=15552000; includeSubDomains; preload + x-ratelimit-limit-requests: + - '1000' + x-ratelimit-limit-tokens: + - '600000' + x-ratelimit-remaining-requests: + - '999' + x-ratelimit-remaining-tokens: + - '599731' + x-ratelimit-reset-requests: + - 60ms + x-ratelimit-reset-tokens: + - 26ms + x-request-id: + - req_21b05f1b5d85f47992d5fd17f3da003d + status: + code: 200 + message: OK +version: 1 diff --git a/weave/integrations/instructor/instructor_iterable_utils.py b/weave/integrations/instructor/instructor_iterable_utils.py new file mode 100644 index 00000000000..879181709fe --- /dev/null +++ b/weave/integrations/instructor/instructor_iterable_utils.py @@ -0,0 +1,61 @@ +from functools import wraps +from typing import Any, Callable, Optional + +from pydantic import BaseModel + +import weave +from weave.trace.op_extensions.accumulator import add_accumulator + + +def instructor_iterable_accumulator( + acc: Optional[BaseModel], value: BaseModel +) -> list[BaseModel]: + if acc is None: + acc = [value] + if acc[-1] != value: + acc.append(value) + return acc + + +def should_accumulate_iterable(inputs: dict) -> bool: + if isinstance(inputs, dict): + if "stream" in inputs: + return inputs["stream"] + elif "kwargs" in inputs: + if "stream" in inputs["kwargs"]: + return inputs.get("kwargs", {}).get("stream") + return False + + +def instructor_wrapper_sync(name: str) -> Callable[[Callable], Callable]: + def wrapper(fn: Callable) -> Callable: + op = weave.op()(fn) + op.name = name # type: ignore + return add_accumulator( + op, # type: ignore + make_accumulator=lambda inputs: instructor_iterable_accumulator, + should_accumulate=should_accumulate_iterable, + ) + + return wrapper + + +def instructor_wrapper_async(name: str) -> Callable[[Callable], Callable]: + def wrapper(fn: Callable) -> Callable: + def _fn_wrapper(fn: Callable) -> Callable: + @wraps(fn) + async def _async_wrapper(*args: Any, **kwargs: Any) -> Any: + return await fn(*args, **kwargs) + + return _async_wrapper + + "We need to do this so we can check if `stream` is used" + op = weave.op()(_fn_wrapper(fn)) + op.name = name # type: ignore + return add_accumulator( + op, # type: ignore + make_accumulator=lambda inputs: instructor_iterable_accumulator, + should_accumulate=should_accumulate_iterable, + ) + + return wrapper diff --git a/weave/integrations/instructor/instructor_partial_utils.py b/weave/integrations/instructor/instructor_partial_utils.py new file mode 100644 index 00000000000..f90dc7edb17 --- /dev/null +++ b/weave/integrations/instructor/instructor_partial_utils.py @@ -0,0 +1,27 @@ +from typing import Callable, Optional + +from pydantic import BaseModel + +import weave +from weave.trace.op_extensions.accumulator import add_accumulator + + +def instructor_partial_accumulator( + acc: Optional[BaseModel], value: BaseModel +) -> BaseModel: + if acc is None or acc != value: + acc = value + return acc + + +def instructor_wrapper_partial(name: str) -> Callable[[Callable], Callable]: + def wrapper(fn: Callable) -> Callable: + op = weave.op()(fn) + op.name = name # type: ignore + return add_accumulator( + op, # type: ignore + make_accumulator=lambda inputs: instructor_partial_accumulator, + should_accumulate=lambda inputs: True, + ) + + return wrapper diff --git a/weave/integrations/instructor/instructor_sdk.py b/weave/integrations/instructor/instructor_sdk.py new file mode 100644 index 00000000000..867e9f2a785 --- /dev/null +++ b/weave/integrations/instructor/instructor_sdk.py @@ -0,0 +1,31 @@ +import importlib + +from weave.trace.patcher import MultiPatcher, SymbolPatcher + +from .instructor_iterable_utils import instructor_wrapper_async, instructor_wrapper_sync +from .instructor_partial_utils import instructor_wrapper_partial + +instructor_patcher = MultiPatcher( + [ + SymbolPatcher( + lambda: importlib.import_module("instructor.client"), + "Instructor.create", + instructor_wrapper_sync(name="Instructor.create"), + ), + SymbolPatcher( + lambda: importlib.import_module("instructor.client"), + "AsyncInstructor.create", + instructor_wrapper_async(name="AsyncInstructor.create"), + ), + SymbolPatcher( + lambda: importlib.import_module("instructor.client"), + "Instructor.create_partial", + instructor_wrapper_partial(name="Instructor.create_partial"), + ), + SymbolPatcher( + lambda: importlib.import_module("instructor.client"), + "AsyncInstructor.create_partial", + instructor_wrapper_partial(name="AsyncInstructor.create_partial"), + ), + ] +) diff --git a/weave/integrations/instructor/instructor_test.py b/weave/integrations/instructor/instructor_test.py new file mode 100644 index 00000000000..301366559d3 --- /dev/null +++ b/weave/integrations/instructor/instructor_test.py @@ -0,0 +1,422 @@ +import asyncio +import json +import os +from typing import Any, Iterable, List + +import pytest +from pydantic import BaseModel + +import weave +from weave.integrations.integration_utilities import op_name_from_ref + + +class Person(BaseModel): + person_name: str + age: int + + +class User(BaseModel): + user_name: str + email: str + twitter: str + + +class MeetingInfo(BaseModel): + users: List[User] + date: str + location: str + budget: int + deadline: str + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_openai( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import OpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai(OpenAI(api_key=api_key)) + person = lm_client.chat.completions.create( + model="gpt-3.5-turbo", + response_model=Person, + messages=[{"role": "user", "content": "My name is John and I am 20 years old"}], + ) + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "Instructor.create" + output = call.output + assert output.person_name == "John" + assert output.age == 20 + + call = calls[1] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + output = call.output + output_arguments = json.loads( + output.choices[0].message.tool_calls[0].function.arguments + ) + assert "person_name" in output_arguments + assert "age" in output_arguments + assert "John" in output_arguments["person_name"] + assert output_arguments["age"] == 20 + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_openai_async( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import AsyncOpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai(AsyncOpenAI(api_key=api_key)) + + async def extract_person(text: str) -> Person: + return await lm_client.chat.completions.create( + model="gpt-3.5-turbo", + messages=[ + {"role": "user", "content": text}, + ], + response_model=Person, + ) + + asyncio.run(extract_person("My name is John and I am 20 years old")) + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "AsyncInstructor.create" + output = call.output + assert output.person_name == "John" + assert output.age == 20 + + call = calls[1] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + output = call.output + output_arguments = json.loads( + output.choices[0].message.tool_calls[0].function.arguments + ) + assert "person_name" in output_arguments + assert "age" in output_arguments + assert "John" in output_arguments["person_name"] + assert output_arguments["age"] == 20 + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_iterable( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import OpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai( + OpenAI(api_key=api_key), mode=instructor.function_calls.Mode.JSON + ) + lm_client.chat.completions.create( + model="gpt-3.5-turbo-1106", + temperature=0.1, + response_model=Iterable[Person], + stream=False, + messages=[ + { + "role": "user", + "content": "Consider this data: Jason is 10 and John is 30.\ + Correctly segment it into entities\ + Make sure the JSON is correct", + }, + ], + ) + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "Instructor.create" + output = call.output + assert output[0].person_name == "Jason" + assert output[0].age == 10 + assert output[1].person_name == "John" + assert output[1].age == 30 + + call = calls[1] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + output = call.output + output_arguments = json.loads(output.choices[0].message.content) + assert "tasks" in output_arguments + assert "person_name" in output_arguments["tasks"][0] + assert "age" in output_arguments["tasks"][0] + assert "Jason" in output_arguments["tasks"][0]["person_name"] + assert output_arguments["tasks"][0]["age"] == 10 + assert "person_name" in output_arguments["tasks"][1] + assert "age" in output_arguments["tasks"][1] + assert "John" in output_arguments["tasks"][1]["person_name"] + assert output_arguments["tasks"][1]["age"] == 30 + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_iterable_sync_stream( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import OpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai( + OpenAI(api_key=api_key), mode=instructor.Mode.TOOLS + ) + users = lm_client.chat.completions.create( + model="gpt-4", + stream=True, + response_model=Iterable[Person], + messages=[ + { + "role": "system", + "content": "You are a perfect entity extraction system", + }, + { + "role": "user", + "content": "Extract `Jason is 10 and John is 30`", + }, + ], + ) + _ = [user for user in users] + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "Instructor.create" + output = call.output + assert output[0].person_name == "Jason" + assert output[0].age == 10 + assert output[1].person_name == "John" + assert output[1].age == 30 + + call = calls[1] + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_iterable_async_stream( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import AsyncOpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai( + AsyncOpenAI(api_key=api_key), mode=instructor.Mode.TOOLS + ) + + async def print_iterable_results() -> List[Person]: + model = await lm_client.chat.completions.create( + model="gpt-4", + response_model=Iterable[Person], + max_retries=2, + stream=True, + messages=[ + { + "role": "system", + "content": "You are a perfect entity extraction system", + }, + { + "role": "user", + "content": "Extract `Jason is 10 and John is 30`", + }, + ], + ) + return [m async for m in model] + + asyncio.run(print_iterable_results()) + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "AsyncInstructor.create" + output = call.output + assert output[0].person_name == "Jason" + assert output[0].age == 10 + assert output[1].person_name == "John" + assert output[1].age == 30 + + call = calls[1] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_partial_stream( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import OpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai(OpenAI(api_key=api_key)) + text_block = """ +In our recent online meeting, participants from various backgrounds joined to discuss the upcoming tech +conference. The names and contact details of the participants were as follows: + +- Name: John Doe, Email: johndoe@email.com, Twitter: @TechGuru44 +- Name: Jane Smith, Email: janesmith@email.com, Twitter: @DigitalDiva88 +- Name: Alex Johnson, Email: alexj@email.com, Twitter: @CodeMaster2023 + +During the meeting, we agreed on several key points. The conference will be held on March 15th, 2024, +at the Grand Tech Arena located at 4521 Innovation Drive. Dr. Emily Johnson, a renowned AI researcher, +will be our keynote speaker. + +The budget for the event is set at $50,000, covering venue costs, speaker fees, and promotional activities. +Each participant is expected to contribute an article to the conference blog by February 20th. + +A follow-up meeting is scheduled for January 25th at 3 PM GMT to finalize the agenda and confirm the +list of speakers. + """ + extraction_stream = lm_client.chat.completions.create_partial( + model="gpt-4", + response_model=MeetingInfo, + messages=[ + { + "role": "user", + "content": f"Get the information about the meeting and the users {text_block}", + }, + ], + stream=True, + ) + _ = [extraction for extraction in extraction_stream] + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "Instructor.create_partial" + output = call.output + assert output.users[0].user_name == "John Doe" + assert output.users[0].email == "johndoe@email.com" + assert output.users[0].twitter == "@TechGuru44" + assert output.users[1].user_name == "Jane Smith" + assert output.users[1].email == "janesmith@email.com" + assert output.users[1].twitter == "@DigitalDiva88" + assert output.users[2].user_name == "Alex Johnson" + assert output.users[2].email == "alexj@email.com" + assert output.users[2].twitter == "@CodeMaster2023" + + call = calls[1] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" + + +@pytest.mark.skip_clickhouse_client +@pytest.mark.vcr( + filter_headers=["authorization", "x-api-key"], + allowed_hosts=["api.wandb.ai", "localhost", "trace.wandb.ai"], +) +def test_instructor_partial_stream_async( + client: weave.trace.weave_client.WeaveClient, +) -> None: + import instructor + from openai import AsyncOpenAI + + api_key = os.environ.get("OPENAI_API_KEY", "DUMMY_API_KEY") + lm_client = instructor.from_openai(AsyncOpenAI(api_key=api_key)) + text_block = """ +In our recent online meeting, participants from various backgrounds joined to discuss the upcoming tech +conference. The names and contact details of the participants were as follows: + +- Name: John Doe, Email: johndoe@email.com, Twitter: @TechGuru44 +- Name: Jane Smith, Email: janesmith@email.com, Twitter: @DigitalDiva88 +- Name: Alex Johnson, Email: alexj@email.com, Twitter: @CodeMaster2023 + +During the meeting, we agreed on several key points. The conference will be held on March 15th, 2024, +at the Grand Tech Arena located at 4521 Innovation Drive. Dr. Emily Johnson, a renowned AI researcher, +will be our keynote speaker. + +The budget for the event is set at $50,000, covering venue costs, speaker fees, and promotional activities. +Each participant is expected to contribute an article to the conference blog by February 20th. + +A follow-up meeting is scheduled for January 25th at 3 PM GMT to finalize the agenda and confirm the +list of speakers. + """ + + async def fetch_results(text_block: str) -> List[Any]: + extraction_stream = lm_client.chat.completions.create_partial( + model="gpt-4", + response_model=MeetingInfo, + messages=[ + { + "role": "user", + "content": f"Get the information about the meeting and the users {text_block}", + }, + ], + stream=True, + ) + return [extraction async for extraction in extraction_stream] + + _ = asyncio.run(fetch_results(text_block)) + + calls = list(client.calls()) + assert len(calls) == 2 + + call = calls[0] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "AsyncInstructor.create_partial" + output = call.output + assert output.users[0].user_name == "John Doe" + assert output.users[0].email == "johndoe@email.com" + assert output.users[0].twitter == "@TechGuru44" + assert output.users[1].user_name == "Jane Smith" + assert output.users[1].email == "janesmith@email.com" + assert output.users[1].twitter == "@DigitalDiva88" + assert output.users[2].user_name == "Alex Johnson" + assert output.users[2].email == "alexj@email.com" + assert output.users[2].twitter == "@CodeMaster2023" + + call = calls[1] + assert call.exception is None and call.ended_at is not None + assert call.started_at < call.ended_at + assert op_name_from_ref(call.op_name) == "openai.chat.completions.create" diff --git a/weave/trace/autopatch.py b/weave/trace/autopatch.py index a8b3f933a94..ebfc5bffd2b 100644 --- a/weave/trace/autopatch.py +++ b/weave/trace/autopatch.py @@ -11,6 +11,7 @@ def autopatch() -> None: from ..integrations.cohere.cohere_sdk import cohere_patcher from ..integrations.dspy.dspy_sdk import dspy_patcher from ..integrations.groq.groq_sdk import groq_patcher + from ..integrations.instructor.instructor_sdk import instructor_patcher from ..integrations.langchain.langchain import langchain_patcher from ..integrations.litellm.litellm import litellm_patcher from ..integrations.llamaindex.llamaindex import llamaindex_patcher @@ -24,6 +25,7 @@ def autopatch() -> None: langchain_patcher.attempt_patch() anthropic_patcher.attempt_patch() groq_patcher.attempt_patch() + instructor_patcher.attempt_patch() dspy_patcher.attempt_patch() cerebras_patcher.attempt_patch() cohere_patcher.attempt_patch() @@ -35,6 +37,7 @@ def reset_autopatch() -> None: from ..integrations.cohere.cohere_sdk import cohere_patcher from ..integrations.dspy.dspy_sdk import dspy_patcher from ..integrations.groq.groq_sdk import groq_patcher + from ..integrations.instructor.instructor_sdk import instructor_patcher from ..integrations.langchain.langchain import langchain_patcher from ..integrations.litellm.litellm import litellm_patcher from ..integrations.llamaindex.llamaindex import llamaindex_patcher @@ -48,6 +51,7 @@ def reset_autopatch() -> None: langchain_patcher.undo_patch() anthropic_patcher.undo_patch() groq_patcher.undo_patch() + instructor_patcher.undo_patch() dspy_patcher.undo_patch() cerebras_patcher.undo_patch() cohere_patcher.undo_patch() From ab01efa696922ba059d014f2d689fd32559e3258 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Wed, 25 Sep 2024 21:22:42 -0700 Subject: [PATCH 055/179] fix: Stop printing errors with OpenAI Stream + error handling (#2488) * push * cleanup * fix --- weave/trace/op.py | 32 ++++++++++++++++++-- weave/trace/op_extensions/accumulator.py | 37 ++++++++++++++---------- 2 files changed, 51 insertions(+), 18 deletions(-) diff --git a/weave/trace/op.py b/weave/trace/op.py index 1fe9e3ac989..d2771a9aad4 100644 --- a/weave/trace/op.py +++ b/weave/trace/op.py @@ -3,6 +3,7 @@ import inspect import logging import sys +import traceback import typing from functools import partial, wraps from types import MethodType @@ -67,6 +68,10 @@ except ImportError: CEREBRAS_NOT_GIVEN = None +CALL_CREATE_MSG = "Error creating call:\n{}" +ASYNC_CALL_CREATE_MSG = "Error creating async call:\n{}" +ON_OUTPUT_MSG = "Error capturing call output:\n{}" + class DisplayNameFuncError(ValueError): ... @@ -246,7 +251,7 @@ def process(res: Any) -> Any: # the output res = on_output(res) except Exception as e: - log_once(logger.error, f"Error capturing call output: {e}") + log_once(logger.error, ON_OUTPUT_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise finally: @@ -451,7 +456,18 @@ async def wrapper(*args: Any, **kwargs: Any) -> Any: return await func(*args, **kwargs) if not wrapper._tracing_enabled: # type: ignore return await func(*args, **kwargs) - call = _create_call(wrapper, *args, **kwargs) # type: ignore + try: + # This try/except allows us to fail gracefully and + # still let the user code continue to execute + call = _create_call(wrapper, *args, **kwargs) # type: ignore + except Exception as e: + log_once( + logger.error, + ASYNC_CALL_CREATE_MSG.format(traceback.format_exc()), + ) + if get_raise_on_captured_errors(): + raise + return await func(*args, **kwargs) res, _ = await _execute_call(wrapper, call, *args, **kwargs) # type: ignore return res else: @@ -464,7 +480,17 @@ def wrapper(*args: Any, **kwargs: Any) -> Any: return func(*args, **kwargs) if not wrapper._tracing_enabled: # type: ignore return func(*args, **kwargs) - call = _create_call(wrapper, *args, **kwargs) # type: ignore + try: + # This try/except allows us to fail gracefully and + # still let the user code continue to execute + call = _create_call(wrapper, *args, **kwargs) # type: ignore + except Exception as e: + log_once( + logger.error, CALL_CREATE_MSG.format(traceback.format_exc()) + ) + if get_raise_on_captured_errors(): + raise + return func(*args, **kwargs) res, _ = _execute_call(wrapper, call, *args, **kwargs) # type: ignore return res diff --git a/weave/trace/op_extensions/accumulator.py b/weave/trace/op_extensions/accumulator.py index 55b01fe8e2e..ffa94231e4e 100644 --- a/weave/trace/op_extensions/accumulator.py +++ b/weave/trace/op_extensions/accumulator.py @@ -1,5 +1,6 @@ import atexit import logging +import traceback import weakref from typing import ( Any, @@ -29,6 +30,13 @@ _OnErrorType = Callable[[Exception], None] _OnCloseType = Callable[[], None] +ON_CLOSE_MSG = "Error closing iterator, call data may be incomplete:\n{}" +ON_ERROR_MSG = "Error capturing error from iterator, call data may be incomplete:\n{}" +ON_YIELD_MSG = "Error capturing value from iterator, call data may be incomplete:\n{}" +ON_AYIELD_MSG = ( + "Error capturing async value from iterator, call data may be incomplete:\n{}" +) + class _IteratorWrapper(Generic[V]): """This class wraps an iterator object allowing hooks to be added to the lifecycle of the iterator. It is likely @@ -54,10 +62,7 @@ def _call_on_close_once(self) -> None: try: self._on_close() # type: ignore except Exception as e: - log_once( - logger.error, - f"Error finishing call - some logs may not be captured: {e}", - ) + log_once(logger.error, ON_CLOSE_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise self._on_finished_called = True @@ -67,10 +72,7 @@ def _call_on_error_once(self, e: Exception) -> None: try: self._on_error(e) except Exception as e: - log_once( - logger.error, - f"Error finishing call with exception - some logs may not be captured: {e}", - ) + log_once(logger.error, ON_ERROR_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise self._on_finished_called = True @@ -91,9 +93,12 @@ def __next__(self) -> Generator[None, None, V]: # the yielded value self._on_yield(value) except Exception as e: - log_once( - logger.error, f"Error capturing yielded value for call output: {e}" - ) + # We actually use StopIteration to signal the end of the iterator + # in some cases (like when we don't want to surface the last chunk + # with usage info from openai integration). + if isinstance(e, (StopAsyncIteration, StopIteration)): + raise + log_once(logger.error, ON_YIELD_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise return value @@ -120,10 +125,12 @@ async def __anext__(self) -> Generator[None, None, V]: # break the user process if we trip up on processing # the yielded value except Exception as e: - log_once( - logger.error, - f"Error capturing async yielded value for call output: {e}", - ) + # We actually use StopIteration to signal the end of the iterator + # in some cases (like when we don't want to surface the last chunk + # with usage info from openai integration). + if isinstance(e, (StopAsyncIteration, StopIteration)): + raise + log_once(logger.error, ON_AYIELD_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise return value From 862d9ea96d02441107ea1d347cfd4d8b61a54202 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Thu, 26 Sep 2024 00:28:30 -0500 Subject: [PATCH 056/179] chore: remove unused code (#2491) --- .../Home/Browse3/Browse3SideNav.tsx | 567 ------------------ 1 file changed, 567 deletions(-) delete mode 100644 weave-js/src/components/PagePanelComponents/Home/Browse3/Browse3SideNav.tsx diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/Browse3SideNav.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/Browse3SideNav.tsx deleted file mode 100644 index 71ef63f184c..00000000000 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/Browse3SideNav.tsx +++ /dev/null @@ -1,567 +0,0 @@ -import { - Category, - ManageHistory, - NavigateBefore, - NavigateNext, - Segment, - Undo, -} from '@mui/icons-material'; -import { - Autocomplete, - Box, - FormControl, - IconButton, - ListSubheader, - TextField, -} from '@mui/material'; -import Divider from '@mui/material/Divider'; -import Drawer from '@mui/material/Drawer'; -import List from '@mui/material/List'; -import ListItemButton from '@mui/material/ListItemButton'; -import ListItemIcon from '@mui/material/ListItemIcon'; -import ListItemText from '@mui/material/ListItemText'; -import React, { - FC, - Fragment, - useCallback, - useEffect, - useMemo, - useState, -} from 'react'; -import {useHistory, useParams} from 'react-router-dom'; - -import {useProjectsForEntity} from '../query'; -import {useWeaveflowRouteContext} from './context'; -import {WFHighLevelCallFilter} from './pages/CallsPage/callsTableFilter'; -import {WFHighLevelObjectVersionFilter} from './pages/ObjectVersionsPage'; -import {WFHighLevelOpVersionFilter} from './pages/OpVersionsPage'; -import {useURLSearchParamsDict} from './pages/util'; - -const drawerWidth = 240; - -type NavigationCallbacks = { - navigateToProject: (project: string) => void; - navigateToObjectVersions: (filter?: WFHighLevelObjectVersionFilter) => void; - navigateToCalls: (filter?: WFHighLevelCallFilter) => void; - navigateToOpVersions: (filter?: WFHighLevelOpVersionFilter) => void; - navigateToBoards: () => void; - navigateToTables: () => void; - navigateAwayFromProject?: () => void; -}; - -type Browse3ProjectSideNavProps = { - entity: string; - project: string; - /** - * If true, the sidebar will be collapsed by default. - * If false, the sidebar will be expanded by default. - * If undefined, the sidebar will be expanded by default unless there is a peekPath. - */ - preferCollapsed?: boolean; - selectedCategory?: - | 'objects' - | 'calls' - | 'types' - | 'ops' - | 'boards' - | 'tables'; - filterCategory?: string; -} & NavigationCallbacks; - -export const RouteAwareBrowse3ProjectSideNav: FC<{ - navigateAwayFromProject?: () => void; -}> = props => { - const params = useParams<{ - entity: string; - project: string; - tab: - | 'types' - | 'type-versions' - | 'objects' - | 'object-versions' - | 'ops' - | 'op-versions' - | 'calls' - | 'boards' - | 'tables'; - }>(); - const history = useHistory(); - const currentProject = params.project; - const currentEntity = params.entity; - const query = useURLSearchParamsDict(); - const filters = useMemo(() => { - if (query.filter === undefined) { - return {}; - } - try { - return JSON.parse(query.filter); - } catch (e) { - console.log(e); - return {}; - } - }, [query.filter]); - const containsPeekPath = useMemo(() => { - return query.peekPath != null && query.peekPath !== ''; - }, [query.peekPath]); - const selectedNavSection = useMemo(() => { - if (params.tab === 'types' || params.tab === 'type-versions') { - return 'types'; - } else if (params.tab === 'objects' || params.tab === 'object-versions') { - return 'objects'; - } else if (params.tab === 'ops' || params.tab === 'op-versions') { - return 'ops'; - } else if (params.tab === 'calls') { - return 'calls'; - } else if (params.tab === 'boards') { - return 'boards'; - } else if (params.tab === 'tables') { - return 'tables'; - } - return undefined; - }, [params.tab]); - const filterCategory = useMemo(() => { - const category = Object.keys(filters).find(key => - key.toLowerCase().includes('category') - ); - if (category === undefined) { - return undefined; - } - return filters[category]; - }, [filters]); - - const {baseRouter} = useWeaveflowRouteContext(); - if (!currentProject || !currentEntity) { - return null; - } - return ( - { - history.push(baseRouter.projectUrl(params.entity, project)); - }} - navigateToObjectVersions={(filter?: WFHighLevelObjectVersionFilter) => { - history.push( - baseRouter.objectVersionsUIUrl(params.entity, params.project, filter) - ); - }} - navigateToCalls={(filter?: WFHighLevelCallFilter) => { - history.push( - baseRouter.callsUIUrl(params.entity, params.project, filter) - ); - }} - navigateToOpVersions={(filter?: WFHighLevelOpVersionFilter) => { - history.push( - baseRouter.opVersionsUIUrl(params.entity, params.project, filter) - ); - }} - navigateToBoards={() => { - history.push(baseRouter.boardsUIUrl(params.entity, params.project)); - }} - navigateToTables={() => { - history.push(baseRouter.tablesUIUrl(params.entity, params.project)); - }} - navigateAwayFromProject={props.navigateAwayFromProject} - /> - ); -}; - -const Browse3ProjectSideNav: FC = props => { - const sections = useSectionsForProject(props); - const entityProjectsValue = useProjectsForEntity(props.entity); - const projects = useMemo(() => { - return [props.project, ...(entityProjectsValue.result ?? [])]; - }, [entityProjectsValue.result, props.project]); - const wbSidebarWidth = 57; - const wbSideBarSpeed = 0.2; - const initialWidth = drawerWidth - wbSidebarWidth; - const [userControlledOpen, setUserControlledOpen] = useState< - boolean | undefined - >(undefined); - const open = useMemo(() => { - if (userControlledOpen !== undefined) { - return userControlledOpen; - } - return !props.preferCollapsed; - }, [props.preferCollapsed, userControlledOpen]); - const adjustedDrawerWidth = useMemo(() => { - return open ? drawerWidth : wbSidebarWidth; - }, [open]); - const [width, setWidth] = useState(initialWidth); - const onNavigateAwayFromProject = useCallback(() => { - if (!props.navigateAwayFromProject) { - return; - } - setWidth(0); - setTimeout(() => { - props.navigateAwayFromProject!(); - }, wbSideBarSpeed * 1000); - }, [props.navigateAwayFromProject]); - useEffect(() => { - const t = setTimeout(() => { - setWidth(adjustedDrawerWidth); - }, 0); - return () => clearTimeout(t); - }, [adjustedDrawerWidth]); - - return ( - div.MuiPaper-root': { - position: 'relative', - zIndex: 900, - }, - flex: '0 0 auto', - width, - flexShrink: 0, - [`& .MuiDrawer-paper`]: { - width, - boxSizing: 'border-box', - transition: `width ${wbSideBarSpeed}s linear`, - }, - transition: `width ${wbSideBarSpeed}s linear`, - }}> - - setUserControlledOpen(o => !o)}> - {open ? : } - - {open && ( - - { - props.navigateToProject(newValue); - }} - renderInput={params => } - /> - - )} - - - - - {props.navigateAwayFromProject && ( - - { - onNavigateAwayFromProject(); - }}> - - - - span.MuiTypography-root': { - textOverflow: 'ellipsis', - overflow: 'hidden', - whiteSpace: 'nowrap', - }, - }} - primary="Back to Experiments" - /> - - - )} - - ); -}; - -type SectionType = { - title: string; - items: ItemType[]; -}; -type ItemType = { - title: string; - icon: React.ReactNode; - selected?: boolean; - onClick: () => void; - children?: ItemType[]; -}; -const SideBarNavItem: FC<{ - item: ItemType; - depth?: number; - open: boolean; -}> = props => { - const depth = props.depth ?? 0; - const show = props.open || depth === 0; - return ( - - - {props.item.icon} - - - {props.item.children && ( - - {props.item.children.map((item, itemIndex) => { - return ( - - ); - })} - - )} - - ); -}; -const SideNav: FC<{ - open: boolean; - sections: SectionType[]; -}> = props => { - return ( - - {props.sections.map((section, sectionIndex) => { - return ( - - - {/* {sectionIndex !== 0 && } */} - {section.title} - - - - {section.items.map((item, itemIndex) => { - return ( - - ); - })} - - - ); - })} - {/* */} - - ); -}; - -const useSectionsForProject = (props: Browse3ProjectSideNavProps) => { - // TODO: Lookup pinned sidebar items from entity/project + user - const sections: SectionType[] = useMemo(() => { - return [ - { - title: 'Structure', - items: [ - { - title: 'Operations', // 'Methods (OpDefVersions)', - selected: props.selectedCategory === 'ops', - icon: , - onClick: () => { - props.navigateToOpVersions({}); - }, - }, - ], - }, - { - title: 'Records', - items: [ - { - title: 'Objects', // , 'Instances (ObjectVersions)', - selected: - props.selectedCategory === 'objects' && - !( - props.filterCategory === 'model' || - props.filterCategory === 'dataset' - ), - icon: , - onClick: () => { - props.navigateToObjectVersions({}); - }, - // TODO: Get Feedback from team on this - // children: [ - // { - // title: 'Models', - // icon: , - // selected: props.filterCategory === 'model', - // onClick: () => { - // props.navigateToObjectVersions({ - // typeCategory: 'model', - // latest: true, - // }); - // }, - // }, - // { - // title: 'Datasets', - // icon: , - // selected: props.filterCategory === 'dataset', - // onClick: () => { - // props.navigateToObjectVersions({ - // typeCategory: 'dataset', - // latest: true, - // }); - // }, - // }, - // ], - }, - { - title: 'Calls', // 'Traces (Calls)', - selected: - props.selectedCategory === 'calls' && - !( - props.filterCategory === 'train' || - props.filterCategory === 'predict' || - props.filterCategory === 'score' || - props.filterCategory === 'evaluate' || - props.filterCategory === 'tune' - ), - icon: , - onClick: () => { - props.navigateToCalls({ - traceRootsOnly: true, - }); - }, - // TODO: Get Feedback from team on this - // children: [ - // { - // title: 'Train', - // selected: props.filterCategory === 'train', - // icon: , - // onClick: () => { - // props.navigateToCalls({opCategory: 'train'}); - // }, - // }, - // { - // title: 'Predict', - // selected: props.filterCategory === 'predict', - // icon: , - // onClick: () => { - // props.navigateToCalls({opCategory: 'predict'}); - // }, - // }, - // { - // title: 'Score', - // selected: props.filterCategory === 'score', - // icon: , - // onClick: () => { - // props.navigateToCalls({opCategory: 'score'}); - // }, - // }, - // { - // title: 'Evaluate', - // selected: props.filterCategory === 'evaluate', - // icon: , - // onClick: () => { - // props.navigateToCalls({opCategory: 'evaluate'}); - // }, - // }, - // { - // title: 'Tune', - // selected: props.filterCategory === 'tune', - // icon: , - // onClick: () => { - // props.navigateToCalls({opCategory: 'tune'}); - // }, - // }, - // ], - }, - ], - }, - // { - // title: 'Structure', - // items: [ - // { - // title: 'Types', // 'Classes (TypeVersions)', - // selected: props.selectedCategory === 'types', - // icon: , - // onClick: () => { - // props.navigateToTypeVersions(); - // }, - // }, - // { - // title: 'Operations', // 'Methods (OpDefVersions)', - // selected: props.selectedCategory === 'ops', - // icon: , - // onClick: () => { - // props.navigateToOpVersions({ - // isLatest: true, - // }); - // }, - // }, - // ], - // }, - // { - // title: 'Analytics', - // items: [ - // { - // title: 'Boards', - // selected: props.selectedCategory === 'boards', - // icon: , - // onClick: () => { - // props.navigateToBoards(); - // }, - // }, - // { - // title: 'Tables', - // selected: props.selectedCategory === 'tables', - // icon: , - // onClick: () => { - // props.navigateToTables(); - // }, - // }, - // ], - // }, - ]; - }, [props]); - return sections; -}; From ea1b68ee6a2a956b51c6f9d6fb5bededec3776cf Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 05:32:41 +0000 Subject: [PATCH 057/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/sha1.txt | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index e10452f20ca..b674ed6f9f4 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -4b1fe03e0643e2ad771b26b3244aab1872f786a8 +9f53830edc46d39ae5c8a7906f81160dd0fc2d34 From 5c620cbaafd43d0df6fe77346657a362fa649a45 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Thu, 26 Sep 2024 11:04:09 -0500 Subject: [PATCH 058/179] chore: reduce header height and font size (#2492) --- .../PagePanelComponents/Home/Browse3.tsx | 6 +----- .../Home/Browse3/pages/CallPage/CallPage.tsx | 5 +---- .../Browse3/pages/common/SimplePageLayout.tsx | 18 ++++++++---------- 3 files changed, 10 insertions(+), 19 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx index fa62a622fed..b2c77cdab6c 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3.tsx @@ -397,11 +397,7 @@ const MainPeekingLayout: FC = () => { + +

    I=4HP(x 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

  • + } + content={baseObjectClass} + /> + ); + } + return null; +}; + export const ObjectVersionPage: React.FC<{ entity: string; project: string; @@ -126,7 +153,16 @@ const ObjectVersionPageInner: React.FC<{ return ( +
    + {baseObjectClass && ( + + )} + {objectVersionText(objectName, objectVersionIndex)} +
    + + } headerContent={ ), Version: <>{objectVersionIndex}, - ...(baseObjectClass - ? { - Category: ( - - ), - } - : {}), ...(refExtra ? { Subpath: refExtra, diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx index fd47b75e047..39152cdaaaa 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SimplePageLayout.tsx @@ -158,7 +158,7 @@ export const SimplePageLayout: FC<{ }; export const SimplePageLayoutWithHeader: FC<{ - title?: string; + title?: ReactNode; tabs: Array<{ label: string; content: ReactNode; From ed3a6fafed6f903b73efe4dd13bb24cb72607b2b Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 18:51:14 +0000 Subject: [PATCH 065/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 4 ++-- weave/frontend/sha1.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 1a6ac74f262..f9d97207eb5 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,8 +91,8 @@ - - + + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index d9513e2b6b9..fc9120da07b 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -bcdd3f8632fca98527e75c79adc5c1f3d3ee4c8d +2214bc2826fdbbeea6caa61c6eea739d611476cd From eeb4829f43529829a73ad157a263ac19bf08b2db Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Thu, 26 Sep 2024 12:25:15 -0700 Subject: [PATCH 066/179] perf: use lite objects query for object and op version loading (#2424) --- .../pages/CallsPage/callsTableFilter.ts | 13 +++-- .../Home/Browse3/pages/ObjectVersionPage.tsx | 47 +++++++++++++++---- .../Home/Browse3/pages/ObjectVersionsPage.tsx | 3 +- .../Home/Browse3/pages/OpVersionPage.tsx | 12 +++-- .../Home/Browse3/pages/OpVersionsPage.tsx | 17 +++++-- .../wfReactInterface/tsDataModelHooks.ts | 11 +++-- .../wfDataModelHooksInterface.ts | 2 + 7 files changed, 81 insertions(+), 24 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableFilter.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableFilter.ts index f29285b983e..cedd79c2f9e 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableFilter.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/callsTableFilter.ts @@ -125,9 +125,15 @@ export const useOpVersionOptions = ( } => { const {useOpVersions} = useWFHooks(); // Get all the "latest" versions - const latestVersions = useOpVersions(entity, project, { - latestOnly: true, - }); + const latestVersions = useOpVersions( + entity, + project, + { + latestOnly: true, + }, + undefined, + true // metadataOnly + ); // Get all the versions of the currently selected op const currentRef = effectiveFilter.opVersionRefs?.[0] ?? null; @@ -141,6 +147,7 @@ export const useOpVersionOptions = ( opIds: [currentOpId ?? ''], }, undefined, + true, // metadataOnly { skip: !currentOpId, } diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx index 62efdf7b537..5e1a0632018 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx @@ -104,9 +104,15 @@ const ObjectVersionPageInner: React.FC<{ const objectName = objectVersion.objectId; const objectVersionIndex = objectVersion.versionIndex; const refExtra = objectVersion.refExtra; - const objectVersions = useRootObjectVersions(entityName, projectName, { - objectIds: [objectName], - }); + const objectVersions = useRootObjectVersions( + entityName, + projectName, + { + objectIds: [objectName], + }, + undefined, + true + ); const objectVersionCount = (objectVersions.result ?? []).length; const baseObjectClass = useMemo(() => { if (objectVersion.baseObjectClass === 'Dataset') { @@ -119,12 +125,35 @@ const ObjectVersionPageInner: React.FC<{ }, [objectVersion.baseObjectClass]); const refUri = objectVersionKeyToRefUri(objectVersion); - const producingCalls = useCalls(entityName, projectName, { - outputObjectVersionRefs: [refUri], - }); - const consumingCalls = useCalls(entityName, projectName, { - inputObjectVersionRefs: [refUri], - }); + const minimalColumns = useMemo(() => { + return ['id', 'op_name', 'project_id']; + }, []); + const producingCalls = useCalls( + entityName, + projectName, + { + outputObjectVersionRefs: [refUri], + }, + undefined, + undefined, + undefined, + undefined, + minimalColumns + ); + + const consumingCalls = useCalls( + entityName, + projectName, + { + inputObjectVersionRefs: [refUri], + }, + undefined, + undefined, + undefined, + undefined, + minimalColumns + ); + const showCallsTab = !(producingCalls.loading || consumingCalls.loading) && (producingCalls.result?.length ?? 0) + diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx index e9ea490709b..f46d9eb16e6 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx @@ -394,7 +394,8 @@ const PeerVersionsLink: React.FC<{obj: ObjectVersionSchema}> = props => { { objectIds: [obj.objectId], }, - 100 + 100, + true // metadataOnly ); if (objectVersionsNode.loading) { return ; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx index 8b76964845a..ffb8e285351 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx @@ -48,9 +48,15 @@ const OpVersionPageInner: React.FC<{ const uri = opVersionKeyToRefUri(opVersion); const {entity, project, opId, versionIndex} = opVersion; - const opVersions = useOpVersions(entity, project, { - opIds: [opId], - }); + const opVersions = useOpVersions( + entity, + project, + { + opIds: [opId], + }, + undefined, // limit + true // metadataOnly + ); const opVersionCount = (opVersions.result ?? []).length; const callsStats = useCallsStats(entity, project, { opVersionRefs: [uri], diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx index 29c0a8a0bdc..332f279513e 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionsPage.tsx @@ -86,10 +86,16 @@ export const FilterableOpVersionsTable: React.FC<{ const effectivelyLatestOnly = !effectiveFilter.opName; - const filteredOpVersions = useOpVersions(props.entity, props.project, { - opIds: effectiveFilter.opName ? [effectiveFilter.opName] : undefined, - latestOnly: effectivelyLatestOnly, - }); + const filteredOpVersions = useOpVersions( + props.entity, + props.project, + { + opIds: effectiveFilter.opName ? [effectiveFilter.opName] : undefined, + latestOnly: effectivelyLatestOnly, + }, + undefined, + true + ); const rows: GridRowsProp = useMemo(() => { return (filteredOpVersions.result ?? []).map((ov, i) => { @@ -244,7 +250,8 @@ const PeerVersionsLink: React.FC<{obj: OpVersionSchema}> = props => { { opIds: [obj.opId], }, - 100 + 100, + true // metadataOnly ); if (ops.loading) { return ; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts index 4ce94eb1cb3..0c421a4babd 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts @@ -751,7 +751,7 @@ const convertTraceServerObjectVersionToOpSchema = ( const useOpVersions = makeTraceServerEndpointHook< 'objsQuery', - [string, string, OpVersionFilter, number?, {skip?: boolean}?], + [string, string, OpVersionFilter, number?, boolean?, {skip?: boolean}?], OpVersionSchema[] >( 'objsQuery', @@ -760,17 +760,18 @@ const useOpVersions = makeTraceServerEndpointHook< project: string, filter: OpVersionFilter, limit?: number, + metadataOnly?: boolean, opts?: {skip?: boolean} ) => ({ params: { project_id: projectIdFromParts({entity, project}), - // entity, - // project, filter: { object_ids: filter.opIds, latest_only: filter.latestOnly, is_op: true, }, + limit, + metadata_only: metadataOnly, }, skip: opts?.skip, }), @@ -910,6 +911,7 @@ const useRootObjectVersions = makeTraceServerEndpointHook( project: string, filter: ObjectVersionFilter, limit?: number, + metadataOnly?: boolean, opts?: {skip?: boolean} ) => ({ params: { @@ -920,6 +922,8 @@ const useRootObjectVersions = makeTraceServerEndpointHook( latest_only: filter.latestOnly, is_op: false, }, + limit, + metadata_only: metadataOnly, }, skip: opts?.skip, }), @@ -929,6 +933,7 @@ const useRootObjectVersions = makeTraceServerEndpointHook( inputProject, filter, limit, + metadataOnly, opts ): ObjectVersionSchema[] => res.objs.map(convertTraceServerObjectVersionToSchema) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts index 38fbd1e9ce3..7a2db9667b3 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts @@ -211,6 +211,7 @@ export type WFDataModelHooksInterface = { project: string, filter: OpVersionFilter, limit?: number, + metadataOnly?: boolean, opts?: {skip?: boolean} ) => LoadableWithError; useObjectVersion: ( @@ -221,6 +222,7 @@ export type WFDataModelHooksInterface = { project: string, filter: ObjectVersionFilter, limit?: number, + metadataOnly?: boolean, opts?: {skip?: boolean} ) => LoadableWithError; // `useRefsData` is in beta while we integrate Shawn's new Object DB From ba700f6cc5e73c518715f18bd7c435c9ebc90edc Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 19:29:17 +0000 Subject: [PATCH 067/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index f9d97207eb5..6da591720a5 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index fc9120da07b..bd2580f552e 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -2214bc2826fdbbeea6caa61c6eea739d611476cd +ae39115746cd6bc989ade63bc114b2d52fd5ab6b From 420136af95476bb378fbae0bc6e3638524fa481a Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Thu, 26 Sep 2024 17:36:27 -0500 Subject: [PATCH 068/179] chore: add two icons from design team (#2499) --- .../src/assets/icons/icon-drag-grip-horizontal.svg | 8 ++++++++ weave-js/src/assets/icons/icon-markdown.svg | 5 +++++ weave-js/src/components/Icon/Icon.tsx | 10 ++++++++++ weave-js/src/components/Icon/index.ts | 2 ++ weave-js/src/components/Icon/types.ts | 2 ++ 5 files changed, 27 insertions(+) create mode 100644 weave-js/src/assets/icons/icon-drag-grip-horizontal.svg create mode 100644 weave-js/src/assets/icons/icon-markdown.svg diff --git a/weave-js/src/assets/icons/icon-drag-grip-horizontal.svg b/weave-js/src/assets/icons/icon-drag-grip-horizontal.svg new file mode 100644 index 00000000000..e39ff274cc7 --- /dev/null +++ b/weave-js/src/assets/icons/icon-drag-grip-horizontal.svg @@ -0,0 +1,8 @@ + + + + + + + + diff --git a/weave-js/src/assets/icons/icon-markdown.svg b/weave-js/src/assets/icons/icon-markdown.svg new file mode 100644 index 00000000000..abd3a48b083 --- /dev/null +++ b/weave-js/src/assets/icons/icon-markdown.svg @@ -0,0 +1,5 @@ + + + + + diff --git a/weave-js/src/components/Icon/Icon.tsx b/weave-js/src/components/Icon/Icon.tsx index 862f50bef2d..55779a33788 100644 --- a/weave-js/src/components/Icon/Icon.tsx +++ b/weave-js/src/components/Icon/Icon.tsx @@ -60,6 +60,7 @@ import {ReactComponent as ImportDocument} from '../../assets/icons/icon-document import {ReactComponent as ImportDocumentation} from '../../assets/icons/icon-documentation.svg'; import {ReactComponent as ImportDownload} from '../../assets/icons/icon-download.svg'; import {ReactComponent as ImportDraft} from '../../assets/icons/icon-draft.svg'; +import {ReactComponent as ImportDragGripHorizontal} from '../../assets/icons/icon-drag-grip-horizontal.svg'; import {ReactComponent as ImportEducationAcademic} from '../../assets/icons/icon-education-academic.svg'; import {ReactComponent as ImportEmailAt} from '../../assets/icons/icon-email-at.svg'; import {ReactComponent as ImportEmailEnvelope} from '../../assets/icons/icon-email-envelope.svg'; @@ -123,6 +124,7 @@ import {ReactComponent as ImportLogOut} from '../../assets/icons/icon-log-out.sv import {ReactComponent as ImportLogoColab} from '../../assets/icons/icon-logo-colab.svg'; import {ReactComponent as ImportMagicWandStar} from '../../assets/icons/icon-magic-wand-star.svg'; import {ReactComponent as ImportMagicWandStick} from '../../assets/icons/icon-magic-wand-stick.svg'; +import {ReactComponent as ImportMarkdown} from '../../assets/icons/icon-markdown.svg'; import {ReactComponent as ImportMenu} from '../../assets/icons/icon-menu.svg'; import {ReactComponent as ImportMicrophoneAudio} from '../../assets/icons/icon-microphone-audio.svg'; import {ReactComponent as ImportMillerColumns} from '../../assets/icons/icon-miller-columns.svg'; @@ -441,6 +443,9 @@ export const IconDownload = (props: SVGIconProps) => ( export const IconDraft = (props: SVGIconProps) => ( ); +export const IconDragGripHorizontal = (props: SVGIconProps) => ( + +); export const IconEducationAcademic = (props: SVGIconProps) => ( ); @@ -630,6 +635,9 @@ export const IconMagicWandStar = (props: SVGIconProps) => ( export const IconMagicWandStick = (props: SVGIconProps) => ( ); +export const IconMarkdown = (props: SVGIconProps) => ( + +); export const IconMenu = (props: SVGIconProps) => ( ); @@ -1064,6 +1072,7 @@ const ICON_NAME_TO_ICON: Record = { documentation: IconDocumentation, download: IconDownload, draft: IconDraft, + 'drag-grip-horizontal': IconDragGripHorizontal, 'education-academic': IconEducationAcademic, 'email-at': IconEmailAt, 'email-envelope': IconEmailEnvelope, @@ -1127,6 +1136,7 @@ const ICON_NAME_TO_ICON: Record = { 'logo-colab': IconLogoColab, 'magic-wand-star': IconMagicWandStar, 'magic-wand-stick': IconMagicWandStick, + markdown: IconMarkdown, menu: IconMenu, 'microphone-audio': IconMicrophoneAudio, 'miller-columns': IconMillerColumns, diff --git a/weave-js/src/components/Icon/index.ts b/weave-js/src/components/Icon/index.ts index 08a4d6c6bef..46908984a07 100644 --- a/weave-js/src/components/Icon/index.ts +++ b/weave-js/src/components/Icon/index.ts @@ -60,6 +60,7 @@ export { IconDocumentation, IconDownload, IconDraft, + IconDragGripHorizontal, IconEducationAcademic, IconEmailAt, IconEmailEnvelope, @@ -123,6 +124,7 @@ export { IconLogOut, IconMagicWandStar, IconMagicWandStick, + IconMarkdown, IconMenu, IconMicrophoneAudio, IconMillerColumns, diff --git a/weave-js/src/components/Icon/types.ts b/weave-js/src/components/Icon/types.ts index f47bd5ae09f..c4d343bba17 100644 --- a/weave-js/src/components/Icon/types.ts +++ b/weave-js/src/components/Icon/types.ts @@ -59,6 +59,7 @@ export const IconNames = { Documentation: 'documentation', Download: 'download', Draft: 'draft', + DragGripHorizontal: 'drag-grip-horizontal', EducationAcademic: 'education-academic', EmailAt: 'email-at', EmailEnvelope: 'email-envelope', @@ -122,6 +123,7 @@ export const IconNames = { LogoColab: 'logo-colab', MagicWandStar: 'magic-wand-star', MagicWandStick: 'magic-wand-stick', + Markdown: 'markdown', Menu: 'menu', MicrophoneAudio: 'microphone-audio', MillerColumns: 'miller-columns', From 0ccad0d40bafb8201e10172b67f9d50e9924afef Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 22:40:30 +0000 Subject: [PATCH 069/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 6da591720a5..e27a073ebbc 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index bd2580f552e..67c04e2ab4b 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -ae39115746cd6bc989ade63bc114b2d52fd5ab6b +e036116f5dfcc3a29c479099023b91d9b43a176f From 46d2cc3243923419e8784023b88eef83fdcf7861 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Thu, 26 Sep 2024 15:42:39 -0700 Subject: [PATCH 070/179] chore: Improve test coverage - specifically asserting no error logs (#2495) * init * moved all loggers * moved all loggers * ok, i think we are good * final touches * lint * lint * support flake * lint and comments * lint and comments --- pytest.ini | 2 + requirements.test.txt | 1 + weave/conftest.py | 67 +++- weave/tests/trace/test_client_trace.py | 3 - weave/tests/trace/test_evaluate.py | 3 - weave/tests/trace/test_tracing_resilience.py | 334 ++++++++++++------- weave/tests/trace/test_weaveflow.py | 2 - weave/trace/async_job_queue.py | 6 +- weave/trace/op.py | 10 +- weave/trace/op_extensions/accumulator.py | 8 +- weave/trace/patcher.py | 4 +- weave/trace/tests/test_patcher.py | 9 +- weave/trace/vals.py | 12 +- weave/trace_server/async_batch_processor.py | 2 +- 14 files changed, 300 insertions(+), 163 deletions(-) diff --git a/pytest.ini b/pytest.ini index 40c9ac85e74..10c0069d688 100644 --- a/pytest.ini +++ b/pytest.ini @@ -9,3 +9,5 @@ filterwarnings = addopts = -v markers = skip_clickhouse_client: marks tests as requiring clickhouse client to be skipped + weave_client: alias for `client` fixture used for CI dispatching. Do not use directly in code. + disable_logging_error_check: means that the test expects logging errors (and the default assertion for no logging errors will fail) diff --git a/requirements.test.txt b/requirements.test.txt index 525f0216db3..791c11077e8 100644 --- a/requirements.test.txt +++ b/requirements.test.txt @@ -6,6 +6,7 @@ pytest>=8.2.0 pytest-asyncio>=0.23.6 pytest-xdist>=3.1.0 +pytest-rerunfailures>=12.0 clickhouse_connect==0.7.0 fastapi>=0.110.0 sqlparse==0.5.0 diff --git a/weave/conftest.py b/weave/conftest.py index 2a49a1565f8..66066143a9f 100644 --- a/weave/conftest.py +++ b/weave/conftest.py @@ -1,3 +1,4 @@ +import logging import os import random import shutil @@ -11,7 +12,6 @@ import weave from weave import context_state from weave.trace import weave_init -from weave.trace.context import raise_on_captured_errors from weave.trace_server import ( clickhouse_trace_server_batched, sqlite_trace_server, @@ -84,10 +84,69 @@ def pytest_collection_modifyitems(config, items): items[:] = selected_items +PYTEST_CURRENT_TEST_ENV_VAR = "PYTEST_CURRENT_TEST" + + +def get_test_name(): + return os.environ.get(PYTEST_CURRENT_TEST_ENV_VAR).split(" ")[0] + + +class InMemoryWeaveLogCollector(logging.Handler): + def __init__(self, *args, **kwargs): + super().__init__(*args, **kwargs) + self.log_records = {} + + def emit(self, record): + curr_test = get_test_name() + if curr_test not in self.log_records: + self.log_records[curr_test] = [] + self.log_records[curr_test].append(record) + + def get_error_logs(self): + curr_test = get_test_name() + logs = self.log_records.get(curr_test, []) + + return [ + record + for record in logs + if record.levelname == "ERROR" + and record.name.startswith("weave") + # (Tim) For some reason that i cannot figure out, there is some test that + # a) is trying to connect to the PROD trace server + # b) seemingly doesn't fail + # c) Logs these errors. + # I would love to fix this, but I have not been able to pin down which test + # is causing it and need to ship this PR, so I am just going to filter it out + # for now. + and not record.msg.startswith( + "Job failed with exception: 400 Client Error: Bad Request for url: https://trace.wandb.ai/" + ) + # Exclude legacy + and not record.name.startswith("weave.weave_server") + and not "legacy" in record.name + ] + + +@pytest.fixture +def log_collector(): + handler = InMemoryWeaveLogCollector() + logger = logging.getLogger() # Get your specific logger here if needed + logger.addHandler(handler) + logger.setLevel(logging.ERROR) # Set the level to capture all logs + yield handler + logger.removeHandler(handler) # Clean up after the test + + @pytest.fixture(autouse=True) -def always_raise_on_captured_errors(): - with raise_on_captured_errors(): - yield +def logging_error_check(request, log_collector): + yield + if "disable_logging_error_check" in request.keywords: + return + error_logs = log_collector.get_error_logs() + if error_logs: + pytest.fail( + f"Expected no errors, but found {len(error_logs)} error(s): {error_logs}" + ) @pytest.fixture(autouse=True) diff --git a/weave/tests/trace/test_client_trace.py b/weave/tests/trace/test_client_trace.py index 90f15b14066..af7a0943a5d 100644 --- a/weave/tests/trace/test_client_trace.py +++ b/weave/tests/trace/test_client_trace.py @@ -38,9 +38,6 @@ ) from weave.trace_server.validation import SHOULD_ENFORCE_OBJ_ID_CHARSET -pytestmark = pytest.mark.trace - - ## Hacky interface compatibility helpers ClientType = weave_client.WeaveClient diff --git a/weave/tests/trace/test_evaluate.py b/weave/tests/trace/test_evaluate.py index 28a5fdaee3a..f5ada25215f 100644 --- a/weave/tests/trace/test_evaluate.py +++ b/weave/tests/trace/test_evaluate.py @@ -6,9 +6,6 @@ from weave import Dataset, Evaluation, Model from weave.flow.scorer import MultiTaskBinaryClassificationF1 -pytestmark = pytest.mark.webtest - - dataset_rows = [{"input": "1 + 2", "target": 3}, {"input": "2**4", "target": 15}] dataset = Dataset(rows=dataset_rows) diff --git a/weave/tests/trace/test_tracing_resilience.py b/weave/tests/trace/test_tracing_resilience.py index 7ce27e719f8..3c4b00a3b1f 100644 --- a/weave/tests/trace/test_tracing_resilience.py +++ b/weave/tests/trace/test_tracing_resilience.py @@ -19,7 +19,7 @@ from weave.trace_server import trace_server_interface as tsi -class TestException(Exception): +class DummyTestException(Exception): pass @@ -31,18 +31,18 @@ def test_resilience_to_user_code_errors(client): def do_test(): @weave.op def throws(): - raise TestException("This is a test exception") + raise DummyTestException("This is a test exception") throws() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + do_test() # The user's exception should be raised - even if we're not capturing errors - with raise_on_captured_errors(False): - with pytest.raises(TestException): - do_test() + with pytest.raises(DummyTestException): + do_test() assert_no_current_call() @@ -50,85 +50,85 @@ def throws(): class ThrowingServer(tsi.TraceServerInterface): # Call API def call_start(self, req: tsi.CallStartReq) -> tsi.CallStartRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def call_end(self, req: tsi.CallEndReq) -> tsi.CallEndRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def call_read(self, req: tsi.CallReadReq) -> tsi.CallReadRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def calls_query(self, req: tsi.CallsQueryReq) -> tsi.CallsQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def calls_query_stream(self, req: tsi.CallsQueryReq) -> Iterator[tsi.CallSchema]: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def calls_delete(self, req: tsi.CallsDeleteReq) -> tsi.CallsDeleteRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def calls_query_stats(self, req: tsi.CallsQueryStatsReq) -> tsi.CallsQueryStatsRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def call_update(self, req: tsi.CallUpdateReq) -> tsi.CallUpdateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") # Op API def op_create(self, req: tsi.OpCreateReq) -> tsi.OpCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def op_read(self, req: tsi.OpReadReq) -> tsi.OpReadRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def ops_query(self, req: tsi.OpQueryReq) -> tsi.OpQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") # Cost API def cost_create(self, req: tsi.CostCreateReq) -> tsi.CostCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def cost_query(self, req: tsi.CostQueryReq) -> tsi.CostQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def cost_purge(self, req: tsi.CostPurgeReq) -> tsi.CostPurgeRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") # Obj API def obj_create(self, req: tsi.ObjCreateReq) -> tsi.ObjCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def objs_query(self, req: tsi.ObjQueryReq) -> tsi.ObjQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def table_create(self, req: tsi.TableCreateReq) -> tsi.TableCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def table_update(self, req: tsi.TableUpdateReq) -> tsi.TableUpdateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def table_query(self, req: tsi.TableQueryReq) -> tsi.TableQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def refs_read_batch(self, req: tsi.RefsReadBatchReq) -> tsi.RefsReadBatchRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def file_create(self, req: tsi.FileCreateReq) -> tsi.FileCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def file_content_read(self, req: tsi.FileContentReadReq) -> tsi.FileContentReadRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def feedback_create(self, req: tsi.FeedbackCreateReq) -> tsi.FeedbackCreateRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def feedback_query(self, req: tsi.FeedbackQueryReq) -> tsi.FeedbackQueryRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def feedback_purge(self, req: tsi.FeedbackPurgeReq) -> tsi.FeedbackPurgeRes: - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") @pytest.mark.skip( @@ -145,24 +145,25 @@ def simple_op(): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert res == "hello" + res = do_test() + assert res == "hello" assert_no_current_call() -def test_resilience_to_patcher_errors(client): +@pytest.mark.disable_logging_error_check +def test_resilience_to_patcher_errors(client, log_collector): class Module: def method(self): return 0 def custom_patcher(m: Callable): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def do_test(): test_patcher = MultiPatcher( @@ -184,85 +185,107 @@ def do_test(): assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Failed to patch") + -def test_resilience_to_output_handler_errors(client): +@pytest.mark.disable_logging_error_check +def test_resilience_to_output_handler_errors(client, log_collector): def do_test(): @weave.op def simple_op(): return "hello" def on_output_handler(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") simple_op._set_on_output_handler(on_output_handler) return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert res == "hello" + res = do_test() + assert res == "hello" assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + @pytest.mark.asyncio -async def test_resilience_to_output_handler_errors_async(client): +@pytest.mark.disable_logging_error_check +async def test_resilience_to_output_handler_errors_async(client, log_collector): async def do_test(): @weave.op async def simple_op(): return "hello" def on_output_handler(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") simple_op._set_on_output_handler(on_output_handler) return await simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - await do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + await do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = await do_test() - assert res == "hello" + res = await do_test() + assert res == "hello" assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + -def test_resilience_to_accumulator_make_accumulator_errors(client): +@pytest.mark.disable_logging_error_check +def test_resilience_to_accumulator_make_accumulator_errors(client, log_collector): def do_test(): @weave.op def simple_op(): yield from [1, 2, 3] def make_accumulator(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator(simple_op, make_accumulator=make_accumulator) return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert list(res) == [1, 2, 3] + res = do_test() + assert list(res) == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + @pytest.mark.asyncio -async def test_resilience_to_accumulator_make_accumulator_errors_async(client): +@pytest.mark.disable_logging_error_check +async def test_resilience_to_accumulator_make_accumulator_errors_async( + client, log_collector +): async def do_test(): @weave.op async def simple_op(): @@ -271,25 +294,30 @@ async def simple_op(): yield 3 def make_accumulator(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator(simple_op, make_accumulator=make_accumulator) return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - await do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + await do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = await do_test() - assert [item async for item in res] == [1, 2, 3] + res = await do_test() + assert [item async for item in res] == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + -def test_resilience_to_accumulator_accumulation_errors(client): +@pytest.mark.disable_logging_error_check +def test_resilience_to_accumulator_accumulation_errors(client, log_collector): def do_test(): @weave.op def simple_op(): @@ -297,7 +325,7 @@ def simple_op(): def make_accumulator(*args, **kwargs): def accumulate(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") return accumulate @@ -306,19 +334,28 @@ def accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - list(do_test()) + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + list(do_test()) # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert list(res) == [1, 2, 3] + res = do_test() + assert list(res) == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith( + "Error capturing value from iterator, call data may be incomplete" + ) + @pytest.mark.asyncio -async def test_resilience_to_accumulator_accumulation_errors_async(client): +@pytest.mark.disable_logging_error_check +async def test_resilience_to_accumulator_accumulation_errors_async( + client, log_collector +): async def do_test(): @weave.op async def simple_op(): @@ -328,7 +365,7 @@ async def simple_op(): def make_accumulator(*args, **kwargs): def accumulate(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") return accumulate @@ -337,19 +374,26 @@ def accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - res = await do_test() - l = [item async for item in res] + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + res = await do_test() + l = [item async for item in res] # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = await do_test() - assert [item async for item in res] == [1, 2, 3] + res = await do_test() + assert [item async for item in res] == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith( + "Error capturing async value from iterator, call data may be incomplete" + ) + -def test_resilience_to_accumulator_should_accumulate_errors(client): +@pytest.mark.disable_logging_error_check +def test_resilience_to_accumulator_should_accumulate_errors(client, log_collector): def do_test(): @weave.op def simple_op(): @@ -362,7 +406,7 @@ def accumulate(*args, **kwargs): return accumulate def should_accumulate(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator( simple_op, @@ -373,19 +417,26 @@ def should_accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - list(do_test()) + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + list(do_test()) # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert list(res) == [1, 2, 3] + res = do_test() + assert list(res) == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + @pytest.mark.asyncio -async def test_resilience_to_accumulator_should_accumulate_errors_async(client): +@pytest.mark.disable_logging_error_check +async def test_resilience_to_accumulator_should_accumulate_errors_async( + client, log_collector +): async def do_test(): @weave.op async def simple_op(): @@ -394,13 +445,13 @@ async def simple_op(): yield 3 def make_accumulator(*args, **kwargs): - async def accumulate(*args, **kwargs): + def accumulate(*args, **kwargs): return {} return accumulate def should_accumulate(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator( simple_op, @@ -411,18 +462,30 @@ def should_accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - await do_test() + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + await do_test() # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = await do_test() - assert [item async for item in res] == [1, 2, 3] + res = await do_test() + assert [item async for item in res] == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert logs[0].msg.startswith("Error capturing call output") + -def test_resilience_to_accumulator_on_finish_post_processor_errors(client): +# Here we are ignoring this warning because the exception IS being raised, +# and that is expected and tested for. It happens to be at the deletion moment +# so pytest is complaining that the exception is not being raised in the +# expected manner. +@pytest.mark.filterwarnings("ignore::pytest.PytestUnraisableExceptionWarning") +@pytest.mark.disable_logging_error_check +def test_resilience_to_accumulator_on_finish_post_processor_errors( + client, log_collector +): def do_test(): @weave.op def simple_op(): @@ -435,7 +498,7 @@ def accumulate(*args, **kwargs): return accumulate def on_finish_post_processor(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator( simple_op, @@ -446,19 +509,27 @@ def on_finish_post_processor(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - list(do_test()) + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + list(do_test()) # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = do_test() - assert list(res) == [1, 2, 3] + res = do_test() + assert list(res) == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) > 0 + for log in logs: + assert log.msg.startswith("Error closing iterator, call data may be incomplete") + @pytest.mark.asyncio -async def test_resilience_to_accumulator_on_finish_post_processor_errors_async(client): +@pytest.mark.disable_logging_error_check +async def test_resilience_to_accumulator_on_finish_post_processor_errors_async( + client, log_collector +): async def do_test(): @weave.op async def simple_op(): @@ -467,13 +538,13 @@ async def simple_op(): yield 3 def make_accumulator(*args, **kwargs): - async def accumulate(*args, **kwargs): + def accumulate(*args, **kwargs): return {} return accumulate def on_finish_post_processor(*args, **kwargs): - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") add_accumulator( simple_op, @@ -484,24 +555,29 @@ def on_finish_post_processor(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - res = await do_test() - l = [item async for item in res] + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + res = await do_test() + l = [item async for item in res] # We should gracefully handle the error and return a value - with raise_on_captured_errors(False): - res = await do_test() - assert [item async for item in res] == [1, 2, 3] + res = await do_test() + assert [item async for item in res] == [1, 2, 3] assert_no_current_call() + logs = log_collector.get_error_logs() + assert len(logs) > 0 + for log in logs: + assert log.msg.startswith("Error closing iterator, call data may be incomplete") + def test_resilience_to_accumulator_internal_errors(client): def do_test(): @weave.op def simple_op(): yield 1 - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def make_accumulator(*args, **kwargs): def accumulate(*args, **kwargs): @@ -514,13 +590,13 @@ def accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - list(do_test()) + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): + list(do_test()) # User errors should still be raised - with raise_on_captured_errors(False): - with pytest.raises(TestException): - list(do_test()) + with pytest.raises(DummyTestException): + list(do_test()) assert_no_current_call() @@ -531,10 +607,10 @@ async def do_test(): @weave.op async def simple_op(): yield 1 - raise TestException("FAILURE!") + raise DummyTestException("FAILURE!") def make_accumulator(*args, **kwargs): - async def accumulate(*args, **kwargs): + def accumulate(*args, **kwargs): return {} return accumulate @@ -544,14 +620,14 @@ async def accumulate(*args, **kwargs): return simple_op() # The user's exception should be raised - even if we're capturing errors - with pytest.raises(TestException): - res = await do_test() - l = [item async for item in res] - - # User errors should still be raised - with raise_on_captured_errors(False): - with pytest.raises(TestException): + with raise_on_captured_errors(True): + with pytest.raises(DummyTestException): res = await do_test() l = [item async for item in res] + # User errors should still be raised + with pytest.raises(DummyTestException): + res = await do_test() + l = [item async for item in res] + assert_no_current_call() diff --git a/weave/tests/trace/test_weaveflow.py b/weave/tests/trace/test_weaveflow.py index 81e0f426f87..a0c0039cdbd 100644 --- a/weave/tests/trace/test_weaveflow.py +++ b/weave/tests/trace/test_weaveflow.py @@ -7,8 +7,6 @@ import weave from weave.legacy.weave import ref_base -pytestmark = pytest.mark.trace - @pytest.mark.skip("failing in ci") def test_digestrefs(client): diff --git a/weave/trace/async_job_queue.py b/weave/trace/async_job_queue.py index 07c08cbe3ca..63ab88628ca 100644 --- a/weave/trace/async_job_queue.py +++ b/weave/trace/async_job_queue.py @@ -85,9 +85,9 @@ def callback(f: Future[T]) -> None: self._active_jobs.remove(f) exception = f.exception() if exception: - logger.error(f"Job failed with exception: {exception}") if get_raise_on_captured_errors(): raise + logger.error(f"Job failed with exception: {exception}") future.add_done_callback(callback) return future @@ -97,9 +97,9 @@ def _at_exit_handler(self) -> None: try: self.executor.shutdown(wait=True) except Exception as e: - logger.error(f"Error shutting down executor: {e}") if get_raise_on_captured_errors(): raise + logger.error(f"Error shutting down executor: {e}") def flush(self) -> None: """Waits for all currently submitted jobs to complete. @@ -115,6 +115,6 @@ def flush(self) -> None: try: future.result() except Exception as e: - logger.error(f"Job failed during flush: {e}") if get_raise_on_captured_errors(): raise + logger.error(f"Job failed during flush: {e}") diff --git a/weave/trace/op.py b/weave/trace/op.py index d2771a9aad4..32c88c9950c 100644 --- a/weave/trace/op.py +++ b/weave/trace/op.py @@ -251,9 +251,9 @@ def process(res: Any) -> Any: # the output res = on_output(res) except Exception as e: - log_once(logger.error, ON_OUTPUT_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise + log_once(logger.error, ON_OUTPUT_MSG.format(traceback.format_exc())) finally: # Is there a better place for this? We want to ensure that even # if the final output fails to be captured, we still pop the call @@ -461,12 +461,12 @@ async def wrapper(*args: Any, **kwargs: Any) -> Any: # still let the user code continue to execute call = _create_call(wrapper, *args, **kwargs) # type: ignore except Exception as e: + if get_raise_on_captured_errors(): + raise log_once( logger.error, ASYNC_CALL_CREATE_MSG.format(traceback.format_exc()), ) - if get_raise_on_captured_errors(): - raise return await func(*args, **kwargs) res, _ = await _execute_call(wrapper, call, *args, **kwargs) # type: ignore return res @@ -485,11 +485,11 @@ def wrapper(*args: Any, **kwargs: Any) -> Any: # still let the user code continue to execute call = _create_call(wrapper, *args, **kwargs) # type: ignore except Exception as e: + if get_raise_on_captured_errors(): + raise log_once( logger.error, CALL_CREATE_MSG.format(traceback.format_exc()) ) - if get_raise_on_captured_errors(): - raise return func(*args, **kwargs) res, _ = _execute_call(wrapper, call, *args, **kwargs) # type: ignore return res diff --git a/weave/trace/op_extensions/accumulator.py b/weave/trace/op_extensions/accumulator.py index ffa94231e4e..6cb9b3e8df9 100644 --- a/weave/trace/op_extensions/accumulator.py +++ b/weave/trace/op_extensions/accumulator.py @@ -62,9 +62,9 @@ def _call_on_close_once(self) -> None: try: self._on_close() # type: ignore except Exception as e: - log_once(logger.error, ON_CLOSE_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise + log_once(logger.error, ON_CLOSE_MSG.format(traceback.format_exc())) self._on_finished_called = True def _call_on_error_once(self, e: Exception) -> None: @@ -72,9 +72,9 @@ def _call_on_error_once(self, e: Exception) -> None: try: self._on_error(e) except Exception as e: - log_once(logger.error, ON_ERROR_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise + log_once(logger.error, ON_ERROR_MSG.format(traceback.format_exc())) self._on_finished_called = True def __iter__(self) -> "_IteratorWrapper": @@ -98,9 +98,9 @@ def __next__(self) -> Generator[None, None, V]: # with usage info from openai integration). if isinstance(e, (StopAsyncIteration, StopIteration)): raise - log_once(logger.error, ON_YIELD_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise + log_once(logger.error, ON_YIELD_MSG.format(traceback.format_exc())) return value except (StopIteration, StopAsyncIteration) as e: self._call_on_close_once() @@ -130,9 +130,9 @@ async def __anext__(self) -> Generator[None, None, V]: # with usage info from openai integration). if isinstance(e, (StopAsyncIteration, StopIteration)): raise - log_once(logger.error, ON_AYIELD_MSG.format(traceback.format_exc())) if get_raise_on_captured_errors(): raise + log_once(logger.error, ON_AYIELD_MSG.format(traceback.format_exc())) return value except (StopAsyncIteration, StopIteration) as e: self._call_on_close_once() diff --git a/weave/trace/patcher.py b/weave/trace/patcher.py index aebec49e541..406159ed8a0 100644 --- a/weave/trace/patcher.py +++ b/weave/trace/patcher.py @@ -24,9 +24,9 @@ def attempt_patch(self) -> bool: try: all_successful = all_successful and patcher.attempt_patch() except Exception as e: - logger.error(f"Error patching - some logs may not be captured: {e}") if get_raise_on_captured_errors(): raise + logger.error(f"Error patching - some logs may not be captured: {e}") all_successful = False return all_successful @@ -36,9 +36,9 @@ def undo_patch(self) -> bool: try: all_successful = all_successful and patcher.undo_patch() except Exception as e: - logger.error(f"Error unpatching: {e}") if get_raise_on_captured_errors(): raise + logger.error(f"Error unpatching: {e}") all_successful = False return all_successful diff --git a/weave/trace/tests/test_patcher.py b/weave/trace/tests/test_patcher.py index 2528542eb2b..dd08155ce59 100644 --- a/weave/trace/tests/test_patcher.py +++ b/weave/trace/tests/test_patcher.py @@ -1,5 +1,7 @@ import importlib +import pytest + from weave.trace.patcher import SymbolPatcher @@ -48,7 +50,8 @@ def test_symbol_patcher_invalid_attr(): assert not patcher.undo_patch() -def test_symbol_patcher_invalid_patching(): +@pytest.mark.disable_logging_error_check +def test_symbol_patcher_invalid_patching(log_collector): from .test_patcher_module.example_class import ExampleClass patcher = SymbolPatcher( @@ -63,3 +66,7 @@ def test_symbol_patcher_invalid_patching(): assert not patcher.undo_patch() obj = ExampleClass() assert obj.example_fn() == 42 + + logs = log_collector.get_error_logs() + assert len(logs) == 1 + assert "Failed to patch ExampleClass.example_fn" in logs[0].msg diff --git a/weave/trace/vals.py b/weave/trace/vals.py index f5166e5bea4..f1d4f5496b2 100644 --- a/weave/trace/vals.py +++ b/weave/trace/vals.py @@ -326,22 +326,22 @@ def _local_iter_with_remote_fallback(self) -> Generator[dict, None, None]: or self.table_ref.row_digests is None or self._prefetched_rows is None ): + if get_raise_on_captured_errors(): + raise logger.error( "Expected all row digests and prefetched rows to be set, falling back to remote iteration" ) - if get_raise_on_captured_errors(): - raise yield from self._remote_iter() return row_digest_len = len(self.table_ref.row_digests) prefetched_rows_len = len(self._prefetched_rows) if row_digest_len != prefetched_rows_len: + if get_raise_on_captured_errors(): + raise logger.error( f"Expected length of row digests ({row_digest_len}) to match prefetched rows ({prefetched_rows_len}). Falling back to remote iteration." ) - if get_raise_on_captured_errors(): - raise yield from self._remote_iter() return @@ -374,11 +374,11 @@ def _remote_iter(self) -> Generator[dict, None, None]: if self._prefetched_rows is not None and len(response.rows) != len( self._prefetched_rows ): + if get_raise_on_captured_errors(): + raise logger.error( f"Expected length of response rows ({len(response.rows)}) to match prefetched rows ({len(self._prefetched_rows)}). Ignoring prefetched rows." ) - if get_raise_on_captured_errors(): - raise self._prefetched_rows = None for ndx, item in enumerate(response.rows): diff --git a/weave/trace_server/async_batch_processor.py b/weave/trace_server/async_batch_processor.py index af77d222e9d..4e05f6efc7b 100644 --- a/weave/trace_server/async_batch_processor.py +++ b/weave/trace_server/async_batch_processor.py @@ -64,9 +64,9 @@ def _process_batches(self) -> None: except requests.HTTPError as e: if e.response.status_code == 413: # 413: payload too large, don't raise just log - logger.error(f"Error processing batch: {e}") if get_raise_on_captured_errors(): raise + logger.error(f"Error processing batch: {e}") else: raise e From a346e2a509e3ef8fe220ddff33d93ee65411618d Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Thu, 26 Sep 2024 15:46:05 -0700 Subject: [PATCH 071/179] chore: objects query conditionally use metadataOnly (#2501) --- .../Home/Browse3/pages/ObjectVersionsPage.tsx | 4 +++- 1 file changed, 3 insertions(+), 1 deletion(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx index f46d9eb16e6..9222808d619 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionsPage.tsx @@ -130,7 +130,9 @@ export const FilterableObjectVersionsTable: React.FC<{ ? [effectiveFilter.objectName] : undefined, latestOnly: effectivelyLatestOnly, - } + }, + undefined, + effectivelyLatestOnly // metadata only when getting latest ); if (filteredObjectVersions.loading) { From 5a9ee8c51216407b773b2c41c2f42def19c2b6cd Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Thu, 26 Sep 2024 22:50:20 +0000 Subject: [PATCH 072/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index e27a073ebbc..283d3d7aee0 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 67c04e2ab4b..daf6b9ff136 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -e036116f5dfcc3a29c479099023b91d9b43a176f +6cbef7675d22dbdfea739010d9991ed125e739a8 From bba25d506c300079851b00c8adebe6f2b1d46244 Mon Sep 17 00:00:00 2001 From: Andrew Truong Date: Thu, 26 Sep 2024 20:50:26 -0400 Subject: [PATCH 073/179] chore(weave): Minimize dependencies between Trace and Query code bases (#2433) --- weave/conftest.py | 2 +- weave/deploy/gcp/__init__.py | 21 +- weave/legacy/tests/test_op.py | 25 - weave/legacy/tests/test_refs.py | 4 +- weave/legacy/tests/test_weave_api.py | 1 - weave/legacy/weave/api.py | 6 +- weave/legacy/weave/arrow/list_.py | 2 +- weave/legacy/weave/artifact_fs.py | 2 +- weave/legacy/weave/box.py | 2 +- weave/legacy/weave/mappers_python_def.py | 4 +- weave/legacy/weave/monitoring/monitor.py | 6 +- .../legacy/weave/monitoring/openai/openai.py | 4 +- weave/legacy/weave/object_type_ref_util.py | 2 +- weave/legacy/weave/op_def.py | 5 - weave/legacy/weave/op_execute.py | 6 - weave/legacy/weave/parallelism.py | 25 +- weave/legacy/weave/ref_base.py | 11 - weave/{trace => legacy/weave}/ref_util.py | 10 +- weave/legacy/weave/storage.py | 16 +- weave/legacy/weave/urls.py | 5 + weave/tests/trace/test_client_trace.py | 2 +- weave/tests/trace/test_op_versioning.py | 64 --- weave/tests/trace/test_weave_client.py | 20 - weave/tests/trace/test_weaveflow.py | 79 --- weave/trace/api.py | 5 +- weave/trace/box.py | 2 +- weave/trace/cli.py | 17 - .../client_context}/context_state.py | 0 weave/trace/client_context/weave_client.py | 10 +- weave/trace/custom_objs.py | 99 +--- weave/trace/env.py | 90 ++++ weave/trace/errors.py | 3 + weave/trace/init_message.py | 2 +- weave/trace/mem_artifact.py | 92 ++++ weave/trace/op.py | 6 +- weave/trace/op_type.py | 46 +- weave/trace/serve_fastapi.py | 10 +- weave/trace/urls.py | 38 ++ weave/trace/weave_client.py | 9 +- weave/trace/weave_init.py | 5 +- weave/trace_server/trace_server_interface.py | 13 - .../remote_http_trace_server.py | 4 +- weave/wandb_interface/__init__.py | 0 .../wandb_interface/project_creator.py | 6 +- weave/wandb_interface/wandb_api.py | 467 ++++++++++++++++++ 45 files changed, 788 insertions(+), 460 deletions(-) rename weave/{trace => legacy/weave}/ref_util.py (91%) rename weave/{ => trace/client_context}/context_state.py (100%) create mode 100644 weave/trace/mem_artifact.py create mode 100644 weave/trace/urls.py create mode 100644 weave/wandb_interface/__init__.py rename weave/{legacy/weave => }/wandb_interface/project_creator.py (95%) create mode 100644 weave/wandb_interface/wandb_api.py diff --git a/weave/conftest.py b/weave/conftest.py index 66066143a9f..3ba07d3c809 100644 --- a/weave/conftest.py +++ b/weave/conftest.py @@ -10,8 +10,8 @@ from fastapi.testclient import TestClient import weave -from weave import context_state from weave.trace import weave_init +from weave.trace.client_context import context_state from weave.trace_server import ( clickhouse_trace_server_batched, sqlite_trace_server, diff --git a/weave/deploy/gcp/__init__.py b/weave/deploy/gcp/__init__.py index dfe8947be6c..d0bab77e2e5 100644 --- a/weave/deploy/gcp/__init__.py +++ b/weave/deploy/gcp/__init__.py @@ -8,8 +8,7 @@ from pathlib import Path from weave import __version__ -from weave.legacy.weave import environment -from weave.legacy.weave.artifact_wandb import WeaveWBArtifactURI as WeaveWBArtifactURI +from weave.trace import env from weave.trace.refs import ObjectRef, parse_uri from ..util import execute, safe_name @@ -47,9 +46,11 @@ def generate_requirements_txt(model_ref: str, dir: str, dev: bool = False) -> st cwd = Path(os.getcwd()) if dev and (cwd / "build_dist.py").exists(): print("Building weave for development...") - env = os.environ.copy() - env.update({"WEAVE_SKIP_BUILD": "1"}) - execute([sys.executable, str(cwd / "build_dist.py")], env=env, capture=False) + env_dict = os.environ.copy() + env_dict.update({"WEAVE_SKIP_BUILD": "1"}) + execute( + [sys.executable, str(cwd / "build_dist.py")], env=env_dict, capture=False + ) wheel = f"weave-{__version__}-py3-none-any.whl" execute(["cp", str(cwd / "dist" / wheel), dir], capture=False) weave = f"/app/{wheel}" @@ -258,7 +259,7 @@ def deploy( raise ValueError(f"Expected a weave object uri, got {type(ref)}") name = safe_name(f"{ref.project}-{ref.name}") project = wandb_project or ref.project - key = environment.weave_wandb_api_key() + key = env.weave_wandb_api_key() secrets = { "WANDB_API_KEY": key, } @@ -319,11 +320,11 @@ def develop( execute( [docker, "buildx", "build", "-t", name, "--load", "."], cwd=dir, capture=False ) - env_api_key = environment.weave_wandb_api_key() + env_api_key = env.weave_wandb_api_key() if env_api_key is None: raise ValueError("WANDB_API_KEY environment variable required") - env = {"WANDB_API_KEY": env_api_key} - env.update(os.environ.copy()) + env_dict = {"WANDB_API_KEY": env_api_key} + env_dict.update(os.environ.copy()) print("Running container at http://localhost:8080") execute( [ @@ -337,7 +338,7 @@ def develop( "OPENAI_API_KEY", name, ], - env=env, + env=env_dict, capture=False, ) if os.getenv("DEBUG") == None: diff --git a/weave/legacy/tests/test_op.py b/weave/legacy/tests/test_op.py index 8bb75326f50..76141cc1c79 100644 --- a/weave/legacy/tests/test_op.py +++ b/weave/legacy/tests/test_op.py @@ -249,28 +249,3 @@ def my_op(self, a: int) -> str: # type: ignore[empty-body] "a": types.Int(), } assert SomeWeaveObj.my_op.concrete_output_type == types.String() - - -def test_op_internal_tracing_enabled(client): - # This test verifies the behavior of `_tracing_enabled` which - # is not a user-facing API and is used internally to toggle - # tracing on and off. - @weave.op - def my_op(): - return "hello" - - my_op() # <-- this call will be traced - - assert len(list(my_op.calls())) == 1 - - my_op._tracing_enabled = False - - my_op() # <-- this call will not be traced - - assert len(list(my_op.calls())) == 1 - - my_op._tracing_enabled = True - - my_op() # <-- this call will be traced - - assert len(list(my_op.calls())) == 2 diff --git a/weave/legacy/tests/test_refs.py b/weave/legacy/tests/test_refs.py index 98bd7048bc5..a9b6d7c589e 100644 --- a/weave/legacy/tests/test_refs.py +++ b/weave/legacy/tests/test_refs.py @@ -4,8 +4,8 @@ from weave.flow.obj import Object from weave.legacy.weave import artifact_local, storage from weave.legacy.weave import ops_arrow as arrow -from weave.trace import ref_util -from weave.trace_server.refs_internal import ( +from weave.legacy.weave import ref_util +from weave.legacy.weave.ref_util import ( DICT_KEY_EDGE_NAME, LIST_INDEX_EDGE_NAME, OBJECT_ATTR_EDGE_NAME, diff --git a/weave/legacy/tests/test_weave_api.py b/weave/legacy/tests/test_weave_api.py index 8253e7a49c0..f62a2881910 100644 --- a/weave/legacy/tests/test_weave_api.py +++ b/weave/legacy/tests/test_weave_api.py @@ -5,7 +5,6 @@ import weave import weave.legacy.weave.context_state import weave.legacy.weave.wandb_api -import weave.trace.weave_init def test_create_list_rename_delete(): diff --git a/weave/legacy/weave/api.py b/weave/legacy/weave/api.py index 13d34e60760..6fa1726b37e 100644 --- a/weave/legacy/weave/api.py +++ b/weave/legacy/weave/api.py @@ -17,8 +17,6 @@ from weave.legacy.weave import util as _util from weave.legacy.weave import context as _context -from ...trace import weave_init as _weave_init -from ...trace import weave_client as _weave_client # exposed as part of api from weave.legacy.weave import weave_types as types @@ -42,7 +40,7 @@ from weave.legacy.weave.arrow.list_ import ArrowWeaveList as WeaveList # TODO: This is here because the op overloaded... -from weave.trace.op import op # noqa: F401 +from weave.legacy.weave.decorator_op import op def save(node_or_obj, name=None): # type: ignore from weave.legacy.weave.ops_primitives.weave_api import get, save @@ -128,8 +126,6 @@ def from_pandas(df): # type: ignore "_weave_internal", "_util", "_context", - "_weave_init", - "_weave_client", "types", "_types_numpy", "errors", diff --git a/weave/legacy/weave/arrow/list_.py b/weave/legacy/weave/arrow/list_.py index 6e3d0e85161..9a6a28b80ad 100644 --- a/weave/legacy/weave/arrow/list_.py +++ b/weave/legacy/weave/arrow/list_.py @@ -37,7 +37,7 @@ tag_store, tagged_value_type, ) -from weave.trace import ref_util +from weave.legacy.weave import ref_util def reverse_dict(d: dict) -> dict: diff --git a/weave/legacy/weave/artifact_fs.py b/weave/legacy/weave/artifact_fs.py index 37cc0a3b5ae..206d1bf487d 100644 --- a/weave/legacy/weave/artifact_fs.py +++ b/weave/legacy/weave/artifact_fs.py @@ -10,7 +10,7 @@ from weave.legacy.weave import weave_types as types from weave.legacy.weave import artifact_base, file_base, object_context, ref_base, uris from weave.legacy.weave.language_features.tagging import tag_store -from weave.trace import ref_util +from weave.legacy.weave import ref_util if typing.TYPE_CHECKING: from weave.legacy.weave import graph diff --git a/weave/legacy/weave/box.py b/weave/legacy/weave/box.py index a16725af94a..893707e6b26 100644 --- a/weave/legacy/weave/box.py +++ b/weave/legacy/weave/box.py @@ -4,7 +4,7 @@ import numpy as np -from weave.trace import ref_util +from weave.legacy.weave import ref_util from weave.legacy.weave import context_state diff --git a/weave/legacy/weave/mappers_python_def.py b/weave/legacy/weave/mappers_python_def.py index 7951b462060..36faaad7ffb 100644 --- a/weave/legacy/weave/mappers_python_def.py +++ b/weave/legacy/weave/mappers_python_def.py @@ -19,7 +19,6 @@ from weave.legacy.weave import timestamp as weave_timestamp from weave.legacy.weave.language_features.tagging import tagged_value_type from weave.legacy.weave.partial_object import PartialObject, PartialObjectType -from weave.trace.client_context import weave_client as weave_client_context class TypedDictToPyDict(mappers_weave.TypedDictMapper): @@ -341,7 +340,8 @@ def apply(self, obj): pass # If the ref exists elsewhere, just return its uri. # TODO: This doesn't deal with MemArtifactRef! - gc = weave_client_context.get_weave_client() + # gc = weave_client_context.get_weave_client() + gc = None # Dropped as part of query service refactor existing_ref = storage._get_ref(obj) if isinstance(existing_ref, artifact_fs.FilesystemArtifactRef): diff --git a/weave/legacy/weave/monitoring/monitor.py b/weave/legacy/weave/monitoring/monitor.py index 8307b799960..352cff56981 100644 --- a/weave/legacy/weave/monitoring/monitor.py +++ b/weave/legacy/weave/monitoring/monitor.py @@ -1,4 +1,6 @@ -"""Monitoring & tracing""" +"""NO LONGER SUPPORTED + +Monitoring & tracing""" import asyncio import contextlib @@ -18,7 +20,7 @@ stream_data_interfaces ) from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable -from weave.trace import call_context, context as trace_context +from weave.trace import context as trace_context from weave.trace.client_context import weave_client as weave_client_context logger = logging.getLogger(__name__) diff --git a/weave/legacy/weave/monitoring/openai/openai.py b/weave/legacy/weave/monitoring/openai/openai.py index 1e2b99a3951..8a04704c4a0 100644 --- a/weave/legacy/weave/monitoring/openai/openai.py +++ b/weave/legacy/weave/monitoring/openai/openai.py @@ -10,7 +10,6 @@ from openai import AsyncStream, Stream from openai.types.chat import ChatCompletion, ChatCompletionMessageParam from packaging import version -from weave.trace import call_context from weave.trace.client_context import weave_client as weave_client_context from weave.legacy.weave.monitoring.monitor import _get_global_monitor from weave.legacy.weave.monitoring.openai.models import * @@ -256,7 +255,8 @@ def log_call( call_name: typing.Union[str, Op], inputs: dict[str, Any] ) -> Iterator[Callable]: client = weave_client_context.require_weave_client() - parent_call = call_context.get_current_call() + raise Exception("NO LONGER SUPPORTED") + # parent_call = call_context.get_current_call() # TODO: client should not need refs passed in. call = client.create_call(call_name, inputs, parent_call) diff --git a/weave/legacy/weave/object_type_ref_util.py b/weave/legacy/weave/object_type_ref_util.py index d0bc6a1ee35..e841087b064 100644 --- a/weave/legacy/weave/object_type_ref_util.py +++ b/weave/legacy/weave/object_type_ref_util.py @@ -1,6 +1,6 @@ import typing -from weave.trace import ref_util +from weave.legacy.weave import ref_util from weave.legacy.weave import context_state diff --git a/weave/legacy/weave/op_def.py b/weave/legacy/weave/op_def.py index f8e397a375e..01db7453f72 100644 --- a/weave/legacy/weave/op_def.py +++ b/weave/legacy/weave/op_def.py @@ -4,7 +4,6 @@ import copy import inspect import typing -from typing import Iterator, Sequence from weave.legacy.weave import weave_types as types from weave.legacy.weave import ( @@ -28,12 +27,8 @@ process_opdef_resolve_fn, tagged_value_type, ) -from weave.legacy.weave.run import Run from weave.legacy.weave.weavejs_fixes import fixup_node -if typing.TYPE_CHECKING: - from weave.trace import weave_client - from weave.legacy.weave.run_streamtable_span import RunStreamTableSpan _no_refine: contextvars.ContextVar[bool] = contextvars.ContextVar( diff --git a/weave/legacy/weave/op_execute.py b/weave/legacy/weave/op_execute.py index 8ea3b9fc9d0..106cbccaac3 100644 --- a/weave/legacy/weave/op_execute.py +++ b/weave/legacy/weave/op_execute.py @@ -1,16 +1,10 @@ import typing from typing import Mapping -from weave.trace.constants import TRACE_CALL_EMOJI if typing.TYPE_CHECKING: from .op_def import OpDef - -def print_run_link(run): - print(f"{TRACE_CALL_EMOJI} {run.ui_url}") - - def execute_op(op_def: "OpDef", inputs: Mapping[str, typing.Any]): res = op_def.resolve_fn(**inputs) diff --git a/weave/legacy/weave/parallelism.py b/weave/legacy/weave/parallelism.py index bd27582d836..78d5fa7e3f3 100644 --- a/weave/legacy/weave/parallelism.py +++ b/weave/legacy/weave/parallelism.py @@ -12,7 +12,6 @@ memo, wandb_api, ) -from weave.trace import call_context # Must be power of 2 MAX_PARALLELISM = 16 @@ -58,7 +57,6 @@ def do_in_parallel( result_store = forward_graph.get_node_result_store() top_level_stats = execute.get_top_level_stats() eager_mode = context_state.eager_mode() - run_stack = call_context.get_call_stack() cache_prefix = cache.get_cache_prefix_context() def do_one_with_memo_and_parallel_budget(x: ItemType) -> ResultType: @@ -67,18 +65,17 @@ def do_one_with_memo_and_parallel_budget(x: ItemType) -> ResultType: thread_top_level_stats = None try: with parallel_budget_ctx(remaining_budget_per_thread): - with call_context.set_call_stack(run_stack): - with context_state.set_eager_mode(eager_mode): - with wandb_api.wandb_api_context(wandb_api_ctx): - with cache.time_interval_cache_prefix(cache_prefix): - with context.execution_client(): - with forward_graph.node_result_store( - result_store - ) as thread_result_store: - with ( - execute.top_level_stats() as thread_top_level_stats - ): - return do_one(x) + with context_state.set_eager_mode(eager_mode): + with wandb_api.wandb_api_context(wandb_api_ctx): + with cache.time_interval_cache_prefix(cache_prefix): + with context.execution_client(): + with forward_graph.node_result_store( + result_store + ) as thread_result_store: + with ( + execute.top_level_stats() as thread_top_level_stats + ): + return do_one(x) finally: memo._memo_storage.reset(memo_token) if thread_result_store is not None: diff --git a/weave/legacy/weave/ref_base.py b/weave/legacy/weave/ref_base.py index ba92ea13ca5..c5cd519acd3 100644 --- a/weave/legacy/weave/ref_base.py +++ b/weave/legacy/weave/ref_base.py @@ -3,9 +3,7 @@ import json import typing import weakref -from typing import Sequence -from weave.trace.client_context import weave_client as weave_client_context from weave.legacy.weave import box, context_state, object_context, uris from weave.legacy.weave.language_features.tagging import tag_store @@ -17,7 +15,6 @@ if typing.TYPE_CHECKING: from weave.legacy.weave import weave_types as types - from ...trace import weave_client def _map_to_ref_strs(obj: typing.Any) -> typing.Any: @@ -154,14 +151,6 @@ def with_extra( def __str__(self) -> str: return str(self.uri) - def input_to(self) -> Sequence["weave_client.Call"]: - client = weave_client_context.require_weave_client() - return client._ref_input_to(self) - - def value_input_to(self) -> Sequence["weave_client.Call"]: - client = weave_client_context.require_weave_client() - return client._ref_value_input_to(self) - def get_ref(obj: typing.Any) -> typing.Optional[Ref]: if isinstance(obj, Ref): diff --git a/weave/trace/ref_util.py b/weave/legacy/weave/ref_util.py similarity index 91% rename from weave/trace/ref_util.py rename to weave/legacy/weave/ref_util.py index 47aed3131dd..97da18ffc15 100644 --- a/weave/trace/ref_util.py +++ b/weave/legacy/weave/ref_util.py @@ -3,11 +3,10 @@ from urllib import parse from weave.legacy.weave import box -from weave.trace_server import refs_internal -DICT_KEY_EDGE_NAME = refs_internal.DICT_KEY_EDGE_NAME -LIST_INDEX_EDGE_NAME = refs_internal.LIST_INDEX_EDGE_NAME -OBJECT_ATTR_EDGE_NAME = refs_internal.OBJECT_ATTR_EDGE_NAME +DICT_KEY_EDGE_NAME = "key" +LIST_INDEX_EDGE_NAME = "index" +OBJECT_ATTR_EDGE_NAME = "attr" AWL_ROW_EDGE_NAME = "row" AWL_COL_EDGE_NAME = "col" @@ -22,7 +21,8 @@ def parse_local_ref_str(s: str) -> typing.Tuple[str, typing.Optional[list[str]]] def val_with_relative_ref( parent_object: typing.Any, child_object: typing.Any, ref_extra_parts: list[str] ) -> typing.Any: - from weave.legacy.weave import context_state, ref_base + from weave.legacy.weave import context_state + from weave.legacy.weave import ref_base # If we already have a ref, resolve it if isinstance(child_object, ref_base.Ref): diff --git a/weave/legacy/weave/storage.py b/weave/legacy/weave/storage.py index b3eef9a5220..a99dba4a90f 100644 --- a/weave/legacy/weave/storage.py +++ b/weave/legacy/weave/storage.py @@ -7,7 +7,6 @@ import re import typing -from weave.trace.client_context import weave_client as weave_client_context from weave.legacy.weave import ( artifact_base, artifact_fs, @@ -478,18 +477,9 @@ def to_json_with_refs( # type: ignore for i, v in enumerate(obj) ] elif isinstance(obj, op_def.OpDef): - try: - gc = weave_client_context.require_weave_client() - except errors.WeaveInitError: - raise errors.WeaveSerializeError( - "Can't serialize OpDef with a client initialization" - ) - return gc._save_object(obj, obj.name, "latest") - else: - res = artifact.set("/".join(path), wb_type, obj) - if res.artifact == artifact: - res.serialize_as_path_ref = True - return res + raise errors.WeaveSerializeError( + "Dropped as part of query service refactor" + ) def make_js_serializer(): # type: ignore diff --git a/weave/legacy/weave/urls.py b/weave/legacy/weave/urls.py index a74d7e3721c..bb021607a58 100644 --- a/weave/legacy/weave/urls.py +++ b/weave/legacy/weave/urls.py @@ -1,3 +1,5 @@ +# NOTE: Artifact of weave refactor -- this file may be deleted in the near future + from urllib.parse import quote from wandb import util as wb_util @@ -27,12 +29,14 @@ def project_weave_root_url(entity_name: str, project_name: str) -> str: return remote_project_weave_root_url(entity_name, project_name) +# artifact_wandb.py def op_version_path( entity_name: str, project_name: str, op_name: str, op_version: str ) -> str: return f"{project_weave_root_url(entity_name, project_name)}/ops/{op_name}/versions/{op_version}" +# artifact_wandb.py def object_version_path( entity_name: str, project_name: str, object_name: str, obj_version: str ) -> str: @@ -47,6 +51,7 @@ def redirect_call(entity_name: str, project_name: str, call_id: str) -> str: return f"{remote_project_root_url(entity_name, project_name)}/r/call/{call_id}" +# context.py def use_local_urls() -> None: context_state._use_local_urls.set(True) diff --git a/weave/tests/trace/test_client_trace.py b/weave/tests/trace/test_client_trace.py index af7a0943a5d..61c379c1041 100644 --- a/weave/tests/trace/test_client_trace.py +++ b/weave/tests/trace/test_client_trace.py @@ -1702,7 +1702,7 @@ def _wrapped_fn(*args): [ map_simple, map_with_threads_no_executor, - # map_with_thread_executor, # <-- Flakes in CI + # # map_with_thread_executor, # <-- Flakes in CI # map_with_copying_thread_executor, # <-- Flakes in CI ], ) diff --git a/weave/tests/trace/test_op_versioning.py b/weave/tests/trace/test_op_versioning.py index b5d3b41b2d6..13369761b15 100644 --- a/weave/tests/trace/test_op_versioning.py +++ b/weave/tests/trace/test_op_versioning.py @@ -1,48 +1,12 @@ -import shutil import typing import numpy as np import pytest import weave -from weave.legacy.weave import artifact_fs, derive_op from weave.trace_server.trace_server_interface import FileContentReadReq, ObjReadReq -@pytest.mark.skip( - "weave.versions no longer supported, but there are other ways to do this now..." -) -def test_op_versioning_saveload(client): - @weave.op() - def versioned_op(a: int, b: int) -> int: - return a + b - - assert versioned_op(1, 2) == 3 - - @weave.op() - def versioned_op(a: int, b: int) -> int: - return a - b - - # Because it is a new version with different code, this - # should not hit memoized cache. - assert versioned_op(1, 2) == -1 - - v0_ref = weave.versions(versioned_op)[0] - v0 = v0_ref.get() - assert v0(1, 2) == 3 - - # This should refer to v1, even though we just loaded v0 - v_latest = weave.ref("local-artifact:///op-versioned_op:latest/obj").get() - assert v_latest(4, 20) == -16 - - v1_ref = weave.versions(versioned_op)[1] - v1 = v1_ref.get() - assert v1(1, 2) == -1 - - v0_again = weave.ref(f"local-artifact:///op-versioned_op:{v0.version}/obj").get() - assert v0_again(5, 6) == 11 - - def get_saved_code(client, ref): resp = client.server.obj_read( ObjReadReq( @@ -136,15 +100,6 @@ def versioned_op_lotsofstuff(a: int) -> float: return np.array(k).mean() -@pytest.mark.skip("Derived op not fully serializable due to non-json stuff in closure") -def test_op_versioning_higherlevel_function(strict_op_saving): - @weave.op() - def versioned_op_lowerlevel(a: int) -> float: - return a + 1 - - derive_op.MappedDeriveOpHandler.make_derived_op(versioned_op_lowerlevel) - - def test_op_versioning_inline_import(strict_op_saving, client): from weave.tests.trace import op_versioning_inlineimport @@ -388,25 +343,6 @@ def cat(): saved_code = get_saved_code(client, ref) -@pytest.mark.skip("not working yet") -def test_op_return_weave_obj(strict_op_saving, client): - @weave.type() - class SomeObj: - val: int - - @weave.op() - def some_obj(v: int): - return SomeObj(v) - - ref = weave.obj_ref(some_obj) - assert isinstance(ref, artifact_fs.FilesystemArtifactRef) - - with ref.artifact.open("obj.py") as f: - saved_code = f.read() - print("SAVED_CODE") - print(saved_code) - - EXPECTED_TYPEDICT_ANNO_CODE = """import weave import typing diff --git a/weave/tests/trace/test_weave_client.py b/weave/tests/trace/test_weave_client.py index cd2ff4c7633..6356c3dfe78 100644 --- a/weave/tests/trace/test_weave_client.py +++ b/weave/tests/trace/test_weave_client.py @@ -11,7 +11,6 @@ import weave import weave.trace_server.trace_server_interface as tsi from weave import Evaluation -from weave.legacy.weave import op_def from weave.tests.trace.util import ( AnyIntMatcher, DatetimeMatcher, @@ -566,25 +565,6 @@ def add2(x, y): assert len(list(client.get_calls())) == 1 -@pytest.mark.skip("failing in ci, due to some kind of /tmp file slowness?") -def test_saveload_op(client): - @weave.op() - def add2(x, y): - return x + y - - @weave.op() - def add3(x, y, z): - return x + y + z - - obj = {"a": add2, "b": add3} - ref = client._save_object(obj, "my-ops") - obj2 = client.get(ref) - assert isinstance(obj2["a"], op_def.OpDef) - assert obj2["a"].name == "op-add2" - assert isinstance(obj2["b"], op_def.OpDef) - assert obj2["b"].name == "op-add3" - - def test_object_mismatch_project_ref(client): client.project = "test-project" diff --git a/weave/tests/trace/test_weaveflow.py b/weave/tests/trace/test_weaveflow.py index a0c0039cdbd..71e63c44a70 100644 --- a/weave/tests/trace/test_weaveflow.py +++ b/weave/tests/trace/test_weaveflow.py @@ -5,85 +5,6 @@ from pydantic import Field import weave -from weave.legacy.weave import ref_base - - -@pytest.mark.skip("failing in ci") -def test_digestrefs(client): - ds = weave.WeaveList( - [ - { - "id": "0", - "val": 100, - }, - { - "id": "0", - "val": 101, - }, - ] - ) - - ds0_ref = weave.publish(ds, "digestrefs") - - ds0 = weave.ref(str(ds0_ref)).get() - - @weave.op() - def add5_to_row(row: typing.Any) -> int: - return row["val"] + 5 - - ds0_row0 = ds0[0] - - ds0_row0_ref = ref_base.get_ref(ds0_row0) - assert ds0_row0_ref != None - - x = add5_to_row(ds0_row0) - - calls = ds0_row0_ref.input_to() - assert len(calls) == 1 - - ds = ds + [{"id": 2, "val": -10}] - ds1_ref = weave.publish(ds, "digestrefs") - - ds1 = weave.ref(str(ds1_ref)).get() - ds1_row0 = ds1[0] - ds1_row0_ref = ref_base.get_ref(ds1_row0) - - assert ds1_row0_ref is not None - - assert ds0_row0_ref.digest == ds1_row0_ref.digest - - assert len(ds1_row0_ref.input_to()) == 0 - assert len(ds1_row0_ref.value_input_to()) == 1 - - -@pytest.mark.skip() -def test_output_of(client): - @weave.op() - def add_5(v: int) -> int: - return v + 5 - - result = add_5(10) - - call = weave.output_of(result) - assert call is not None - assert "add_5" in call.op_name - assert call.inputs["v"] == 10 - - result2 = add_5(result) - call = weave.output_of(result2) - assert call is not None - assert "add_5" in call.op_name - - # v_input is a ref here and we have to deref it - # TODO: this is not consistent. Shouldn't it already be - # dereffed recursively when we get it from weave.output_of() ? - v_input = call.inputs["v"].get() - assert v_input == 15 - - call = weave.output_of(v_input) - assert call is not None - assert "add_5" in call.op_name - assert call.inputs["v"] == 10 def test_weaveflow_op_wandb(client): diff --git a/weave/trace/api.py b/weave/trace/api.py index 7c8c72d9bd0..61030341cb3 100644 --- a/weave/trace/api.py +++ b/weave/trace/api.py @@ -9,8 +9,7 @@ # TODO: type_serializers is imported here to trigger registration of the image serializer. # There is probably a better place for this, but including here for now to get the fix in. from weave import type_serializers # noqa: F401 -from weave.legacy.weave import urls -from weave.trace import util +from weave.trace import urls, util from weave.trace.call_context import get_current_call, require_current_call from weave.trace.client_context import weave_client as weave_client_context @@ -196,7 +195,7 @@ def serve( ) -> str: import uvicorn - from weave.legacy.weave import wandb_api + from weave.wandb_interface import wandb_api from .serve_fastapi import object_method_app diff --git a/weave/trace/box.py b/weave/trace/box.py index d0b7db6db9d..daf670a005f 100644 --- a/weave/trace/box.py +++ b/weave/trace/box.py @@ -1,6 +1,6 @@ """Alternate boxing implementation for Weave Trace. -This copies many things from weave/legacy/box.py, but it notably +This copies many things from query service's box.py, but it notably does not box None and bool which simplify checks for trace users.""" from __future__ import annotations diff --git a/weave/trace/cli.py b/weave/trace/cli.py index edccda7a382..405ee48600f 100644 --- a/weave/trace/cli.py +++ b/weave/trace/cli.py @@ -20,23 +20,6 @@ def cli() -> None: pass -# Not included for now. -# @cli.command("ui", help="Start the weave UI.") -# def start_ui() -> None: -# print("Starting server...") -# try: -# from weave.legacy.weave import server -# except ModuleNotFoundError: -# print("Run 'pip install weave[engine]' to use the local server.") -# sys.exit(1) -# serv = server.HttpServer(port=3000) # type: ignore -# serv.start() -# print("Server started") -# print(f"http://localhost:3000/{BROWSE3_PATH}") -# while True: -# time.sleep(10) - - @cli.command(help="Serve weave models.") @click.argument("model_ref") @click.option("--method", help="Method name to serve.") diff --git a/weave/context_state.py b/weave/trace/client_context/context_state.py similarity index 100% rename from weave/context_state.py rename to weave/trace/client_context/context_state.py diff --git a/weave/trace/client_context/weave_client.py b/weave/trace/client_context/weave_client.py index ee7e994d68d..32bc7a958b8 100644 --- a/weave/trace/client_context/weave_client.py +++ b/weave/trace/client_context/weave_client.py @@ -1,7 +1,6 @@ import threading from typing import TYPE_CHECKING, Optional -from weave.legacy.weave import context_state from weave.trace.errors import WeaveInitError if TYPE_CHECKING: @@ -26,13 +25,14 @@ def set_weave_client_global(client: Optional["WeaveClient"]) -> None: _global_weave_client = client -def set_weave_client_context(client: Optional["WeaveClient"]) -> None: - context_state._graph_client.set(client) +# This is no longer a concept, but should be +# def set_weave_client_context(client: Optional["WeaveClient"]) -> None: +# context_state._graph_client.set(client) def get_weave_client() -> Optional["WeaveClient"]: - if (context_client := context_state._graph_client.get()) is not None: - return context_client + # if (context_client := context_state._graph_client.get()) is not None: + # return context_client return _global_weave_client diff --git a/weave/trace/custom_objs.py b/weave/trace/custom_objs.py index 77fcb417c84..3c7e15be04d 100644 --- a/weave/trace/custom_objs.py +++ b/weave/trace/custom_objs.py @@ -1,99 +1,13 @@ -import contextlib -import io -import os -import tempfile -from typing import Any, Dict, Generator, Iterator, Mapping, Optional, Union +from typing import Any, Dict, Mapping, Optional, Union -from weave.legacy.weave import artifact_fs from weave.trace import op_type # noqa: F401, Must import this to register op save/load from weave.trace.client_context.weave_client import require_weave_client +from weave.trace.mem_artifact import MemTraceFilesArtifact from weave.trace.op import Op, op from weave.trace.refs import ObjectRef, parse_uri from weave.trace.serializer import get_serializer_by_id, get_serializer_for_obj -class MemTraceFilesArtifact(artifact_fs.FilesystemArtifact): - RefClass = artifact_fs.FilesystemArtifactRef - temp_read_dir: Optional[tempfile.TemporaryDirectory] - path_contents: dict[str, bytes] - - def __init__( - self, - path_contents: Optional[Mapping[str, Union[str, bytes]]] = None, - metadata: Optional[dict[str, str]] = None, - ): - if path_contents is None: - path_contents = {} - self.path_contents = path_contents # type: ignore - if metadata is None: - metadata = {} - self._metadata = metadata - self.temp_read_dir = None - - @contextlib.contextmanager - def new_file( - self, path: str, binary: bool = False - ) -> Iterator[Union[io.StringIO, io.BytesIO]]: - f: Union[io.StringIO, io.BytesIO] - if binary: - f = io.BytesIO() - else: - f = io.StringIO() - yield f - self.path_contents[path] = f.getvalue() # type: ignore - f.close() - - @property - def is_saved(self) -> bool: - return True - - @contextlib.contextmanager - def open( - self, path: str, binary: bool = False - ) -> Iterator[Union[io.StringIO, io.BytesIO]]: - f: Union[io.StringIO, io.BytesIO] - try: - if binary: - val = self.path_contents[path] - if not isinstance(val, bytes): - raise ValueError( - f"Expected binary file, but got string for path {path}" - ) - f = io.BytesIO(val) - else: - val = self.path_contents[path] - f = io.StringIO(val.decode("utf-8")) - except KeyError: - raise FileNotFoundError(path) - yield f - f.close() - - def path(self, path: str) -> str: - if path not in self.path_contents: - raise FileNotFoundError(path) - - self.temp_read_dir = tempfile.TemporaryDirectory() - write_path = os.path.join(self.temp_read_dir.name, path) - with open(write_path, "wb") as f: - f.write(self.path_contents[path]) - f.flush() - os.fsync(f.fileno()) - return write_path - - @property - def metadata(self) -> artifact_fs.ArtifactMetadata: - return artifact_fs.ArtifactMetadata(self._metadata, {**self._metadata}) - - @contextlib.contextmanager - def writeable_file_path(self, path: str) -> Generator[str, None, None]: - with tempfile.TemporaryDirectory() as tmpdir: - full_path = os.path.join(tmpdir, path) - os.makedirs(os.path.dirname(full_path), exist_ok=True) - yield full_path - with open(full_path, "rb") as fp: - self.path_contents[path] = fp.read() - - def encode_custom_obj(obj: Any) -> Optional[dict]: serializer = get_serializer_for_obj(obj) if serializer is None: @@ -136,8 +50,6 @@ def decode_custom_obj( encoded_path_contents: Mapping[str, Union[str, bytes]], load_instance_op_uri: Optional[str], ) -> Any: - from weave.legacy.weave import artifact_fs - load_instance_op = None if load_instance_op_uri is not None: ref = parse_uri(load_instance_op_uri) @@ -163,7 +75,6 @@ def decode_custom_obj( encoded_path_contents, metadata={}, ) - with artifact_fs.loading_artifact(art): - res = load_instance_op(art, "obj") - res.art = art - return res + res = load_instance_op(art, "obj") + res.art = art + return res diff --git a/weave/trace/env.py b/weave/trace/env.py index 0d75c3c93f9..3db5a7009aa 100644 --- a/weave/trace/env.py +++ b/weave/trace/env.py @@ -1,7 +1,97 @@ +import configparser +import logging +import netrc import os +from typing import Optional +from urllib.parse import urlparse WEAVE_PARALLELISM = "WEAVE_PARALLELISM" +logger = logging.getLogger(__name__) + + +class Settings: + """A minimal readonly implementation of wandb/old/settings.py for reading settings""" + + DEFAULT_SECTION = "default" + DEFAULT_BASE_URL = "https://api.wandb.ai" + + def __init__(self) -> None: + self._settings = configparser.ConfigParser() + if not self._settings.has_section(self.DEFAULT_SECTION): + self._settings.add_section(self.DEFAULT_SECTION) + self._settings.read([Settings._global_path(), Settings._local_path()]) + + @property + def base_url(self) -> str: + try: + return self._settings.get(self.DEFAULT_SECTION, "base_url") + except configparser.NoOptionError: + return self.DEFAULT_BASE_URL + + @staticmethod + def _local_path() -> str: + return os.path.join(os.getcwd(), "wandb", "settings") + + @staticmethod + def _global_path() -> str: + default_config_dir = os.path.join(os.path.expanduser("~"), ".config", "wandb") + config_dir = os.environ.get("WANDB_CONFIG_DIR", default_config_dir) + return os.path.join(config_dir, "settings") + def get_weave_parallelism() -> int: return int(os.getenv(WEAVE_PARALLELISM, "20")) + + +def wandb_base_url() -> str: + settings = Settings() + return os.environ.get("WANDB_BASE_URL", settings.base_url).rstrip("/") + + +def wandb_frontend_base_url() -> str: + public_url = os.getenv("WANDB_PUBLIC_BASE_URL", "").rstrip("/") + return public_url if public_url != "" else wandb_base_url() + + +def weave_trace_server_url() -> str: + base_url = wandb_frontend_base_url() + default = "https://trace.wandb.ai" + if base_url != "https://api.wandb.ai": + default = base_url + "/traces" + return os.getenv("WF_TRACE_SERVER_URL", default) + + +def _wandb_api_key_via_env() -> Optional[str]: + api_key = os.environ.get("WANDB_API_KEY") + return api_key + + +def _wandb_api_key_via_netrc() -> Optional[str]: + for filepath in ("~/.netrc", "~/_netrc"): + api_key = _wandb_api_key_via_netrc_file(filepath) + if api_key: + return api_key + return None + + +def _wandb_api_key_via_netrc_file(filepath: str) -> Optional[str]: + netrc_path = os.path.expanduser(filepath) + if not os.path.exists(netrc_path): + return None + nrc = netrc.netrc(netrc_path) + res = nrc.authenticators(urlparse(wandb_base_url()).netloc) + api_key = None + if res: + _, _, api_key = res + return api_key + + +def weave_wandb_api_key() -> Optional[str]: + env_api_key = _wandb_api_key_via_env() + netrc_api_key = _wandb_api_key_via_netrc() + if env_api_key != netrc_api_key: + logger.warning( + "There are different credentials in the netrc file and the environment. Using the environment value." + ) + return env_api_key or netrc_api_key diff --git a/weave/trace/errors.py b/weave/trace/errors.py index 752ac759e62..412f1e854ea 100644 --- a/weave/trace/errors.py +++ b/weave/trace/errors.py @@ -23,3 +23,6 @@ class WeaveDefinitionError(Error): ... class WeaveWandbAuthenticationException(Error): ... + + +class WeaveConfigurationError(Error): ... diff --git a/weave/trace/init_message.py b/weave/trace/init_message.py index bb11157430a..b1d7c00d1d9 100644 --- a/weave/trace/init_message.py +++ b/weave/trace/init_message.py @@ -1,6 +1,6 @@ import typing -from weave.legacy.weave import urls +from weave.trace import urls from weave.trace.pypi_version_check import check_available if typing.TYPE_CHECKING: diff --git a/weave/trace/mem_artifact.py b/weave/trace/mem_artifact.py new file mode 100644 index 00000000000..4a950654fec --- /dev/null +++ b/weave/trace/mem_artifact.py @@ -0,0 +1,92 @@ +import contextlib +import io +import os +import tempfile +from typing import Generator, Iterator, Mapping, Optional, Union + +from weave.trace import op_type # noqa: F401, Must import this to register op save/load + +# This uses the older weave query_service's Artifact interface. We could +# probably simplify a lot at this point by removing the internal requirement +# to use this interface. + + +class MemTraceFilesArtifact: + temp_read_dir: Optional[tempfile.TemporaryDirectory] + path_contents: dict[str, bytes] + + def __init__( + self, + path_contents: Optional[Mapping[str, Union[str, bytes]]] = None, + metadata: Optional[dict[str, str]] = None, + ): + if path_contents is None: + path_contents = {} + self.path_contents = path_contents # type: ignore + if metadata is None: + metadata = {} + self._metadata = metadata + self.temp_read_dir = None + + @contextlib.contextmanager + def new_file( + self, path: str, binary: bool = False + ) -> Iterator[Union[io.StringIO, io.BytesIO]]: + f: Union[io.StringIO, io.BytesIO] + if binary: + f = io.BytesIO() + else: + f = io.StringIO() + yield f + self.path_contents[path] = f.getvalue() # type: ignore + f.close() + + @property + def is_saved(self) -> bool: + return True + + @contextlib.contextmanager + def open( + self, path: str, binary: bool = False + ) -> Iterator[Union[io.StringIO, io.BytesIO]]: + f: Union[io.StringIO, io.BytesIO] + try: + if binary: + val = self.path_contents[path] + if not isinstance(val, bytes): + raise ValueError( + f"Expected binary file, but got string for path {path}" + ) + f = io.BytesIO(val) + else: + val = self.path_contents[path] + f = io.StringIO(val.decode("utf-8")) + except KeyError: + raise FileNotFoundError(path) + yield f + f.close() + + def path(self, path: str) -> str: + if path not in self.path_contents: + raise FileNotFoundError(path) + + self.temp_read_dir = tempfile.TemporaryDirectory() + write_path = os.path.join(self.temp_read_dir.name, path) + with open(write_path, "wb") as f: + f.write(self.path_contents[path]) + f.flush() + os.fsync(f.fileno()) + return write_path + + # @property + # def metadata(self) -> artifact_fs.ArtifactMetadata: + # return artifact_fs.ArtifactMetadata(self._metadata, {**self._metadata}) + + @contextlib.contextmanager + def writeable_file_path(self, path: str) -> Generator[str, None, None]: + with tempfile.TemporaryDirectory() as tmpdir: + full_path = os.path.join(tmpdir, path) + os.makedirs(os.path.dirname(full_path), exist_ok=True) + yield full_path + with open(full_path, "rb") as fp: + self.path_contents[path] = fp.read() diff --git a/weave/trace/op.py b/weave/trace/op.py index 32c88c9950c..bf9acec6d69 100644 --- a/weave/trace/op.py +++ b/weave/trace/op.py @@ -22,7 +22,6 @@ runtime_checkable, ) -from weave.legacy.weave import context_state from weave.trace import box, call_context, settings from weave.trace.client_context import weave_client as weave_client_context from weave.trace.context import call_attributes, get_raise_on_captured_errors @@ -382,8 +381,6 @@ def op( ... -# type ignore here is because we have the legacy decorators above. Once they are -# removed, we can remove the overloads this type ignore. @overload def op(*, name: str) -> Callable[[Any], Op]: # type: ignore """Use name to set the name of the op itself.""" @@ -434,6 +431,9 @@ async def extract(): await extract() # calls the function and tracks the call in the Weave UI ``` """ + # TODO: (AT): Remove + from weave.legacy.weave import context_state + if context_state.get_loading_built_ins(): from weave.legacy.weave.decorator_op import op as legacy_op diff --git a/weave/trace/op_type.py b/weave/trace/op_type.py index cd7019c8a4f..1b397d54ff0 100644 --- a/weave/trace/op_type.py +++ b/weave/trace/op_type.py @@ -3,6 +3,7 @@ import collections import collections.abc import inspect +import io import json import os import re @@ -13,19 +14,20 @@ from _ast import AsyncFunctionDef, ExceptHandler from typing import Any, Callable, Optional, Union, get_args, get_origin -from weave import context_state -from weave.legacy.weave import artifact_fs, errors, storage from weave.trace import settings +from weave.trace.client_context import context_state +from weave.trace.client_context.weave_client import get_weave_client +from weave.trace.errors import WeaveOpSerializeError from weave.trace.ipython import ( ClassNotFoundError, get_class_source, is_running_interactively, ) +from weave.trace.mem_artifact import MemTraceFilesArtifact from weave.trace.op import Op, as_op, is_op from weave.trace.refs import ObjectRef from weave.trace_server.trace_server_interface_util import str_digest -from ..legacy.weave import environment from . import serializer WEAVE_OP_PATTERN = re.compile(r"@weave\.op(\(\))?") @@ -176,12 +178,7 @@ class RefJSONEncoder(json.JSONEncoder): SPECIAL_REF_TOKEN = "__WEAVE_REF__" def default(self, o: Any) -> Any: - if isinstance(o, artifact_fs.FilesystemArtifactRef): - if o.serialize_as_path_ref: - ref_code = f"weave.storage.artifact_path_ref('{o.local_ref_str()}')" - else: - ref_code = f"weave.ref('{str(o)}')" - elif isinstance(o, (ObjectRef)): + if isinstance(o, (ObjectRef)): ref_code = f"weave.ref('{str(o)}')" if ref_code is not None: @@ -304,7 +301,7 @@ def {func_name}{sig_str}: def get_code_deps( fn: Union[typing.Callable, type], # A function or a class - artifact: artifact_fs.FilesystemArtifact, + artifact: MemTraceFilesArtifact, depth: int = 0, ) -> GetCodeDepsResult: """Given a python function, return source code that contains the dependencies of that function. @@ -334,7 +331,7 @@ def get_code_deps( def _get_code_deps( fn: Union[typing.Callable, type], # A function or a class - artifact: artifact_fs.FilesystemArtifact, + artifact: MemTraceFilesArtifact, seen: dict[Union[Callable, type], bool], depth: int = 0, ) -> GetCodeDepsResult: @@ -430,12 +427,13 @@ def _get_code_deps( import_code.append(import_line) else: try: - # This relies on old Weave type mechanism. - # TODO: Update to use new Weave trace serialization mechanism. - json_val = storage.to_json_with_refs( - var_value, artifact, path=[var_name] - ) - except (errors.WeaveTypeError, errors.WeaveSerializeError) as e: + if (client := get_weave_client()) is None: + raise ValueError("Weave client not found") + + from weave.trace.serialize import to_json + + json_val = to_json(var_value, client._project_id(), client.server) + except Exception as e: warnings.append( f"Serialization error for value of {var_name} needed by {fn}. Encountered:\n {e}" ) @@ -494,9 +492,7 @@ def dedupe_list(original_list: list[str]) -> list[str]: return deduped -def save_instance( - obj: "Op", artifact: artifact_fs.FilesystemArtifact, name: str -) -> None: +def save_instance(obj: "Op", artifact: MemTraceFilesArtifact, name: str) -> None: result = get_code_deps(obj.resolve_fn, artifact) import_code = result["import_code"] code = result["code"] @@ -506,7 +502,7 @@ def save_instance( for warning in warnings: message += "\n " + warning if context_state.get_strict_op_saving(): - raise errors.WeaveOpSerializeError(message) + raise WeaveOpSerializeError(message) else: # print(message) pass @@ -522,6 +518,7 @@ def save_instance( code.append(op_function_code) with artifact.new_file(f"{name}.py") as f: + assert isinstance(f, io.StringIO) import_block = "\n".join(import_code) import_lines = ["import weave"] + import_block.split("\n") import_lines = dedupe_list(import_lines) @@ -532,14 +529,9 @@ def save_instance( def load_instance( - artifact: artifact_fs.FilesystemArtifact, + artifact: MemTraceFilesArtifact, name: str, ) -> Optional["Op"]: - if environment.wandb_production(): - # Returning None here instead of erroring allows the Weaveflow app - # to reference op defs without crashing. - return None - file_name = f"{name}.py" module_path = artifact.path(file_name) diff --git a/weave/trace/serve_fastapi.py b/weave/trace/serve_fastapi.py index e803af4fbe7..d9b7a68bfb6 100644 --- a/weave/trace/serve_fastapi.py +++ b/weave/trace/serve_fastapi.py @@ -1,22 +1,16 @@ import datetime import inspect import typing -from typing import Optional +from typing import Annotated, Optional from fastapi import Depends, FastAPI, Header, HTTPException from fastapi.security import HTTPBasic, HTTPBasicCredentials -try: - from typing import Annotated -# Support python 3.8 -except ImportError: - from typing_extensions import Annotated # type: ignore - from weave.legacy.weave import cache, op_args, pyfunc_type_util, weave_pydantic -from weave.legacy.weave.wandb_api import WandbApiAsync from weave.trace import errors from weave.trace.op import Op, is_op from weave.trace.refs import ObjectRef +from weave.wandb_interface.wandb_api import WandbApiAsync key_cache: cache.LruTimeWindowCache[str, typing.Optional[bool]] = ( cache.LruTimeWindowCache(datetime.timedelta(minutes=5)) diff --git a/weave/trace/urls.py b/weave/trace/urls.py new file mode 100644 index 00000000000..d5237c668b7 --- /dev/null +++ b/weave/trace/urls.py @@ -0,0 +1,38 @@ +from urllib.parse import quote + +from wandb import util as wb_util + +from weave.trace import env + +BROWSE3_PATH = "browse3" +WEAVE_SLUG = "weave" + + +def remote_project_root_url(entity_name: str, project_name: str) -> str: + return ( + f"{wb_util.app_url(env.wandb_base_url())}/{entity_name}/{quote(project_name)}" + ) + + +def remote_project_weave_root_url(entity_name: str, project_name: str) -> str: + return f"{remote_project_root_url(entity_name, project_name)}/{WEAVE_SLUG}" + + +def project_weave_root_url(entity_name: str, project_name: str) -> str: + return remote_project_weave_root_url(entity_name, project_name) + + +def op_version_path( + entity_name: str, project_name: str, op_name: str, op_version: str +) -> str: + return f"{project_weave_root_url(entity_name, project_name)}/ops/{op_name}/versions/{op_version}" + + +def object_version_path( + entity_name: str, project_name: str, object_name: str, obj_version: str +) -> str: + return f"{project_weave_root_url(entity_name, project_name)}/objects/{quote(object_name)}/versions/{obj_version}" + + +def redirect_call(entity_name: str, project_name: str, call_id: str) -> str: + return f"{remote_project_root_url(entity_name, project_name)}/r/call/{call_id}" diff --git a/weave/trace/weave_client.py b/weave/trace/weave_client.py index 8d671a29c85..1d2f0b64fe9 100644 --- a/weave/trace/weave_client.py +++ b/weave/trace/weave_client.py @@ -11,8 +11,7 @@ from requests import HTTPError from weave import version -from weave.legacy.weave import ref_base, urls -from weave.trace import call_context, trace_sentry +from weave.trace import call_context, trace_sentry, urls from weave.trace.async_job_queue import AsyncJobQueue from weave.trace.client_context import weave_client as weave_client_context from weave.trace.exception import exception_to_json_str @@ -1289,12 +1288,6 @@ def _set_call_display_name( def _remove_call_display_name(self, call: Call) -> None: self._set_call_display_name(call, None) - def _ref_input_to(self, ref: ref_base.Ref) -> Sequence[Call]: - raise NotImplementedError() - - def _ref_value_input_to(self, ref: ref_base.Ref) -> list[Call]: - raise NotImplementedError() - def _ref_output_of(self, ref: ObjectRef) -> typing.Optional[Call]: raise NotImplementedError() diff --git a/weave/trace/weave_init.py b/weave/trace/weave_init.py index 053a5f18324..7b6ba602bce 100644 --- a/weave/trace/weave_init.py +++ b/weave/trace/weave_init.py @@ -18,7 +18,7 @@ def reset(self) -> None: def get_username() -> typing.Optional[str]: - from weave.legacy.weave import wandb_api + from weave.wandb_interface import wandb_api api = wandb_api.get_wandb_api_sync() try: @@ -28,7 +28,7 @@ def get_username() -> typing.Optional[str]: def get_entity_project_from_project_name(project_name: str) -> tuple[str, str]: - from weave.legacy.weave import wandb_api + from weave.wandb_interface import wandb_api fields = project_name.split("/") if len(fields) == 1: @@ -97,6 +97,7 @@ def init_weave( api_key = None if wandb_context is not None and wandb_context.api_key is not None: api_key = wandb_context.api_key + remote_server = init_weave_get_server(api_key) # from .trace_server.clickhouse_trace_server_batched import ClickHouseTraceServer diff --git a/weave/trace_server/trace_server_interface.py b/weave/trace_server/trace_server_interface.py index 9891b584ab6..a850e95da35 100644 --- a/weave/trace_server/trace_server_interface.py +++ b/weave/trace_server/trace_server_interface.py @@ -821,16 +821,3 @@ def file_content_read(self, req: FileContentReadReq) -> FileContentReadRes: ... def feedback_create(self, req: FeedbackCreateReq) -> FeedbackCreateRes: ... def feedback_query(self, req: FeedbackQueryReq) -> FeedbackQueryRes: ... def feedback_purge(self, req: FeedbackPurgeReq) -> FeedbackPurgeRes: ... - - -# These symbols are used in the WB Trace Server and it is not safe -# to remove them, else it will break the server. Once the server -# is updated to use the new symbols, these can be removed. - -# Legacy Names (i think these might be used in a few growth examples, so keeping -# around until we clean those up of them) -_CallsFilter = CallsFilter -_SortBy = SortBy -_OpVersionFilter = OpVersionFilter -_ObjectVersionFilter = ObjectVersionFilter -_TableRowFilter = TableRowFilter diff --git a/weave/trace_server_bindings/remote_http_trace_server.py b/weave/trace_server_bindings/remote_http_trace_server.py index 2c2966af327..7f4215ad797 100644 --- a/weave/trace_server_bindings/remote_http_trace_server.py +++ b/weave/trace_server_bindings/remote_http_trace_server.py @@ -6,11 +6,11 @@ import tenacity from pydantic import BaseModel, ValidationError -from weave.legacy.weave.environment import weave_trace_server_url -from weave.legacy.weave.wandb_interface import project_creator +from weave.trace.env import weave_trace_server_url from weave.trace_server import requests from weave.trace_server import trace_server_interface as tsi from weave.trace_server.async_batch_processor import AsyncBatchProcessor +from weave.wandb_interface import project_creator logger = logging.getLogger(__name__) diff --git a/weave/wandb_interface/__init__.py b/weave/wandb_interface/__init__.py new file mode 100644 index 00000000000..e69de29bb2d diff --git a/weave/legacy/weave/wandb_interface/project_creator.py b/weave/wandb_interface/project_creator.py similarity index 95% rename from weave/legacy/weave/wandb_interface/project_creator.py rename to weave/wandb_interface/project_creator.py index c12fe52e9a5..b7925978aed 100644 --- a/weave/legacy/weave/wandb_interface/project_creator.py +++ b/weave/wandb_interface/project_creator.py @@ -1,12 +1,10 @@ -""" -The purpose of this utility is to simply ensure that a W&B project exists -""" +"""The purpose of this utility is to simply ensure that a W&B project exists""" +# This file should be in the trace SDK dir import logging import typing from contextlib import contextmanager - import wandb from wandb import errors as wandb_errors from wandb.sdk.internal.internal_api import Api as InternalApi diff --git a/weave/wandb_interface/wandb_api.py b/weave/wandb_interface/wandb_api.py new file mode 100644 index 00000000000..ca76a579123 --- /dev/null +++ b/weave/wandb_interface/wandb_api.py @@ -0,0 +1,467 @@ +# Official interface for interacting with the W&B API. All +# Weave interactions with the Weave API should go through this +# module. + +# NOTE: This was copied from the query service and contains way more than it needs to. + +import contextlib +import contextvars +import dataclasses +import typing + +import aiohttp +import gql +import graphql +from gql.transport.aiohttp import AIOHTTPTransport +from gql.transport.requests import RequestsHTTPTransport +from requests.auth import HTTPBasicAuth +from wandb.sdk.internal.internal_api import _thread_local_api_settings + +from weave.trace import env + + +# Context for wandb api +# Instead of putting this in a shared file, we put it directly here +# so that the patching at the top of this file will work correctly +# for this symbol. +@dataclasses.dataclass +class WandbApiContext: + user_id: typing.Optional[str] = None # TODO: delete + api_key: typing.Optional[str] = None + headers: typing.Optional[dict[str, str]] = None # TODO: delete + cookies: typing.Optional[dict[str, str]] = None # TODO: delete + + @classmethod + def from_json(cls, json: typing.Any) -> "WandbApiContext": + return cls(**json) + + def to_json(self) -> typing.Any: + return dataclasses.asdict(self) + + +## wandb_api.py context +_wandb_api_context: contextvars.ContextVar[typing.Optional[WandbApiContext]] = ( + contextvars.ContextVar("wandb_api_context", default=None) +) + + +def set_wandb_thread_local_api_settings( + api_key: typing.Optional[str], + cookies: typing.Optional[typing.Dict], + headers: typing.Optional[typing.Dict], +) -> None: + _thread_local_api_settings.api_key = api_key + _thread_local_api_settings.cookies = cookies + _thread_local_api_settings.headers = headers + + +def reset_wandb_thread_local_api_settings() -> None: + _thread_local_api_settings.api_key = None + _thread_local_api_settings.cookies = None + _thread_local_api_settings.headers = None + + +def set_wandb_api_context( + user_id: typing.Optional[str], + api_key: typing.Optional[str], + headers: typing.Optional[dict], + cookies: typing.Optional[dict], +) -> typing.Optional[contextvars.Token[typing.Optional[WandbApiContext]]]: + cur_ctx = get_wandb_api_context() + if cur_ctx: + # WANDB API context is only allowed to be set once per thread, since we + # need to use thread local storage to communicate the context to the wandb + # lib right now. + return None + set_wandb_thread_local_api_settings(api_key, cookies, headers) + return _wandb_api_context.set(WandbApiContext(user_id, api_key, headers, cookies)) + + +def reset_wandb_api_context( + token: typing.Optional[contextvars.Token[typing.Optional[WandbApiContext]]], +) -> None: + if token is None: + return + reset_wandb_thread_local_api_settings() + _wandb_api_context.reset(token) + + +# api.py +@contextlib.contextmanager +def wandb_api_context( + ctx: typing.Optional[WandbApiContext], +) -> typing.Generator[None, None, None]: + if ctx: + token = set_wandb_api_context( + ctx.user_id, ctx.api_key, ctx.headers, ctx.cookies + ) + try: + yield + finally: + if ctx: + reset_wandb_api_context(token) + + +# api.py, weave_init.py +def get_wandb_api_context() -> typing.Optional[WandbApiContext]: + return _wandb_api_context.get() + + +def init() -> typing.Optional[contextvars.Token[typing.Optional[WandbApiContext]]]: + api_key = env.weave_wandb_api_key() + if api_key: + return set_wandb_api_context("admin", api_key, None, None) + return None + + +@contextlib.contextmanager +def from_environment() -> typing.Generator[None, None, None]: + token = init() + try: + yield + finally: + if token: + reset_wandb_api_context(token) + + +class WandbApiAsync: + def __init__(self) -> None: + self.connector = aiohttp.TCPConnector(limit=50) + + async def query( + self, query: graphql.DocumentNode, **kwargs: typing.Any + ) -> typing.Any: + wandb_context = get_wandb_api_context() + headers = None + cookies = None + auth = None + if wandb_context is not None: + headers = wandb_context.headers + cookies = wandb_context.cookies + if wandb_context.api_key is not None: + auth = aiohttp.BasicAuth("api", wandb_context.api_key) + # TODO: This is currently used by our FastAPI auth helper, there's probably a better way. + api_key_override = kwargs.pop("api_key", None) + if api_key_override: + auth = aiohttp.BasicAuth("api", api_key_override) + url_base = env.wandb_base_url() + transport = AIOHTTPTransport( + url=url_base + "/graphql", + client_session_args={ + "connector": self.connector, + "connector_owner": False, + }, + headers=headers, + cookies=cookies, + auth=auth, + ) + # Warning: we do not use the recommended context manager pattern, because we're + # using connector_owner to tell the session not to close our connection pool. + # There is a bug in aiohttp that causes session close to hang for the ssl_close_timeout + # which is 10 seconds by default. See issue: https://github.com/graphql-python/gql/issues/381 + # Closing the session just closes the connector, which we don't want anyway, so we don't + # bother. + client = gql.Client(transport=transport, fetch_schema_from_transport=False) + session = await client.connect_async(reconnecting=False) # type: ignore + result = await session.execute(query, kwargs) + # Manually reset the connection, bypassing the SSL bug, avoiding ERROR:asyncio:Unclosed client session + await transport.session.close() + return result + + SERVER_INFO_QUERY = gql.gql( + """ + query ServerInfo { + serverInfo { + frontendHost + } + } + """ + ) + + async def server_info(self) -> typing.Any: + return await self.query(self.SERVER_INFO_QUERY) + + ARTIFACT_MANIFEST_QUERY = gql.gql( + """ + query ArtifactManifest( + $entityName: String!, + $projectName: String!, + $name: String! + ) { + project(name: $projectName, entityName: $entityName) { + artifact(name: $name) { + currentManifest { + id + file { + directUrl + } + } + } + } + } + """ + ) + + async def artifact_manifest_url( + self, entity_name: str, project_name: str, name: str + ) -> typing.Optional[str]: + try: + result = await self.query( + self.ARTIFACT_MANIFEST_QUERY, + entityName=entity_name, + projectName=project_name, + name=name, + ) + except gql.transport.exceptions.TransportQueryError as e: + return None + project = result["project"] + if project is None: + return None + artifact = project["artifact"] + if artifact is None: + return None + current_manifest = artifact["currentManifest"] + if current_manifest is None: + return None + file = current_manifest["file"] + if file is None: + return None + return file["directUrl"] + + ARTIFACT_MANIFEST_FROM_ID_QUERY = gql.gql( + """ + query ArtifactManifestFromID( + $artifactID: ID! + ) { + artifact(id: $artifactID) { + currentManifest { + id + file { + directUrl + } + } + } + } + """ + ) + + async def artifact_manifest_url_from_id(self, art_id: str) -> typing.Optional[str]: + try: + result = await self.query( + self.ARTIFACT_MANIFEST_FROM_ID_QUERY, artifactID=art_id + ) + except gql.transport.exceptions.TransportQueryError as e: + return None + artifact = result["artifact"] + if artifact is None: + return None + current_manifest = artifact["currentManifest"] + if current_manifest is None: + return None + file = current_manifest["file"] + if file is None: + return None + return file["directUrl"] + + VIEWER_DEFAULT_ENTITY_QUERY = gql.gql( + """ + query DefaultEntity { + viewer { + defaultEntity { + name + } + } + } + """ + ) + + async def default_entity_name(self) -> typing.Optional[str]: + try: + result = await self.query(self.VIEWER_DEFAULT_ENTITY_QUERY) + except gql.transport.exceptions.TransportQueryError as e: + return None + try: + return result.get("viewer", {}).get("defaultEntity", {}).get("name", None) + except AttributeError: + return None + + ENTITY_ACCESS_QUERY = gql.gql( + """ + query Entity($entityName: String!) { + viewer { username } + entity(name: $entityName) { readOnly } + } + """ + ) + + async def can_access_entity( + self, entity: str, api_key: typing.Optional[str] + ) -> bool: + try: + result = await self.query( + self.ENTITY_ACCESS_QUERY, entityName=entity, api_key=api_key + ) + except gql.transport.exceptions.TransportQueryError as e: + return False + return ( + result.get("viewer") + and result.get("entity", {}).get("readOnly", True) == False + ) + + +class WandbApi: + def query(self, query: graphql.DocumentNode, **kwargs: typing.Any) -> typing.Any: + wandb_context = get_wandb_api_context() + headers = None + cookies = None + auth = None + if wandb_context is not None: + headers = wandb_context.headers + cookies = wandb_context.cookies + if wandb_context.api_key is not None: + auth = HTTPBasicAuth("api", wandb_context.api_key) + url_base = env.wandb_base_url() + transport = RequestsHTTPTransport( + url=url_base + "/graphql", headers=headers, cookies=cookies, auth=auth + ) + # Warning: we do not use the recommended context manager pattern, because we're + # using connector_owner to tell the session not to close our connection pool. + # There is a bug in aiohttp that causes session close to hang for the ssl_close_timeout + # which is 10 seconds by default. See issue: https://github.com/graphql-python/gql/issues/381 + # Closing the session just closes the connector, which we don't want anyway, so we don't + # bother. + client = gql.Client(transport=transport, fetch_schema_from_transport=False) + session = client.connect_sync() # type: ignore + return session.execute(query, kwargs) + + SERVER_INFO_QUERY = gql.gql( + """ + query ServerInfo { + serverInfo { + frontendHost + } + } + """ + ) + + def server_info(self) -> typing.Any: + return self.query(self.SERVER_INFO_QUERY) + + ARTIFACT_MANIFEST_QUERY = gql.gql( + """ + query ArtifactManifest( + $entityName: String!, + $projectName: String!, + $name: String! + ) { + project(name: $projectName, entityName: $entityName) { + artifact(name: $name) { + currentManifest { + id + file { + directUrl + } + } + } + } + } + """ + ) + + def artifact_manifest_url( + self, entity_name: str, project_name: str, name: str + ) -> typing.Optional[str]: + try: + result = self.query( + self.ARTIFACT_MANIFEST_QUERY, + entityName=entity_name, + projectName=project_name, + name=name, + ) + except gql.transport.exceptions.TransportQueryError as e: + return None + project = result["project"] + if project is None: + return None + artifact = project["artifact"] + if artifact is None: + return None + current_manifest = artifact["currentManifest"] + if current_manifest is None: + return None + file = current_manifest["file"] + if file is None: + return None + return file["directUrl"] + + ARTIFACT_MANIFEST_FROM_ID_QUERY = gql.gql( + """ + query ArtifactManifestFromID( + $artifactID: ID! + ) { + artifact(id: $artifactID) { + currentManifest { + id + file { + directUrl + } + } + } + } + """ + ) + + def artifact_manifest_url_from_id(self, art_id: str) -> typing.Optional[str]: + try: + result = self.query(self.ARTIFACT_MANIFEST_FROM_ID_QUERY, artifactID=art_id) + except gql.transport.exceptions.TransportQueryError as e: + return None + artifact = result["artifact"] + if artifact is None: + return None + current_manifest = artifact["currentManifest"] + if current_manifest is None: + return None + file = current_manifest["file"] + if file is None: + return None + return file["directUrl"] + + VIEWER_DEFAULT_ENTITY_QUERY = gql.gql( + """ + query DefaultEntity { + viewer { + username + defaultEntity { + name + } + } + } + """ + ) + + def default_entity_name(self) -> typing.Optional[str]: + try: + result = self.query(self.VIEWER_DEFAULT_ENTITY_QUERY) + except gql.transport.exceptions.TransportQueryError as e: + return None + try: + return result.get("viewer", {}).get("defaultEntity", {}).get("name", None) + except AttributeError: + return None + + def username(self) -> typing.Optional[str]: + try: + result = self.query(self.VIEWER_DEFAULT_ENTITY_QUERY) + except gql.transport.exceptions.TransportQueryError as e: + return None + + return result.get("viewer", {}).get("username", None) + + +async def get_wandb_api() -> WandbApiAsync: + return WandbApiAsync() + + +def get_wandb_api_sync() -> WandbApi: + return WandbApi() From a1acc9c79b625977cb9bcaa6313ec6d4741469a2 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Fri, 27 Sep 2024 09:17:40 -0500 Subject: [PATCH 074/179] chore: trace tree styling (#2502) --- .../Home/Browse3/pages/CallPage/CallPage.tsx | 26 +++--- .../Browse3/pages/CallPage/CallTraceView.tsx | 6 ++ .../Home/Browse3/pages/common/SplitPanel.tsx | 86 ++++++++++++------- 3 files changed, 75 insertions(+), 43 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx index 0ecc806e37a..34851972948 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx @@ -204,17 +204,21 @@ const CallPageInnerVertical: FC<{ isSidebarOpen={showTraceTree} headerContent={} leftSidebar={ - loading ? ( - - ) : ( - - ) + +
    + {loading ? ( + + ) : ( + + )} +
    +
    } tabs={callTabs} /> diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx index 558020e460a..a1e6331e616 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallTraceView.tsx @@ -183,9 +183,15 @@ export const CallTraceView: FC<{ outline: 'none', }, }, + '& .MuiDataGrid-topContainer': { + display: 'none', + }, '& .MuiDataGrid-columnHeaders': { borderBottom: 'none', }, + '& .MuiDataGrid-filler': { + display: 'none', + }, [callClass]: { backgroundColor: '#a9edf252', }, diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SplitPanel.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SplitPanel.tsx index 97c272e1d81..99b8ecdb39b 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SplitPanel.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/SplitPanel.tsx @@ -3,7 +3,6 @@ * to collapse the left panel. */ -import Collapse from '@mui/material/Collapse'; import {hexToRGB, MOON_250} from '@wandb/weave/common/css/globals.styles'; import {useLocalStorage} from '@wandb/weave/util/useLocalStorage'; import React, {ReactNode, useCallback, useRef, useState} from 'react'; @@ -19,15 +18,24 @@ type SplitPanelProps = { defaultWidth?: number | string; }; -const Divider = styled.span` +const DIVIDER_LINE_WIDTH = 1; +const DIVIDER_BORDER_WIDTH = 4; +const DIVIDER_WIDTH = 2 * DIVIDER_BORDER_WIDTH + DIVIDER_LINE_WIDTH; + +const Divider = styled.span<{left: number}>` background-color: ${MOON_250}; - border-left: 4px solid transparent; - border-right: 4px solid transparent; + border-left: ${DIVIDER_BORDER_WIDTH}px solid transparent; + border-right: ${DIVIDER_BORDER_WIDTH}px solid transparent; background-clip: padding-box; cursor: col-resize; - flex: 0 0 9px; - transition: border 1s ease; - transition-delay: 0.5s; + width: ${DIVIDER_WIDTH}px; + box-sizing: border-box; + position: absolute; + top: 0; + bottom: 0; + left: ${props => props.left}px; + transition: border 0.5s ease; + transition-delay: 0.2s; &:hover { border-left-color: ${hexToRGB(MOON_250, 0.5)}; @@ -75,7 +83,7 @@ export const SplitPanel = ({ }, [setIsDragging]); const onMouseMove = (e: React.MouseEvent) => { if (isDragging) { - const panel = e.target as HTMLElement; + const panel = (e.target as HTMLElement).parentElement!; const bounds = panel.getBoundingClientRect(); const x = e.clientX - bounds.left; if (minWidth && x < getWidth(minWidth, bounds.width)) { @@ -110,41 +118,55 @@ export const SplitPanel = ({ } else if (numW > maxW) { numW = maxW; } + + const leftPanelR = numW; + const rightPanelL = isDrawerOpen ? numW + DIVIDER_LINE_WIDTH : 0; + return (
    - {isDrawerOpen && ( - <> - + {isDrawerOpen && ( +
    -
    {drawer}
    - - - - )} -
    - {main} + {drawer} +
    + )} +
    + {main} +
    + {isDrawerOpen && ( + + )}
    ); }} From 2092494b79abbfe59469c5cca80bf88f90d04b07 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Fri, 27 Sep 2024 14:22:00 +0000 Subject: [PATCH 075/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 283d3d7aee0..bcb4f990955 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index daf6b9ff136..3b019733d6f 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -6cbef7675d22dbdfea739010d9991ed125e739a8 +fdb2f310e10ea769092ff54602ce783d9bf819e8 From de0c51cdb3cf142bd85b866161de8268f56b6627 Mon Sep 17 00:00:00 2001 From: Bharat Ramanathan Date: Fri, 27 Sep 2024 20:31:08 +0530 Subject: [PATCH 076/179] docs: add rag course link and details to tutorial (#2456) --- docs/docs/tutorial-rag.md | 2 ++ 1 file changed, 2 insertions(+) diff --git a/docs/docs/tutorial-rag.md b/docs/docs/tutorial-rag.md index d0d07deeb58..81cf3b2b9b2 100644 --- a/docs/docs/tutorial-rag.md +++ b/docs/docs/tutorial-rag.md @@ -7,6 +7,8 @@ We'll also show how to evaluate it using an LLM judge. ![Evals hero](../static/img/evals-hero.png) +Check out the [RAG++ course](https://www.wandb.courses/courses/rag-in-production?utm_source=wandb_docs&utm_medium=code&utm_campaign=weave_docs) for a more advanced dive into practical RAG techniques for engineers, where you'll learn production-ready solutions from Weights & Biases, Cohere and Weaviate to optimize performance, cut costs, and enhance the accuracy and relevance of your applications. + ## 1. Build a knowledge base First, we compute the embeddings for our articles. You would typically do this once with your articles and put the embeddings & metadata in a database, but here we're doing it every time we run our script for simplicity. From cfa8fa20260207b80de847481a67a0fea42f955e Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Fri, 27 Sep 2024 09:15:06 -0700 Subject: [PATCH 077/179] chore: add support for version number obj query in sqlite (#2484) --- weave/tests/trace/test_weave_client.py | 3 --- .../clickhouse_trace_server_batched.py | 12 ++---------- weave/trace_server/sqlite_trace_server.py | 7 ++++++- weave/trace_server/trace_server_common.py | 18 +++++++++++++++++- 4 files changed, 25 insertions(+), 15 deletions(-) diff --git a/weave/tests/trace/test_weave_client.py b/weave/tests/trace/test_weave_client.py index 6356c3dfe78..b4bf3f45e27 100644 --- a/weave/tests/trace/test_weave_client.py +++ b/weave/tests/trace/test_weave_client.py @@ -1390,9 +1390,6 @@ def f(a): def test_object_version_read(client): - if client_is_sqlite(client): - return - refs = [] for i in range(10): refs.append(weave.publish({"a": i})) diff --git a/weave/trace_server/clickhouse_trace_server_batched.py b/weave/trace_server/clickhouse_trace_server_batched.py index 3cb3f9a3033..9e305139afb 100644 --- a/weave/trace_server/clickhouse_trace_server_batched.py +++ b/weave/trace_server/clickhouse_trace_server_batched.py @@ -83,6 +83,7 @@ from .token_costs import LLM_TOKEN_PRICES_TABLE, validate_cost_purge_req from .trace_server_common import ( LRUCache, + digest_is_version_like, empty_str_to_none, get_nested_key, hydrate_calls_with_feedback, @@ -587,7 +588,7 @@ def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: if req.digest == "latest": conds.append("is_latest = 1") else: - (is_version, version_index) = _digest_is_version_like(req.digest) + (is_version, version_index) = digest_is_version_like(req.digest) if is_version: conds.append("version_index = {version_index: UInt64}") parameters["version_index"] = version_index @@ -1950,15 +1951,6 @@ def get_base_object_class(val: Any) -> Optional[str]: return None -def _digest_is_version_like(digest: str) -> Tuple[bool, int]: - if not digest.startswith("v"): - return (False, -1) - try: - return (True, int(digest[1:])) - except ValueError: - return (False, -1) - - def find_call_descendants( root_ids: list[str], all_calls: list[tsi.CallSchema], diff --git a/weave/trace_server/sqlite_trace_server.py b/weave/trace_server/sqlite_trace_server.py index 1ead84123b7..78b728c4b6e 100644 --- a/weave/trace_server/sqlite_trace_server.py +++ b/weave/trace_server/sqlite_trace_server.py @@ -21,6 +21,7 @@ ) from weave.trace_server.orm import Row, quote_json_path from weave.trace_server.trace_server_common import ( + digest_is_version_like, empty_str_to_none, get_nested_key, hydrate_calls_with_feedback, @@ -666,7 +667,11 @@ def obj_read(self, req: tsi.ObjReadReq) -> tsi.ObjReadRes: if req.digest == "latest": conds.append("is_latest = 1") else: - conds.append(f"digest = '{req.digest}'") + (is_version, version_index) = digest_is_version_like(req.digest) + if is_version: + conds.append(f"version_index = '{version_index}'") + else: + conds.append(f"digest = '{req.digest}'") objs = self._select_objs_query( req.project_id, conditions=conds, diff --git a/weave/trace_server/trace_server_common.py b/weave/trace_server/trace_server_common.py index 4ea7bcc4f0a..991e31ff3cb 100644 --- a/weave/trace_server/trace_server_common.py +++ b/weave/trace_server/trace_server_common.py @@ -1,7 +1,7 @@ import copy import datetime from collections import OrderedDict, defaultdict -from typing import Any, Dict, Optional, cast +from typing import Any, Dict, Optional, Tuple, cast from weave.trace_server import refs_internal as ri from weave.trace_server import trace_server_interface as tsi @@ -164,3 +164,19 @@ def __setitem__(self, key: str, value: Any) -> None: if key not in self and len(self) >= self.max_size: self.popitem(last=False) super().__setitem__(key, value) + + +def digest_is_version_like(digest: str) -> Tuple[bool, int]: + """ + Check if a digest is a version like string. + + Examples: + - v1 -> True, 1 + - oioZ7zgsCq4K7tfFQZRubx3ZGPXmFyaeoeWHHd8KUl8 -> False, -1 + """ + if not digest.startswith("v"): + return (False, -1) + try: + return (True, int(digest[1:])) + except ValueError: + return (False, -1) From dba93b7f78624fefbca1c80787e5e585ad58fef3 Mon Sep 17 00:00:00 2001 From: Marie Barr-Ramsey <126013019+mbarrramsey@users.noreply.github.com> Date: Fri, 27 Sep 2024 11:04:38 -0700 Subject: [PATCH 078/179] chore(weave): add width to autocomplete (#2500) --- weave-js/src/components/Form/AutoComplete.tsx | 8 +++++--- 1 file changed, 5 insertions(+), 3 deletions(-) diff --git a/weave-js/src/components/Form/AutoComplete.tsx b/weave-js/src/components/Form/AutoComplete.tsx index 06bac480aef..5e681c4b524 100644 --- a/weave-js/src/components/Form/AutoComplete.tsx +++ b/weave-js/src/components/Form/AutoComplete.tsx @@ -40,9 +40,9 @@ const getStyles = (props: AdditionalProps) => { paddingBottom: '0px !important', fontSize: FONT_SIZES[size], fontFamily: 'Source Sans Pro', - minWidth: '100px', color: MOON_800, maxWidth: props.maxWidth ? `${props.maxWidth}px` : '100%', + minWidth: props.minWidth ? `${props.minWidth}px` : '100px', '& fieldset': { borderColor: MOON_250, }, @@ -59,7 +59,7 @@ const getStyles = (props: AdditionalProps) => { opacity: 1, }, '& .MuiInputBase-input': { - padding: '0px', // Adjust padding as needed + padding: '0px', minHeight: `${HEIGHTS[size]} !important`, }, }, @@ -145,7 +145,9 @@ type AdditionalProps = { size?: SelectSize; isDarkMode?: boolean; maxWidth?: number; + minWidth?: number; hasInputValue?: boolean; + autocompleteRef?: React.MutableRefObject; }; export const AutoComplete = ( @@ -153,7 +155,7 @@ export const AutoComplete = ( ) => { return ( - + ); }; From 287567759e97f8a81a33f9e9d795cb83926aadea Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Fri, 27 Sep 2024 18:08:47 +0000 Subject: [PATCH 079/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index bcb4f990955..28e6d171021 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 3b019733d6f..a705a2fcf9b 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -fdb2f310e10ea769092ff54602ce783d9bf819e8 +112b7b9fa258260a95683d2d86df1dc7172a62d6 From 1bb0e84cbe47755cbc484e537f4da05cc87a4a50 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Fri, 27 Sep 2024 14:53:58 -0500 Subject: [PATCH 080/179] chore: update call details header styling (#2509) --- .../Home/Browse3/pages/CallPage/CallOverview.tsx | 7 +++---- .../Home/Browse3/pages/common/EditableCallName.tsx | 1 + .../Home/Browse3/pages/common/SimplePageLayout.tsx | 11 +++++++---- 3 files changed, 11 insertions(+), 8 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallOverview.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallOverview.tsx index 4d588d19df3..a4033139a8d 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallOverview.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallOverview.tsx @@ -15,15 +15,14 @@ export const Overview = styled.div` display: flex; align-items: center; gap: 8px; - padding: 3px 0; `; Overview.displayName = 'S.Overview'; export const CallName = styled.div` font-family: Source Sans Pro; - font-size: 24px; + font-size: 16px; font-weight: 600; - line-height: 32px; + line-height: 20px; letter-spacing: 0px; text-align: left; `; @@ -50,6 +49,7 @@ export const CallOverview: React.FC<{ return ( <> + - diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/EditableCallName.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/EditableCallName.tsx index bfb8b32dfd0..fa610de3e49 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/EditableCallName.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/EditableCallName.tsx @@ -49,6 +49,7 @@ export const EditableCallName: React.FC<{ return ( {props.headerContent}
    {(!props.hideTabsIfSingle || tabs.length > 1) && ( {tabs.map(tab => ( - + {tab.label} ))} From 82394ff592acdc7ee60f9dbfdcd75bf32e113400 Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Fri, 27 Sep 2024 19:58:59 +0000 Subject: [PATCH 081/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 4 ++-- weave/frontend/sha1.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 28e6d171021..a53e9db18c9 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,8 +91,8 @@ - - + + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index a705a2fcf9b..87beb693576 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -112b7b9fa258260a95683d2d86df1dc7172a62d6 +70c2a215d1ec53d7dd2d3354c48b97b431e8b57e From b71c5f3163f4dde505a29453f2a684e53795f0f0 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Fri, 27 Sep 2024 16:01:31 -0500 Subject: [PATCH 082/179] fix: some unfilterable cols showing up in filters (#2510) --- .../PagePanelComponents/Home/Browse3/filters/common.ts | 8 ++++---- 1 file changed, 4 insertions(+), 4 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/filters/common.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/filters/common.ts index 46b4d4964d7..2e93cfb158f 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/filters/common.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/filters/common.ts @@ -22,10 +22,10 @@ export type FilterId = number | string | undefined; export const UNFILTERABLE_FIELDS = [ 'op_name', 'feedback', - 'summary.weave.status', - 'summary.weave.tokens', - 'summary.weave.cost', - 'summary.weave.latency', + 'status', + 'tokens', + 'cost', + 'latency', 'wb_user_id', // Option+Click works ]; From 7bfe69f1f8c7896daaae5e0d72180281e99010ce Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Fri, 27 Sep 2024 21:05:42 +0000 Subject: [PATCH 083/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index a53e9db18c9..0533643f891 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 87beb693576..1c9f513e303 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -70c2a215d1ec53d7dd2d3354c48b97b431e8b57e +3ff63c6d011fe8c2d4cc031f03803dd3bd71e120 From ee04c2282110e905e1c32ab5b8c742300a496d9e Mon Sep 17 00:00:00 2001 From: Griffin Tarpenning Date: Fri, 27 Sep 2024 15:19:00 -0700 Subject: [PATCH 084/179] feat: optionally include feedback in calls export (#2511) --- .../pages/CallsPage/CallsTableButtons.tsx | 58 ++++++++++++++++--- .../traceServerClientTypes.ts | 1 + .../wfReactInterface/tsDataModelHooks.ts | 4 +- .../wfDataModelHooksInterface.ts | 3 +- 4 files changed, 57 insertions(+), 9 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTableButtons.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTableButtons.tsx index fe5b6a2c98e..35233eac1ab 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTableButtons.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallsPage/CallsTableButtons.tsx @@ -3,6 +3,7 @@ import {GridFilterModel, GridSortModel} from '@mui/x-data-grid-pro'; import {useOrgName} from '@wandb/weave/common/hooks/useOrganization'; import {useViewerUserInfo2} from '@wandb/weave/common/hooks/useViewerUserInfo'; import {Radio} from '@wandb/weave/components'; +import {Switch} from '@wandb/weave/components'; import {Button} from '@wandb/weave/components/Button'; import {CodeEditor} from '@wandb/weave/components/CodeEditor'; import { @@ -61,6 +62,7 @@ export const ExportSelector = ({ entityName: userInfoLoaded?.username ?? '', skip: viewerLoading, }); + const [includeFeedback, setIncludeFeedback] = useState(false); // Popover management const ref = useRef(null); @@ -90,7 +92,15 @@ export const ExportSelector = ({ // TODO(gst): allow specifying offset const offset = 0; const limit = MAX_EXPORT; - // TODO(gst): add support for JSONL and JSON column selection + + // Explicitly add feedback column for CSV/TSV exports + if ( + [ContentType.csv, ContentType.tsv].includes(contentType) && + includeFeedback + ) { + visibleColumns.push('summary.weave.feedback'); + } + const leafColumns = [ContentType.csv, ContentType.tsv].includes(contentType) ? makeLeafColumns(visibleColumns) : undefined; @@ -105,7 +115,8 @@ export const ExportSelector = ({ sortBy, filterBy, leafColumns, - refColumnsToExpand + refColumnsToExpand, + includeFeedback ).then(blob => { const fileExtension = fileExtensions[contentType]; const date = new Date().toISOString().split('T')[0]; @@ -141,7 +152,8 @@ export const ExportSelector = ({ lowLevelFilter, filterBy, refColumnsToExpand, - sortBy + sortBy, + includeFeedback ); const curlText = makeCurlText( callQueryParams.entity, @@ -150,7 +162,8 @@ export const ExportSelector = ({ lowLevelFilter, filterBy, refColumnsToExpand, - sortBy + sortBy, + includeFeedback ); return ( @@ -205,6 +218,28 @@ export const ExportSelector = ({ /> )} +
    + + + + +
    + sortBy: Array<{field: string; direction: 'asc' | 'desc'}>, + includeFeedback: boolean ) { let codeStr = `import weave\nassert weave.__version__ >= "0.50.14", "Please upgrade weave!" \n\nclient = weave.init("${entity}/${project}")`; codeStr += `\ncalls = client.server.calls_query_stream({\n`; @@ -472,6 +508,9 @@ function makeCodeText( const expandColumnsStr = JSON.stringify(expandColumns, null, 0); codeStr += ` "expand_columns": ${expandColumnsStr},\n`; } + if (includeFeedback) { + codeStr += ` "include_feedback": true,\n`; + } // specifying call_ids ignores other filters, return early codeStr += `})`; return codeStr; @@ -510,6 +549,9 @@ function makeCodeText( if (sortBy.length > 0) { codeStr += ` "sort_by": ${JSON.stringify(sortBy, null, 0)},\n`; } + if (includeFeedback) { + codeStr += ` "include_feedback": True,\n`; + } codeStr += `})`; @@ -523,7 +565,8 @@ function makeCurlText( filter: CallFilter, query: Query | undefined, expandColumns: string[], - sortBy: Array<{field: string; direction: 'asc' | 'desc'}> + sortBy: Array<{field: string; direction: 'asc' | 'desc'}>, + includeFeedback: boolean ) { const baseUrl = (window as any).CONFIG.TRACE_BACKEND_BASE_URL; const filterStr = JSON.stringify( @@ -562,7 +605,8 @@ curl '${baseUrl}/calls/stream_query' \\ } baseCurl += ` "limit":${MAX_EXPORT}, "offset":0, - "sort_by":${JSON.stringify(sortBy, null, 0)} + "sort_by":${JSON.stringify(sortBy, null, 0)}, + "include_feedback": ${includeFeedback} }'`; return baseCurl; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/traceServerClientTypes.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/traceServerClientTypes.ts index 4d6bc999d00..295b88faaed 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/traceServerClientTypes.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/traceServerClientTypes.ts @@ -60,6 +60,7 @@ export type TraceCallsQueryReq = { query?: Query; columns?: string[]; expand_columns?: string[]; + include_feedback?: boolean; }; export type TraceCallsQueryRes = { diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts index 0c421a4babd..12fa9872465 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/tsDataModelHooks.ts @@ -554,7 +554,8 @@ const useCallsExport = () => { sortBy?: traceServerTypes.SortBy[], query?: Query, columns?: string[], - expandedRefCols?: string[] + expandedRefCols?: string[], + includeFeedback?: boolean ) => { const req: traceServerTypes.TraceCallsQueryReq = { project_id: projectIdFromParts({entity, project}), @@ -575,6 +576,7 @@ const useCallsExport = () => { query, columns: columns ?? undefined, expand_columns: expandedRefCols ?? undefined, + include_feedback: includeFeedback ?? false, }; return getTsClient().callsStreamDownload(req, contentType); }, diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts index 7a2db9667b3..a760cbfb207 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/wfReactInterface/wfDataModelHooksInterface.ts @@ -203,7 +203,8 @@ export type WFDataModelHooksInterface = { sortBy?: traceServerClientTypes.SortBy[], query?: Query, columns?: string[], - expandedRefCols?: string[] + expandedRefCols?: string[], + includeFeedback?: boolean ) => Promise; useOpVersion: (key: OpVersionKey | null) => Loadable; useOpVersions: ( From 6b28fa5a5b366d0d2355ea4849466c4673779cea Mon Sep 17 00:00:00 2001 From: Weave Build Bot Date: Fri, 27 Sep 2024 22:22:53 +0000 Subject: [PATCH 085/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 2 +- weave/frontend/sha1.txt | 2 +- 2 files changed, 2 insertions(+), 2 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 0533643f891..52dcb504ba0 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,7 +91,7 @@ - + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index 1c9f513e303..aeed0d89972 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -3ff63c6d011fe8c2d4cc031f03803dd3bd71e120 +8ef1151016d558427cdff02197fe0981af9b8480 From 340df12127423859d44251f279f77d9d4d07228c Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Sat, 28 Sep 2024 10:08:06 -0500 Subject: [PATCH 086/179] Revert "chore: change id display from four digits to three (#2461)" (#2515) This reverts commit d634e3883c8c8cd85be2125d1a2a2f2e4e3f0d56. --- .../PagePanelComponents/Home/Browse3/pages/common/Id.tsx | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx index 512b9f79b81..e038eb372bd 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/common/Id.tsx @@ -48,7 +48,7 @@ type IdProps = { }; export const Id = ({id, type, className}: IdProps) => { - const truncatedId = id.slice(-3); + const truncatedId = id.slice(-4); const trigger = {truncatedId}; const prefix = type ? `${type} ID` : 'ID'; const content = ( @@ -61,7 +61,7 @@ export const Id = ({id, type, className}: IdProps) => { export const CopyableId = ({id, type, className}: IdProps) => { const [isClicked, setIsClicked] = useState(false); - const truncatedId = id.slice(-3); + const truncatedId = id.slice(-4); const onClick = useCallback(() => { copyToClipboard(id); setIsClicked(true); From 30bc782de7fd596d85989753b4f00d09e490bd1d Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Sat, 28 Sep 2024 10:11:16 -0500 Subject: [PATCH 087/179] chore: update Use tab styling (#2514) --- weave-js/src/components/CopyableText.tsx | 56 ++++++++++++++++--- .../Home/Browse3/pages/CallPage/CallPage.tsx | 6 +- .../Home/Browse3/pages/ObjectVersionPage.tsx | 35 ++++++------ .../Home/Browse3/pages/OpVersionPage.tsx | 7 ++- .../Home/Browse3/pages/TabUseBanner.tsx | 19 +++++++ .../Home/Browse3/pages/TabUseCall.tsx | 24 +++++--- .../Home/Browse3/pages/TabUseDataset.tsx | 13 +++-- .../Home/Browse3/pages/TabUseModel.tsx | 17 +++--- .../Home/Browse3/pages/TabUseObject.tsx | 9 +-- .../Home/Browse3/pages/TabUseOp.tsx | 17 +++--- 10 files changed, 138 insertions(+), 65 deletions(-) create mode 100644 weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseBanner.tsx diff --git a/weave-js/src/components/CopyableText.tsx b/weave-js/src/components/CopyableText.tsx index 40de12bf66e..fce1ff83ad3 100644 --- a/weave-js/src/components/CopyableText.tsx +++ b/weave-js/src/components/CopyableText.tsx @@ -1,9 +1,16 @@ +/** + * This component displays a code snippet that can be copied to the clipboard. + */ + +import classNames from 'classnames'; import copyToClipboard from 'copy-to-clipboard'; -import React, {CSSProperties, useCallback} from 'react'; +import Prism from 'prismjs'; +import React, {CSSProperties, useCallback, useEffect, useRef} from 'react'; import styled from 'styled-components'; import {toast} from '../common/components/elements/Toast'; -import {MOON_100, MOON_200} from '../common/css/color.styles'; +import {MOON_150, MOON_250, MOON_950} from '../common/css/color.styles'; +import {hexToRGB} from '../common/css/utils'; import {Icon, IconName} from './Icon'; import {Tooltip} from './Tooltip'; @@ -12,6 +19,10 @@ type CopyableTextProps = { // The text to copy to the clipboard. If not provided, `text` will be used. copyText?: string; + + // If specified, passed to Prism for syntax highlighting. + language?: string; + tooltipText?: string; toastText?: string; icon?: IconName; @@ -19,28 +30,40 @@ type CopyableTextProps = { onClick?(): void; }; +// Background color picked to match alert const Wrapper = styled.div<{isMultiline?: boolean}>` - background-color: ${MOON_100}; - display: flex; + background-color: ${hexToRGB(MOON_950, 0.04)}; + position: relative; align-items: ${props => (props.isMultiline ? 'flex-start' : 'center')}; cursor: pointer; padding: 8px; border-radius: 8px; + margin-top: 8px; &:hover { - background-color: ${MOON_200}; + background-color: ${MOON_150}; + & > .button_copy { + display: flex; + } } `; Wrapper.displayName = 'S.Wrapper'; const IconCell = styled.div` + position: absolute; + top: 4px; + right: 4px; flex: 0 0 auto; - display: flex; align-items: center; + display: none; + align-items: center; + background-color: ${MOON_250}; + padding: 4px 8px; + border-radius: 8px; + font-weight: 600; `; IconCell.displayName = 'S.IconCell'; const Text = styled.code` - font-size: 0.7em; white-space: pre-line; overflow: auto; text-overflow: ellipsis; @@ -50,12 +73,15 @@ Text.displayName = 'S.Text'; export const CopyableText = ({ text, copyText, + language, tooltipText = 'Click to copy to clipboard', toastText = 'Copied to clipboard', icon, disabled, onClick, }: CopyableTextProps) => { + const ref = useRef(null); + const copy = useCallback(() => { copyToClipboard(copyText ?? text); toast(toastText); @@ -67,6 +93,10 @@ export const CopyableText = ({ style.marginTop = 4; } + useEffect(() => { + Prism.highlightElement(ref.current!); + }); + const trigger = ( - + + Copy - {text} + + {text} + ); return ; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx index 34851972948..270dc72d9b5 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/CallPage.tsx @@ -114,7 +114,11 @@ const useCallTabs = (call: CallSchema) => { }, { label: 'Use', - content: , + content: ( + + + + ), }, ]; }; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx index 5e1a0632018..0b581e464a0 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/ObjectVersionPage.tsx @@ -292,22 +292,25 @@ const ObjectVersionPageInner: React.FC<{ }, { label: 'Use', - content: - baseObjectClass === 'Dataset' ? ( - - ) : baseObjectClass === 'Model' ? ( - - ) : ( - - ), + content: ( + + {baseObjectClass === 'Dataset' ? ( + + ) : baseObjectClass === 'Model' ? ( + + ) : ( + + )} + + ), }, // { diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx index ffb8e285351..5e06b4a0474 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/OpVersionPage.tsx @@ -1,6 +1,7 @@ import React, {useMemo} from 'react'; import {LoadingDots} from '../../../../LoadingDots'; +import {Tailwind} from '../../../../Tailwind'; import {NotFoundPanel} from '../NotFoundPanel'; import {OpCodeViewer} from '../OpCodeViewer'; import { @@ -134,7 +135,11 @@ const OpVersionPageInner: React.FC<{ ? [ { label: 'Use', - content: , + content: ( + + + + ), }, ] : []), diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseBanner.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseBanner.tsx new file mode 100644 index 00000000000..e6de25d1fe7 --- /dev/null +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseBanner.tsx @@ -0,0 +1,19 @@ +import React, {ReactNode} from 'react'; + +import {Alert} from '../../../../Alert'; + +type TabUseBannerProps = { + children?: ReactNode | undefined; +}; + +const STYLE_BANNER = { + fontSize: 14, +}; + +export const TabUseBanner = ({children}: TabUseBannerProps) => { + return ( + + {children} + + ); +}; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseCall.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseCall.tsx index 4b337977aad..817d647d970 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseCall.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseCall.tsx @@ -1,9 +1,9 @@ import {Box} from '@mui/material'; import React from 'react'; -import {Alert} from '../../../../Alert'; import {CopyableText} from '../../../../CopyableText'; import {DocLink} from './common/Links'; +import {TabUseBanner} from './TabUseBanner'; import {CallSchema} from './wfReactInterface/wfDataModelHooksInterface'; type TabUseCallProps = { @@ -30,28 +30,36 @@ os.environ["WF_TRACE_SERVER_URL"] = "http://127.0.0.1:6345" const codeFeedback = `call.feedback.add("correctness", {"value": 4})`; return ( - - + + See{' '} {' '} for more information. - + Use the following code to retrieve this call: - + You can add a reaction like this: - + or a note like this: - + or custom feedback like this: - + ); diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseDataset.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseDataset.tsx index bd71639d5fc..8b56a17604d 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseDataset.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseDataset.tsx @@ -4,9 +4,9 @@ import React from 'react'; import {isValidVarName} from '../../../../../core/util/var'; import {parseRef} from '../../../../../react'; import {abbreviateRef} from '../../../../../util/refs'; -import {Alert} from '../../../../Alert'; import {CopyableText} from '../../../../CopyableText'; import {DocLink} from './common/Links'; +import {TabUseBanner} from './TabUseBanner'; import { OBJECT_ATTR_EDGE_NAME, TABLE_ID_EDGE_NAME, @@ -43,8 +43,8 @@ ${pythonName} = weave.ref('${ref.artifactName}:v${versionIndex}').get()`; } return ( - - + + See{' '} {' '} and for more information. - + The ref for this {label} is: @@ -61,14 +61,15 @@ ${pythonName} = weave.ref('${ref.artifactName}:v${versionIndex}').get()`; Use the following code to retrieve this {label}: {long && ( <> - or - +
    or
    + )}
    diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseModel.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseModel.tsx index 08e4483712b..da2560ad94b 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseModel.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/TabUseModel.tsx @@ -4,9 +4,9 @@ import React from 'react'; import {isValidVarName} from '../../../../../core/util/var'; import {parseRef} from '../../../../../react'; import {abbreviateRef} from '../../../../../util/refs'; -import {Alert} from '../../../../Alert'; import {CopyableText} from '../../../../CopyableText'; import {DocLink} from './common/Links'; +import {TabUseBanner} from './TabUseBanner'; type TabUseModelProps = { name: string; @@ -21,16 +21,12 @@ export const TabUseModel = ({name, uri, projectName}: TabUseModelProps) => { const label = isParentObject ? 'model version' : 'object'; return ( - - + + See{' '} - {' '} - and for more - information. - + {' '} + for more information. + The ref for this {label} is: @@ -39,6 +35,7 @@ export const TabUseModel = ({name, uri, projectName}: TabUseModelProps) => { Use the following code to retrieve this {label}: { const pythonName = isValidVarName(name) ? name : 'obj'; return ( - - + + See{' '} {' '} for more information. - + The ref for this object version is: @@ -32,6 +32,7 @@ export const TabUseObject = ({name, uri}: TabUseObjectProps) => { Use the following code to retrieve this object version: { const pythonName = isValidVarName(name) ? name : 'op'; return ( - - - See{' '} - {' '} - for more information. - + + + See for + more information. + The ref for this operation version is: @@ -33,6 +29,7 @@ export const TabUseOp = ({name, uri}: TabUseOpProps) => { Use the following code to retrieve this operation version: Date: Sat, 28 Sep 2024 15:15:16 +0000 Subject: [PATCH 088/179] chore(bot): update frontend bundle sha [no ci] --- weave/frontend/index.html | 4 ++-- weave/frontend/sha1.txt | 2 +- 2 files changed, 3 insertions(+), 3 deletions(-) diff --git a/weave/frontend/index.html b/weave/frontend/index.html index 52dcb504ba0..c7f484a5db7 100644 --- a/weave/frontend/index.html +++ b/weave/frontend/index.html @@ -91,8 +91,8 @@ - - + + diff --git a/weave/frontend/sha1.txt b/weave/frontend/sha1.txt index aeed0d89972..46bfec4c506 100644 --- a/weave/frontend/sha1.txt +++ b/weave/frontend/sha1.txt @@ -1 +1 @@ -8ef1151016d558427cdff02197fe0981af9b8480 +c3537474eb2bf09258237f31b06635e0070a885e From 09a240b6031329480baf767b55024a6e4ad967b2 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Sat, 28 Sep 2024 11:52:31 -0700 Subject: [PATCH 089/179] ready (#2516) --- MANIFEST.in | 1 + 1 file changed, 1 insertion(+) diff --git a/MANIFEST.in b/MANIFEST.in index ca05fcce16b..06ca621be71 100644 --- a/MANIFEST.in +++ b/MANIFEST.in @@ -10,6 +10,7 @@ graft weave/trace graft weave/trace_server graft weave/type_serializers graft weave/trace_server_bindings +graft weave/wandb_interface global-exclude */__pycache__/* global-exclude *.pyc global-exclude */cassettes/* From d76b9299a1c0b64c2efbc07f31b92de3b554c594 Mon Sep 17 00:00:00 2001 From: Andrew Truong Date: Mon, 30 Sep 2024 12:14:48 -0400 Subject: [PATCH 090/179] chore(weave): Bulk move files to weave_query package (#2506) --- .github/workflows/test.yaml | 8 +- .pre-commit-config.yaml | 6 +- integration_test/.gitignore | 1 - integration_test/.prettierrc | 9 - integration_test/README.md | 21 - integration_test/cypress.config.js | 27 - integration_test/cypress/.gitignore | 2 - .../cypress/e2e/interactive/blank.py | 12 - .../boardTemplateNotebookLinks.cy.ts | 56 - .../cypress/e2e/interactive/dashboard.cy.ts | 45 - .../e2e/interactive/distribution.cy.ts | 54 - .../cypress/e2e/interactive/distribution.py | 47 - .../cypress/e2e/interactive/plotboard.cy.ts | 47 - .../cypress/e2e/interactive/scatter.cy.ts | 33 - .../cypress/e2e/interactive/scatter.py | 38 - .../cypress/e2e/notebooks/README.md | 1 - .../notebooks/experimental/AutoBoard.cy.ts | 8 - .../experimental/Closures.cydisabled.ts | 7 - .../e2e/notebooks/experimental/Monitor.cy.ts | 8 - .../experimental/MonitorPanelPlot.cy.ts | 8 - .../notebooks/experimental/Mutations.cy.ts | 8 - .../Table Summary Panel.cydisabled.ts | 7 - .../notebooks/experimental/app/RunChain.cy.ts | 10 - .../experimental/app/beautiful_runs.cy.ts | 8 - .../experimental/app/scenario_compare.cy.ts | 8 - .../composite_histograms.cydisabled.ts | 7 - .../notebooks/experimental/dir_browsing.cy.ts | 8 - .../notebooks/experimental/ecosystem.cy.ts | 8 - .../experimental/image_gen_craiyon.cy.ts | 8 - .../experimental/image_gen_ops.cydisabled.ts | 7 - .../experimental/layout_panels.cy.ts | 8 - .../experimental/mnist_train.cydisabled.ts | 7 - .../notebooks/experimental/spacy_demo.cy.ts | 8 - .../experimental/table_data_passing.cy.ts | 8 - .../notebooks/experimental/tag_search.cy.ts | 8 - .../cypress/e2e/notebooks/get_started.cy.ts | 7 - .../cypress/e2e/notebooks/notebooks.ts | 118 - .../e2e/notebooks/reference/WB_API.cy.ts | 8 - .../reference/basic_weave_types.cy.ts | 8 - .../reference/confusion_matrix.cy.ts | 8 - .../reference/control/Object Picker.cy.ts | 8 - .../notebooks/reference/control/Slider.cy.ts | 8 - .../reference/create_ops.cydisabled.ts | 7 - .../reference/create_plots_ui_guide.cy.ts | 8 - .../e2e/notebooks/reference/layout/Each.cy.ts | 8 - .../layout/Group & LabeledItem.cy.ts | 8 - .../reference/panels/plot/synced_axes.cy.ts | 8 - .../reference/vis/Distribution.cy.ts | 8 - .../e2e/notebooks/reference/vis/Scatter.cy.ts | 8 - .../vis/derived_plots_from_tables.cy.ts | 8 - integration_test/cypress/e2e/testlib.ts | 192 -- .../cypress/fixtures/example.json | 5 - integration_test/cypress/plugins/index.ts | 3 - integration_test/cypress/support/commands.js | 25 - integration_test/cypress/support/e2e.js | 23 - integration_test/cypress/tsconfig.json | 8 - integration_test/cypress_parallel.sh | 5 - integration_test/package.json | 25 - integration_test/yarn.lock | 2917 ----------------- mypy_weave_plugin.py | 34 - pyproject.toml | 27 + setup.py | 16 +- weave/__init__.py | 44 - weave/clear_cache.py | 2 +- weave/conftest.py | 115 - weave/deploy/modal/__init__.py | 4 +- weave/deploy/modal/stub.py | 2 +- weave/legacy/notebooks/Eval Board.ipynb | 163 - weave/legacy/tests/test_monitoring.py | 155 - weave/legacy/tests/test_monitoring_openai.py | 548 ---- weave/legacy/tests/test_weave_api.py | 34 - weave/legacy/weave/core_types/__init__.py | 1 - weave/legacy/weave/ecosystem/__init__.py | 1 - .../weave/ecosystem/bertviz/__init__.py | 1 - .../weave/ecosystem/craiyon/__init__.py | 1 - .../weave/ecosystem/huggingface/__init__.py | 12 - weave/legacy/weave/ecosystem/lens/__init__.py | 1 - weave/legacy/weave/ecosystem/py/__init__.py | 1 - .../weave/ecosystem/pytorch/__init__.py | 1 - .../legacy/weave/ecosystem/shawn/__init__.py | 7 - .../weave/ecosystem/sklearn/__init__.py | 1 - .../legacy/weave/ecosystem/slack/__init__.py | 2 - .../legacy/weave/ecosystem/slurm/__init__.py | 1 - .../weave/ecosystem/torchvision/__init__.py | 1 - .../legacy/weave/ecosystem/wandb/__init__.py | 13 - .../language_features/tagging/__init__.py | 0 weave/legacy/weave/ops_arrow/__init__.py | 12 - weave/legacy/weave/ops_arrow/ops.py | 11 - .../weave/ops_domain/run_history/__init__.py | 0 .../legacy/weave/ops_primitives/test_file.py | 8 - .../weave/ops_primitives/test_list_range.py | 7 - weave/legacy/weave/panels/__init__.py | 70 - weave/legacy/weave/panels/panel_expression.py | 7 - weave/tests/trace/test_weave_client.py | 1 + weave/tests/wandb_system_tests_conftest.py | 29 +- weave/trace/op.py | 7 - weave/trace/serve_fastapi.py | 2 +- weave/trace/weave_init.py | 2 +- .../.devcontainer/devcontainer.json | 0 .../.devcontainer/postCreateCommand.sh | 0 {weave/legacy => weave_query}/.dockerignore | 0 .../.github/workflows/mutations-perf.yaml | 0 weave_query/.graphqlrc | 1 + .../.vscode/settings.json | 0 {weave/legacy => weave_query}/Dockerfile | 2 +- .../legacy => weave_query}/Dockerfile.ci.test | 2 +- {weave/legacy => weave_query}/Makefile | 0 {weave/legacy => weave_query}/conftest.py | 147 +- .../docs/dispatching_and_resolution.md | 0 .../examples/apps/explore_embeddings.ipynb | 20 +- .../examples/experimental/AutoBoard.ipynb | 10 +- .../examples/experimental/Closures.ipynb | 0 .../examples/experimental/Monitor.ipynb | 58 +- .../experimental/MonitorPanelPlot.ipynb | 96 +- .../examples/experimental/Mutations.ipynb | 2 +- .../MonitorPanelPlotGeneric.ipynb | 6 +- ...oductionMonitoringConceptualOverview.ipynb | 6 +- .../ProductionMonitoring/StreamTable.md | 2 +- .../ProductionMonitoring/app_util.py | 0 .../ProductionMonitoring/model_util.py | 0 .../stream_table_api.ipynb | 2 +- .../experimental/Table Summary Panel.ipynb | 12 +- .../experimental/app/Embeddings.ipynb | 22 +- .../examples/experimental/app/RunChain.ipynb | 28 +- .../experimental/app/beautiful_runs.ipynb | 28 +- .../experimental/app/scenario_compare.ipynb | 34 +- .../examples/experimental/bert_viz.ipynb | 2 +- .../experimental/composite_histograms.ipynb | 4 +- .../examples/experimental/dir_browsing.ipynb | 2 +- .../examples/experimental/ecosystem.ipynb | 2 +- .../experimental/huggingface_datasets.ipynb | 2 +- .../experimental/huggingface_models.ipynb | 4 +- .../experimental/image_gen_craiyon.ipynb | 4 +- .../examples/experimental/image_gen_ops.ipynb | 8 +- .../examples/experimental/layout_panels.ipynb | 2 +- .../experimental/llm_monitor_helper.ipynb | 2 +- .../examples/experimental/mnist_train.ipynb | 2 +- .../experimental/object_version_compare.ipynb | 4 +- .../experimental/old_openai_monitoring.ipynb | 6 +- .../experimental/openai_monitoring.ipynb | 10 +- .../generate_synth_mon_board.ipynb | 8 +- .../prompts_dev/synthetic_openai_data.ipynb | 6 +- .../00 Tutorial - Data versioning.ipynb | 0 ...4 Tutorial - Publishing Data and Ops.ipynb | 4 +- .../skip_test/Composable Python panels.ipynb | 8 +- .../skip_test/Confusion Matrix.ipynb | 26 +- .../experimental/skip_test/Custom ops.ipynb | 8 +- .../skip_test/Diffusion explore 2.ipynb | 36 +- .../skip_test/Diffusion explore.ipynb | 56 +- .../skip_test/Diffusion story.ipynb | 22 +- .../experimental/skip_test/Docbot.ipynb | 50 +- .../experimental/skip_test/Hack demo.ipynb | 6 +- .../experimental/skip_test/KerasModel.ipynb | 4 +- .../skip_test/LLMs Via Weave.ipynb | 8 +- .../experimental/skip_test/Model Cards.ipynb | 2 +- .../experimental/skip_test/Models.ipynb | 6 +- .../experimental/skip_test/Monitor2.ipynb | 48 +- .../experimental/skip_test/Monitor3.ipynb | 54 +- .../skip_test/Multiple Y Axes.ipynb | 10 +- .../skip_test/Mutation - Code Editor.ipynb | 2 +- .../experimental/skip_test/Mutation.ipynb | 2 +- .../skip_test/Object browsing.ipynb | 0 .../experimental/skip_test/OpenAI.ipynb | 4 +- .../skip_test/Oxford-IIIT Pet Dataset.ipynb | 8 +- .../skip_test/Performance profiling.ipynb | 10 +- .../skip_test/ProdMonStreamTableIntro.ipynb | 4 +- .../experimental/skip_test/Shap.ipynb | 2 +- .../experimental/skip_test/StreamTables.ipynb | 4 +- .../experimental/skip_test/TimeSeries.ipynb | 14 +- .../experimental/skip_test/Untitled.ipynb | 2 +- .../experimental/skip_test/Vectorizing.ipynb | 6 +- .../experimental/skip_test/WB data.ipynb | 18 +- .../skip_test/Weave geo data.ipynb | 8 +- .../experimental/skip_test/art_explore.ipynb | 52 +- .../assets/op_preview_via_cursor.png | Bin .../skip_test/branching_runs.ipynb | 22 +- .../skip_test/evaluation notebook.ipynb | 0 .../skip_test/image_gen_replicate.ipynb | 2 +- .../skip_test/langchain docbot.ipynb | 6 +- .../skip_test/plot_selection.ipynb | 6 +- .../experimental/skip_test/slurm.ipynb | 2 +- .../skip_test/wandbot from scratch.ipynb | 0 .../skip_test/weave_engine_tracing.ipynb | 36 +- .../experimental/skip_test/weave_scifi.ipynb | 22 +- .../skip_test/weave_walkthrough.ipynb | 0 .../examples/experimental/spacy_demo.ipynb | 2 +- .../experimental/table_data_passing.ipynb | 16 +- .../examples/experimental/tag_search.ipynb | 12 +- .../examples/get_started.ipynb | 2 +- .../examples/reference/WB_API.ipynb | 16 +- .../reference/basic_weave_types.ipynb | 0 .../examples/reference/confusion_matrix.ipynb | 12 +- .../reference/control/Object Picker.ipynb | 32 +- .../examples/reference/control/Slider.ipynb | 2 +- .../examples/reference/create_ops.ipynb | 0 .../reference/create_plots_ui_guide.ipynb | 2 +- .../examples/reference/layout/Each.ipynb | 4 +- .../layout/Group & LabeledItem.ipynb | 16 +- .../examples/reference/markdown.ipynb | 6 +- .../reference/panels/plot/synced_axes.ipynb | 22 +- .../examples/reference/vis/Distribution.ipynb | 4 +- .../examples/reference/vis/Scatter.ipynb | 18 +- .../vis/derived_plots_from_tables.ipynb | 18 +- .../internal_tools/Module deps viz.ipynb | 0 .../internal_tools/generate_notebook_tests.py | 0 .../make_class_diagram.sh | 0 mypy.ini => weave_query/mypy.ini | 0 .../notebooks/Embeddings.ipynb | 0 .../notebooks/Eval Board Syn.ipynb | 66 +- weave_query/notebooks/Eval Board.ipynb | 163 + .../notebooks/Text Extraction Eval.ipynb | 2 +- .../case_when v if_then_else.ipynb | 0 .../perf_notebooks/pyarrow joinall.ipynb | 0 weave_query/pyproject.toml | 151 + weave_query/pytest.ini | 9 + .../requirements.legacy.datadog.txt | 0 .../requirements.legacy.dev.txt | 0 .../requirements.legacy.ecosystem.txt | 0 .../requirements.legacy.engine.txt | 0 .../requirements.legacy.test.txt | 3 +- .../requirements.legacy.txt | 0 .../scripts/clear_cache.py | 2 +- .../scripts/jupyter_dev.sh | 0 .../scripts/pytest_parallel.sh | 0 .../legacy => weave_query}/scripts/syndata.py | 4 +- .../scripts/syndata_mon.py | 2 +- .../scripts/wandb_artifact_perf.py | 2 +- .../legacy => weave_query}/supervisord.conf | 0 {weave => weave_query}/testdata/cereal.csv | 0 {weave => weave_query}/testdata/cereal.db | Bin {weave => weave_query}/testdata/chinook.db | Bin .../testdata/obj.table.json | 0 .../media/images/8f65e54dc684f7675aec.png | Bin .../test_results.table.json | 0 .../weird_table.table.json | 0 .../table.joined-table.json | 0 .../tables/table_1.table.json | 0 .../tables/table_2.table.json | 0 .../table.partitioned-table.json | 0 .../tables/table_1.table.json | 0 .../tables/table_2.table.json | 0 .../tables/table_3.table.json | 0 .../api.wandb.test/test.parquet | Bin .../api.wandb.test/test_media.parquet | Bin .../testdata/spring-lamb.jpg | Bin .../testdata/sqlite_cereal.sql | 0 .../testdata/sqlite_make_cereal.sh | 0 .../testdata/t8.shakespeare.txt | 0 .../testdata/test_dir/b.txt | 0 .../testdata/test_dir/c.txt | 0 .../testdata/test_dir/sub_dir/a.txt | 0 {weave => weave_query}/testdata/train.py | 0 .../legacy => weave_query/tests}/__init__.py | 0 .../tests/example_wb_unit_test.py | 3 +- .../tests/fixture_fakewandb.py | 8 +- .../tests/test_access.py | 7 +- .../legacy => weave_query}/tests/test_api.py | 4 +- .../tests/test_arrow.py | 26 +- .../tests/test_arrow_awl.py | 15 +- .../tests/test_arrow_concat.py | 9 +- .../tests/test_arrow_perf.py | 5 +- .../tests/test_arrow_topy.py | 7 +- .../tests/test_arrow_vectorizer.py | 18 +- .../tests/test_artifact.py | 7 +- .../tests/test_artifact_metadata.py | 13 +- .../tests/test_assign_perf.py | 3 +- .../tests/test_assignment.py | 5 +- .../tests/test_async.py | 2 +- .../tests/test_async_queue.py | 2 +- .../tests/test_basic_ops.py | 10 +- .../legacy => weave_query}/tests/test_box.py | 2 +- .../tests/test_cache.py | 2 +- .../tests/test_codify.py | 73 +- .../tests/test_compile.py | 43 +- .../tests/test_complex_calls.py | 5 +- .../legacy => weave_query}/tests/test_cond.py | 35 +- .../tests/test_const_type_mapper.py | 5 +- .../tests/test_custom_types.py | 10 +- .../tests/test_datetime_timestamp.py | 5 +- .../tests/test_decorator_type.py | 3 +- .../tests/test_decorators.py | 8 +- .../tests/test_derive_op.py | 4 +- .../tests/test_dispatch.py | 5 +- .../tests/test_examples.py | 4 +- .../tests/test_execute.py | 15 +- .../tests/test_execute_fast.py | 11 +- .../tests/test_execution_graphs.py | 4 +- .../legacy => weave_query}/tests/test_file.py | 5 +- .../tests/test_filesystem.py | 2 +- .../tests/test_gql_to_weave.py | 4 +- .../tests/test_graph.py | 7 +- .../tests/test_graph_debug.py | 2 +- .../tests/test_helpers.py | 0 .../tests/test_hypothesis.py | 9 +- .../tests/test_index.py | 3 +- .../tests/test_infer_types.py | 2 +- .../tests/test_io_service.py | 2 +- .../legacy => weave_query}/tests/test_join.py | 9 +- .../tests/test_js_compat.py | 6 +- .../tests/test_language.py | 7 +- .../tests/test_language_autocall.py | 3 +- .../tests/test_levenshtein.py | 2 +- .../tests/test_list_arrow_compat.py | 18 +- .../tests/test_list_indexing.py | 5 +- .../tests/test_logging.py | 4 +- .../tests/test_mappability.py | 27 +- .../tests/test_mappers_arrow.py | 4 +- .../tests/test_mappers_python.py | 4 +- .../tests/test_media.py | 4 +- .../tests/test_media_user.py | 6 +- .../tests/test_mutation2.py | 79 +- .../tests/test_mutations.py | 4 +- .../tests/test_node_ref.py | 6 +- .../tests/test_nullability.py | 9 +- .../tests/test_number_bin.py | 7 +- .../tests/test_numpy.py | 8 +- .../legacy => weave_query}/tests/test_op.py | 8 +- .../tests/test_op_behaviors.py | 17 +- .../tests/test_op_coverage.py | 2 +- .../tests/test_op_def.py | 6 +- .../tests/test_op_def_data.json | 0 .../tests/test_op_def_type.py | 2 +- .../tests/test_op_dispatching.py | 17 +- .../tests/test_op_serialization.py | 7 +- .../tests/test_panel_coverage.py | 5 +- .../tests/test_panel_time_series.py | 7 +- .../tests/test_panels.py | 31 +- .../tests/test_partial_object.py | 14 +- .../legacy => weave_query}/tests/test_plot.py | 45 +- .../tests/test_projection_timeout.py | 4 +- .../tests/test_publish_flow.py | 103 +- .../tests/test_pydantic.py | 47 +- .../tests/test_ref_tracking.py | 7 +- .../legacy => weave_query}/tests/test_refs.py | 28 +- .../tests/test_relpath_no_syscalls.py | 2 +- .../tests/test_run_segment.py | 11 +- .../tests/test_serialize.py | 17 +- .../tests/test_server.py | 14 +- .../legacy => weave_query}/tests/test_show.py | 4 +- .../tests/test_stitch.py | 49 +- .../tests/test_storage.py | 12 +- .../tests/test_stream_table.py | 2 +- .../tests/test_table_ops.py | 10 +- .../tests/test_tagging.py | 21 +- .../tests/test_templates.py | 27 +- .../tests/test_timestamp_bin.py | 13 +- .../tests/test_trace.py | 8 +- .../tests/test_typeddict_notrequired.py | 4 +- .../legacy => weave_query}/tests/test_uris.py | 4 +- .../legacy => weave_query}/tests/test_wb.py | 26 +- .../tests/test_wb_data_types.py | 43 +- .../tests/test_wb_domain_ops.py | 17 +- .../tests/test_wb_domain_types.py | 8 +- .../tests/test_wb_end_to_end.py | 17 +- .../test_wb_history_loading_compatability.py | 17 +- .../tests/test_wb_stream_table.py | 17 +- .../tests/test_wb_tables.py | 51 +- weave_query/tests/test_weave_api.py | 35 + .../tests/test_weave_types.py | 129 +- .../tests/test_weavejs_fixes.py | 4 +- .../tests/test_weavify.py | 8 +- .../tests/test_with_columns.py | 5 +- .../tests/util}/__init__.py | 0 .../tests/util/concrete_tagged_value.py | 4 +- .../legacy => weave_query}/tests/util/geom.py | 7 +- .../tests/util/list_arrow_test_helpers.py | 6 +- .../tests/util/op_specs.py | 9 +- .../tests/util/tag_test_util.py | 15 +- .../tests/util/weavejs_ops.py | 10 +- .../tests/wandb_system_tests_conftest.py | 431 +++ weave_query/wb_schema.gql | 716 ++++ weave_query/weave_query/__init__.py | 55 + .../weave_query}/_dict_utils.py | 8 +- .../weave => weave_query/weave_query}/api.py | 32 +- .../weave_query/arrow}/__init__.py | 0 .../weave_query}/arrow/arrow.py | 16 +- .../weave_query}/arrow/arrow_tags.py | 10 +- .../weave_query}/arrow/concat.py | 10 +- .../weave_query}/arrow/constructors.py | 14 +- .../weave_query}/arrow/convert.py | 16 +- .../weave_query}/arrow/list_.py | 26 +- .../weave_query}/arrow_util.py | 0 .../weave_query}/artifact_base.py | 4 +- .../weave_query}/artifact_fs.py | 18 +- .../weave_query}/artifact_local.py | 6 +- .../weave_query}/artifact_mem.py | 6 +- .../weave_query}/artifact_wandb.py | 12 +- .../weave_query}/async_demo.py | 5 +- .../weave_query}/async_map.py | 0 .../weave_query}/async_queue.py | 0 .../weave => weave_query/weave_query}/box.py | 4 +- .../weave_query}/cache.py | 4 +- .../weave_query}/client.py | 4 +- .../weave_query}/client_interface.py | 0 .../weave_query}/codifiable_value_mixin.py | 0 .../weave_query}/codify.py | 22 +- .../weave_query}/compile.py | 16 +- .../weave_query}/compile_domain.py | 10 +- .../weave_query}/compile_table.py | 6 +- .../weave_query}/context.py | 18 +- .../weave_query}/context_state.py | 6 +- .../weave_query/core_types/__init__.py | 1 + .../core_types/stream_table_type.py | 2 +- .../weave_query}/debug.py | 0 .../weave_query}/debug_compile.py | 4 +- .../weave_query}/debug_types.py | 4 +- .../weave_query}/decorator_arrow_op.py | 8 +- .../weave_query}/decorator_class.py | 6 +- .../weave_query}/decorator_mutation.py | 0 .../weave_query}/decorator_op.py | 8 +- .../weave_query}/decorator_type.py | 8 +- .../weave_query}/decorator_type.pyi | 0 .../weave_query}/decorators.py | 0 .../weave_query}/derive_op.py | 8 +- .../weave_query}/dispatch.py | 10 +- .../weave_query}/eager.py | 8 +- weave_query/weave_query/ecosystem/__init__.py | 1 + .../weave_query}/ecosystem/all.py | 6 +- .../weave_query/ecosystem/bertviz/__init__.py | 1 + .../weave_query}/ecosystem/bertviz/panels.py | 21 +- .../weave_query/ecosystem/craiyon/__init__.py | 1 + .../weave_query}/ecosystem/craiyon/ops.py | 3 +- .../ecosystem/example}/__init__.py | 4 +- .../weave_query}/ecosystem/example/ops.py | 3 +- .../ecosystem/hdbscan}/__init__.py | 4 +- .../weave_query}/ecosystem/hdbscan/ops.py | 5 +- .../ecosystem/huggingface/__init__.py | 12 + .../ecosystem/huggingface/hfmodel.py | 11 +- .../huggingface/huggingface_datasets.py | 5 +- .../huggingface/huggingface_models.py | 41 +- .../huggingface/model_textclassification.py | 23 +- .../huggingface/model_textgeneration.py | 13 +- .../weave_query}/ecosystem/keras/__init__.py | 4 +- .../weave_query}/ecosystem/keras/model.py | 3 +- .../ecosystem/langchain/__init__.py | 4 +- .../weave_query}/ecosystem/langchain/lc.py | 15 +- .../weave_query}/ecosystem/langchain/util.py | 2 +- .../weave_query/ecosystem/lens/__init__.py | 1 + .../weave_query}/ecosystem/lens/lens.py | 3 +- .../weave_query/ecosystem/py/__init__.py | 1 + .../weave_query}/ecosystem/py/pydoc.py | 57 +- .../weave_query/ecosystem/pytorch/__init__.py | 1 + .../weave_query}/ecosystem/pytorch/model.py | 3 +- .../ecosystem/replicate/__init__.py | 4 +- .../weave_query}/ecosystem/replicate/rep.py | 3 +- .../weave_query}/ecosystem/root.py | 8 +- .../ecosystem/scenario/__init__.py | 21 +- .../weave_query}/ecosystem/shap/__init__.py | 4 +- .../weave_query}/ecosystem/shap/shap.py | 17 +- .../weave_query/ecosystem/shawn}/__init__.py | 4 +- .../ecosystem/shawn/petdataset.py | 7 +- .../weave_query}/ecosystem/shawn/scratch.py | 27 +- .../weave_query/ecosystem/sklearn/__init__.py | 1 + .../ecosystem/sklearn/datasets.py | 5 +- .../weave_query/ecosystem/slack/__init__.py | 2 + .../weave_query}/ecosystem/slack/panels.py | 25 +- .../weave_query}/ecosystem/slack/slack.py | 5 +- .../weave_query}/ecosystem/slack/slackapi.py | 0 .../ecosystem/slack/slackapi_readexport.py | 3 +- .../weave_query/ecosystem/slurm/__init__.py | 1 + .../weave_query}/ecosystem/slurm/ops.py | 27 +- .../weave_query/ecosystem/spacy}/__init__.py | 4 +- .../weave_query}/ecosystem/spacy/spacy.py | 23 +- .../test_notebook_ecosystem_executions.py | 4 +- .../ecosystem/torch_mnist_model_example.py | 11 +- .../ecosystem/torchvision/__init__.py | 1 + .../ecosystem/torchvision/datasets.py | 7 +- .../ecosystem/twitter}/__init__.py | 0 .../weave_query}/ecosystem/twitter/tweet.py | 3 +- .../weave_query/ecosystem/umap}/__init__.py | 4 +- .../weave_query}/ecosystem/umap/ops.py | 5 +- .../weave_query/ecosystem/wandb/__init__.py | 13 + .../ecosystem/wandb/gql_artifact_dag.py | 2 +- .../ecosystem/wandb/panel_distribution.py | 53 +- .../weave_query}/ecosystem/wandb/panel_geo.py | 59 +- .../ecosystem/wandb/panel_scatter.py | 55 +- .../ecosystem/wandb/panel_time_series.py | 83 +- .../weave_query}/ecosystem/wandb/run_chain.py | 15 +- .../wandb/test_panel_distribution.py | 7 +- .../ecosystem/wandb/wandb_objs.py | 59 +- .../ecosystem/wandb/weave_plotly.py | 9 +- .../weave_query/ecosystem/xgboost/__init__.py | 7 + .../weave_query}/ecosystem/xgboost/model.py | 3 +- .../weave_query}/engine_trace.py | 4 +- .../weave_query}/environment.py | 8 +- .../weave_query}/errors.py | 0 .../weave_query}/execute.py | 6 +- .../weave_query}/execute_fast.py | 6 +- .../weave_query}/file_base.py | 2 +- .../weave_query}/file_local.py | 2 +- .../weave_query}/file_util.py | 4 +- .../weave_query}/filesystem.py | 2 +- .../weave_query}/forward_graph.py | 4 +- .../weave_query}/frontend/autotrack.js | 0 .../weave_query}/frontend/autotrack.js.map | 0 .../weave_query}/frontend/build.sh | 0 .../weave_query}/frontend/bundle.sh | 0 .../frontend/consentAwareAnalyticsInjector.js | 0 .../weave_query}/frontend/core_version | 0 .../weave_query}/frontend/favicon.ico | Bin .../weave_query}/frontend/index.html | 0 .../weave_query}/frontend/jquery-3.6.0.min.js | 0 .../weave_query}/frontend/sa.min.js | 0 .../weave_query}/frontend/sha1.txt | 0 .../weave_query}/frontend/track-v1.js | 0 .../weave_query}/gql_json_cache.py | 0 .../weave_query}/gql_op_plugin.py | 4 +- .../weave_query}/gql_schema.py | 4 +- .../weave_query}/gql_to_weave.py | 6 +- .../weave_query}/graph.py | 12 +- .../weave_query}/graph_debug.py | 6 +- .../weave_query}/graph_mapper.py | 8 +- .../weave_query}/infer_types.py | 4 +- .../weave_query}/input_provider.py | 0 .../weave_query}/io_service.py | 2 +- .../weave_query}/language_autocall.py | 4 +- .../language_features}/__init__.py | 0 .../language_features/tagging}/__init__.py | 0 .../tagging/is_tag_getter.py | 8 +- .../tagging/make_tag_getter_op.py | 12 +- .../language_features/tagging/opdef_util.py | 6 +- .../tagging/process_opdef_output_type.py | 12 +- .../tagging/process_opdef_resolve_fn.py | 18 +- .../language_features/tagging/tag_store.py | 6 +- .../tagging/tagged_value_type.py | 10 +- .../tagging/tagged_value_type_helpers.py | 4 +- .../tagging/tagging_op_logic.py | 4 +- .../language_features/tagging/tagging_ops.py | 6 +- .../weave_query}/language_nullability.py | 8 +- .../weave => weave_query/weave_query}/logs.py | 2 +- .../weave_query}/make_type.py | 4 +- .../weave_query}/mappers.py | 4 +- .../weave_query}/mappers_arrow.py | 12 +- .../weave_query}/mappers_gql.py | 10 +- .../weave_query}/mappers_publisher.py | 20 +- .../weave_query}/mappers_python.py | 4 +- .../weave_query}/mappers_python_def.py | 16 +- .../weave_query}/mappers_weave.py | 6 +- .../weave => weave_query/weave_query}/memo.py | 2 +- .../weave_query}/monitoring/__init__.py | 4 +- .../weave_query}/monitoring/langchain.py | 4 +- .../weave_query}/monitoring/monitor.py | 6 +- .../monitoring/openai/__init__.py | 0 .../weave_query}/monitoring/openai/models.py | 4 +- .../weave_query}/monitoring/openai/openai.py | 6 +- .../weave_query}/monitoring/openai/util.py | 2 +- .../weave_query}/node_ref.py | 4 +- .../weave_query}/object_context.py | 10 +- .../weave_query}/object_type_ref_util.py | 4 +- .../weave_query}/op_aliases.py | 0 .../weave_query}/op_args.py | 4 +- .../weave_query}/op_def.py | 18 +- .../weave_query}/op_def_type.py | 8 +- .../weave_query}/op_execute.py | 0 .../weave_query}/op_policy.py | 0 .../weave => weave_query/weave_query}/ops.py | 0 weave_query/weave_query/ops_arrow/__init__.py | 12 + .../weave_query}/ops_arrow/arraylist_ops.py | 12 +- .../weave_query}/ops_arrow/boolean.py | 10 +- .../weave_query}/ops_arrow/convert_ops.py | 8 +- .../weave_query}/ops_arrow/date.py | 12 +- .../weave_query}/ops_arrow/dict.py | 24 +- .../weave_query}/ops_arrow/list_join.py | 20 +- .../weave_query}/ops_arrow/list_ops.py | 28 +- .../weave_query}/ops_arrow/list_range.py | 6 +- .../weave_query}/ops_arrow/number.py | 12 +- .../weave_query}/ops_arrow/obj.py | 8 +- weave_query/weave_query/ops_arrow/ops.py | 11 + .../weave_query}/ops_arrow/ref_ops.py | 12 +- .../weave_query}/ops_arrow/string.py | 12 +- .../weave_query}/ops_arrow/util.py | 8 +- .../weave_query}/ops_arrow/vectorize.py | 30 +- .../weave_query}/ops_domain/__init__.py | 2 +- .../ops_domain/artifact_alias_ops.py | 12 +- .../ops_domain/artifact_collection_ops.py | 12 +- .../ops_domain/artifact_membership_ops.py | 10 +- .../ops_domain/artifact_type_ops.py | 10 +- .../ops_domain/artifact_version_ops.py | 24 +- .../weave_query}/ops_domain/entity_ops.py | 12 +- .../weave_query}/ops_domain/org_ops.py | 6 +- .../weave_query}/ops_domain/project_ops.py | 16 +- .../ops_domain/repo_insight_ops.py | 12 +- .../weave_query}/ops_domain/report_ops.py | 12 +- .../ops_domain/run_history}/__init__.py | 0 .../ops_domain/run_history/context.py | 0 .../run_history/history_op_common.py | 32 +- .../run_history/run_history_v1_legacy_ops.py | 16 +- .../run_history_v2_parquet_media.py | 22 +- ...run_history_v3_parquet_stream_optimized.py | 28 +- .../weave_query}/ops_domain/run_ops.py | 22 +- .../weave_query}/ops_domain/run_queue_ops.py | 12 +- .../weave_query}/ops_domain/run_segment.py | 13 +- .../ops_domain/stream_table_ops.py | 12 +- .../weave_query}/ops_domain/table.py | 12 +- .../weave_query}/ops_domain/trace_tree.py | 10 +- .../weave_query}/ops_domain/user_ops.py | 12 +- .../ops_domain/wandb_domain_gql.py | 16 +- .../ops_domain/wb_domain_types.py | 6 +- .../weave_query}/ops_domain/wb_util.py | 30 +- .../weave_query}/ops_domain/wbgqlquery_op.py | 14 +- .../weave_query}/ops_domain/wbmedia.py | 14 +- .../weave_query}/ops_primitives/__init__.py | 2 +- .../ops_primitives/_dict_utils.py | 8 +- .../weave_query}/ops_primitives/any.py | 4 +- .../weave_query}/ops_primitives/artifacts.py | 8 +- .../weave_query}/ops_primitives/boolean.py | 8 +- .../weave_query}/ops_primitives/csv_.py | 4 +- .../weave_query}/ops_primitives/date.py | 4 +- .../weave_query}/ops_primitives/dict.py | 14 +- .../weave_query}/ops_primitives/file.py | 14 +- .../ops_primitives/file_artifact.py | 4 +- .../weave_query}/ops_primitives/file_local.py | 8 +- .../weave_query}/ops_primitives/geom.py | 2 +- .../weave_query}/ops_primitives/html.py | 4 +- .../weave_query}/ops_primitives/image.py | 4 +- .../weave_query}/ops_primitives/json_.py | 4 +- .../weave_query}/ops_primitives/list_.py | 24 +- .../ops_primitives/list_tag_getters.py | 4 +- .../weave_query}/ops_primitives/markdown.py | 4 +- .../weave_query}/ops_primitives/number.py | 6 +- .../weave_query}/ops_primitives/number_bin.py | 14 +- .../weave_query}/ops_primitives/obj.py | 6 +- .../weave_query}/ops_primitives/op_def.py | 8 +- .../weave_query}/ops_primitives/pandas_.py | 12 +- .../ops_primitives/projection_utils.py | 4 +- .../ops_primitives/random_junk.py | 6 +- .../weave_query}/ops_primitives/server.py | 4 +- .../weave_query}/ops_primitives/set_.py | 4 +- .../weave_query}/ops_primitives/sql.py | 10 +- .../weave_query}/ops_primitives/string.py | 4 +- .../weave_query}/ops_primitives/test_any.py | 6 +- .../weave_query}/ops_primitives/test_dict.py | 9 +- .../weave_query/ops_primitives/test_file.py | 9 + .../weave_query}/ops_primitives/test_image.py | 4 +- .../weave_query}/ops_primitives/test_list.py | 14 +- .../ops_primitives/test_list_range.py | 8 + .../ops_primitives/test_pandas.py | 6 +- .../weave_query}/ops_primitives/test_set.py | 5 +- .../weave_query}/ops_primitives/test_type.py | 7 +- .../ops_primitives/test_typeddict.py | 13 +- .../ops_primitives/timestamp_bin.py | 14 +- .../weave_query}/ops_primitives/type.py | 6 +- .../weave_query}/ops_primitives/weave_api.py | 10 +- .../weave_query}/panel.py | 10 +- .../weave_query}/panel_util.py | 6 +- weave_query/weave_query/panels/__init__.py | 70 + .../weave_query}/panels/bank.py | 2 +- .../weave_query}/panels/panel_auto.py | 5 +- .../weave_query}/panels/panel_basic.py | 5 +- .../weave_query}/panels/panel_board.py | 15 +- .../weave_query}/panels/panel_card.py | 5 +- .../weave_query}/panels/panel_color.py | 5 +- .../weave_query}/panels/panel_daterange.py | 5 +- .../weave_query}/panels/panel_domain.py | 5 +- .../weave_query}/panels/panel_dropdown.py | 7 +- .../weave_query}/panels/panel_each.py | 9 +- .../weave_query}/panels/panel_each_column.py | 7 +- .../weave_query/panels/panel_expression.py | 8 + .../weave_query}/panels/panel_facet.py | 25 +- .../weave_query}/panels/panel_facet_tabs.py | 9 +- .../panels/panel_filter_editor.py | 5 +- .../panels/panel_function_editor.py | 5 +- .../weave_query}/panels/panel_group.py | 13 +- .../panels/panel_group_panel_info.py | 0 .../panels/panel_grouping_editor.py | 5 +- .../weave_query}/panels/panel_histogram.py | 5 +- .../weave_query}/panels/panel_html.py | 5 +- .../weave_query}/panels/panel_labeled_item.py | 5 +- .../weave_query}/panels/panel_legacy.py | 5 +- .../weave_query}/panels/panel_markdown.py | 5 +- .../panels/panel_object_picker.py | 7 +- .../weave_query}/panels/panel_plot.py | 17 +- .../weave_query}/panels/panel_query.py | 13 +- .../weave_query}/panels/panel_sections.py | 9 +- .../weave_query}/panels/panel_select.py | 9 +- .../panels/panel_sidebarcontainer.py | 4 +- .../weave_query}/panels/panel_slider.py | 9 +- .../weave_query}/panels/panel_string.py | 5 +- .../panels/panel_string_editor.py | 5 +- .../weave_query}/panels/panel_table.py | 37 +- .../weave_query}/panels/panel_trace.py | 7 +- .../weave_query}/panels/panel_trace_span.py | 5 +- .../weave_query}/panels/panel_weavelink.py | 9 +- .../weave_query}/panels/table_state.py | 6 +- .../weave_query}/panels_py/__init__.py | 6 +- .../panels_py/generator_templates.py | 4 +- .../panels_py/instructions/panel_autoboard.md | 0 .../instructions/panel_llm_monitor.md | 0 .../instructions/panel_trace_monitor.md | 6 +- .../weave_query}/panels_py/panel_autoboard.py | 87 +- .../weave_query}/panels_py/panel_eval.py | 95 +- .../panels_py/panel_example_custom_board.py | 23 +- .../panels_py/panel_llm_monitor.py | 69 +- .../panels_py/panel_observability.py | 177 +- .../weave_query}/panels_py/panel_seedboard.py | 17 +- .../panels_py/panel_trace_monitor.py | 53 +- .../weave_query}/parallelism.py | 2 +- .../weave_query}/partial_object.py | 8 +- .../weave_query}/path_util.py | 2 +- .../weave_query}/propagate_gql_keys.py | 6 +- .../weave_query}/pyfunc_type_util.py | 6 +- .../weave_query}/ref_base.py | 10 +- .../weave_query}/ref_util.py | 8 +- .../weave_query}/registry_mem.py | 10 +- .../weave => weave_query/weave_query}/run.py | 0 .../weave_query}/run_streamtable_span.py | 8 +- .../weave_query}/runfiles_wandb.py | 8 +- .../weave => weave_query/weave_query}/runs.py | 2 +- .../weave_query}/serialize.py | 6 +- .../weave_query}/server.py | 8 +- .../weave_query}/server_error_handling.py | 4 +- .../weave_query}/server_interface.py | 0 .../weave => weave_query/weave_query}/show.py | 8 +- .../weave_query}/signal_handlers.py | 2 +- .../weave_query}/stitch.py | 8 +- .../weave_query}/storage.py | 12 +- .../weave_query}/stream_data_interfaces.py | 0 .../weave_query}/timestamp.py | 0 .../weave_query}/trace_legacy.py | 4 +- .../weave_query}/trace_local.py | 10 +- .../weave_query}/types_numpy.py | 2 +- .../weave => weave_query/weave_query}/uris.py | 2 +- .../weave => weave_query/weave_query}/urls.py | 2 +- .../weave_query}/usage_analytics.py | 2 +- .../weave => weave_query/weave_query}/util.py | 2 +- .../weave_query}/val_const.py | 2 +- .../weave_query}/value_or_error.py | 0 weave_query/weave_query/version.py | 1 + .../weave_query}/wandb_api.py | 8 +- .../weave_query}/wandb_client_api.py | 2 +- .../weave_query}/wandb_file_manager.py | 4 +- .../wandb_interface/wandb_artifact_pusher.py | 6 +- .../wandb_interface/wandb_lite_run.py | 4 +- .../wandb_interface/wandb_stream_table.py | 14 +- .../weave_query}/wandb_util.py | 6 +- .../weave_query}/weave_http.py | 2 +- .../weave_query}/weave_inspector.py | 6 +- .../weave_query}/weave_internal.py | 16 +- .../weave_query}/weave_pydantic.py | 2 +- .../weave_query}/weave_server.py | 14 +- .../weave_query}/weave_types.py | 26 +- .../weave_query}/weavejs_fixes.py | 4 +- .../weave_query}/weavify.py | 10 +- 743 files changed, 5106 insertions(+), 8394 deletions(-) delete mode 100644 integration_test/.gitignore delete mode 100644 integration_test/.prettierrc delete mode 100644 integration_test/README.md delete mode 100644 integration_test/cypress.config.js delete mode 100644 integration_test/cypress/.gitignore delete mode 100644 integration_test/cypress/e2e/interactive/blank.py delete mode 100644 integration_test/cypress/e2e/interactive/boardTemplateNotebookLinks.cy.ts delete mode 100644 integration_test/cypress/e2e/interactive/dashboard.cy.ts delete mode 100644 integration_test/cypress/e2e/interactive/distribution.cy.ts delete mode 100644 integration_test/cypress/e2e/interactive/distribution.py delete mode 100644 integration_test/cypress/e2e/interactive/plotboard.cy.ts delete mode 100644 integration_test/cypress/e2e/interactive/scatter.cy.ts delete mode 100644 integration_test/cypress/e2e/interactive/scatter.py delete mode 100644 integration_test/cypress/e2e/notebooks/README.md delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/AutoBoard.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/Closures.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/Monitor.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/MonitorPanelPlot.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/Mutations.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/Table Summary Panel.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/app/RunChain.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/app/beautiful_runs.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/app/scenario_compare.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/composite_histograms.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/dir_browsing.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/ecosystem.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/image_gen_craiyon.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/image_gen_ops.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/layout_panels.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/mnist_train.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/spacy_demo.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/table_data_passing.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/experimental/tag_search.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/get_started.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/notebooks.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/WB_API.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/basic_weave_types.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/confusion_matrix.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/control/Object Picker.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/control/Slider.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/create_ops.cydisabled.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/create_plots_ui_guide.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/layout/Each.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/layout/Group & LabeledItem.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/panels/plot/synced_axes.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/vis/Distribution.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/vis/Scatter.cy.ts delete mode 100644 integration_test/cypress/e2e/notebooks/reference/vis/derived_plots_from_tables.cy.ts delete mode 100644 integration_test/cypress/e2e/testlib.ts delete mode 100644 integration_test/cypress/fixtures/example.json delete mode 100644 integration_test/cypress/plugins/index.ts delete mode 100644 integration_test/cypress/support/commands.js delete mode 100644 integration_test/cypress/support/e2e.js delete mode 100644 integration_test/cypress/tsconfig.json delete mode 100644 integration_test/cypress_parallel.sh delete mode 100644 integration_test/package.json delete mode 100644 integration_test/yarn.lock delete mode 100644 mypy_weave_plugin.py delete mode 100644 weave/legacy/notebooks/Eval Board.ipynb delete mode 100644 weave/legacy/tests/test_monitoring.py delete mode 100644 weave/legacy/tests/test_monitoring_openai.py delete mode 100644 weave/legacy/tests/test_weave_api.py delete mode 100644 weave/legacy/weave/core_types/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/bertviz/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/craiyon/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/huggingface/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/lens/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/py/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/pytorch/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/shawn/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/sklearn/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/slack/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/slurm/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/torchvision/__init__.py delete mode 100644 weave/legacy/weave/ecosystem/wandb/__init__.py delete mode 100644 weave/legacy/weave/language_features/tagging/__init__.py delete mode 100644 weave/legacy/weave/ops_arrow/__init__.py delete mode 100644 weave/legacy/weave/ops_arrow/ops.py delete mode 100644 weave/legacy/weave/ops_domain/run_history/__init__.py delete mode 100644 weave/legacy/weave/ops_primitives/test_file.py delete mode 100644 weave/legacy/weave/ops_primitives/test_list_range.py delete mode 100644 weave/legacy/weave/panels/__init__.py delete mode 100644 weave/legacy/weave/panels/panel_expression.py rename {weave/legacy => weave_query}/.devcontainer/devcontainer.json (100%) rename {weave/legacy => weave_query}/.devcontainer/postCreateCommand.sh (100%) rename {weave/legacy => weave_query}/.dockerignore (100%) rename {weave/legacy => weave_query}/.github/workflows/mutations-perf.yaml (100%) create mode 100644 weave_query/.graphqlrc rename {weave/legacy => weave_query}/.vscode/settings.json (100%) rename {weave/legacy => weave_query}/Dockerfile (97%) rename {weave/legacy => weave_query}/Dockerfile.ci.test (91%) rename {weave/legacy => weave_query}/Makefile (100%) rename {weave/legacy => weave_query}/conftest.py (55%) rename {weave/legacy => weave_query}/docs/dispatching_and_resolution.md (100%) rename {weave/legacy => weave_query}/examples/apps/explore_embeddings.ipynb (99%) rename {weave/legacy => weave_query}/examples/experimental/AutoBoard.ipynb (81%) rename {weave/legacy => weave_query}/examples/experimental/Closures.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/Monitor.ipynb (76%) rename {weave/legacy => weave_query}/examples/experimental/MonitorPanelPlot.ipynb (67%) rename {weave/legacy => weave_query}/examples/experimental/Mutations.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb (98%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb (98%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/StreamTable.md (98%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/app_util.py (100%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/model_util.py (100%) rename {weave/legacy => weave_query}/examples/experimental/ProductionMonitoring/stream_table_api.ipynb (99%) rename {weave/legacy => weave_query}/examples/experimental/Table Summary Panel.ipynb (79%) rename {weave/legacy => weave_query}/examples/experimental/app/Embeddings.ipynb (82%) rename {weave/legacy => weave_query}/examples/experimental/app/RunChain.ipynb (81%) rename {weave/legacy => weave_query}/examples/experimental/app/beautiful_runs.ipynb (84%) rename {weave/legacy => weave_query}/examples/experimental/app/scenario_compare.ipynb (74%) rename {weave/legacy => weave_query}/examples/experimental/bert_viz.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/composite_histograms.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/dir_browsing.ipynb (83%) rename {weave/legacy => weave_query}/examples/experimental/ecosystem.ipynb (86%) rename {weave/legacy => weave_query}/examples/experimental/huggingface_datasets.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/huggingface_models.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/image_gen_craiyon.ipynb (90%) rename {weave/legacy => weave_query}/examples/experimental/image_gen_ops.ipynb (93%) rename {weave/legacy => weave_query}/examples/experimental/layout_panels.ipynb (99%) rename {weave/legacy => weave_query}/examples/experimental/llm_monitor_helper.ipynb (99%) rename {weave/legacy => weave_query}/examples/experimental/mnist_train.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/object_version_compare.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/old_openai_monitoring.ipynb (97%) rename {weave/legacy => weave_query}/examples/experimental/openai_monitoring.ipynb (93%) rename {weave/legacy => weave_query}/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/prompts_dev/synthetic_openai_data.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/00 Tutorial - Data versioning.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Composable Python panels.ipynb (82%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Confusion Matrix.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Custom ops.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Diffusion explore 2.ipynb (68%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Diffusion explore.ipynb (74%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Diffusion story.ipynb (84%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Docbot.ipynb (87%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Hack demo.ipynb (92%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/KerasModel.ipynb (98%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/LLMs Via Weave.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Model Cards.ipynb (97%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Models.ipynb (89%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Monitor2.ipynb (87%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Monitor3.ipynb (86%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Multiple Y Axes.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Mutation - Code Editor.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Mutation.ipynb (93%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Object browsing.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/OpenAI.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Performance profiling.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb (96%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Shap.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/StreamTables.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/TimeSeries.ipynb (90%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Untitled.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Vectorizing.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/WB data.ipynb (74%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/Weave geo data.ipynb (91%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/art_explore.ipynb (70%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/assets/op_preview_via_cursor.png (100%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/branching_runs.ipynb (89%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/evaluation notebook.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/image_gen_replicate.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/langchain docbot.ipynb (90%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/plot_selection.ipynb (83%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/slurm.ipynb (95%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/wandbot from scratch.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/weave_engine_tracing.ipynb (74%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/weave_scifi.ipynb (71%) rename {weave/legacy => weave_query}/examples/experimental/skip_test/weave_walkthrough.ipynb (100%) rename {weave/legacy => weave_query}/examples/experimental/spacy_demo.ipynb (94%) rename {weave/legacy => weave_query}/examples/experimental/table_data_passing.ipynb (77%) rename {weave/legacy => weave_query}/examples/experimental/tag_search.ipynb (87%) rename {weave/legacy => weave_query}/examples/get_started.ipynb (99%) rename {weave/legacy => weave_query}/examples/reference/WB_API.ipynb (66%) rename {weave/legacy => weave_query}/examples/reference/basic_weave_types.ipynb (100%) rename {weave/legacy => weave_query}/examples/reference/confusion_matrix.ipynb (95%) rename {weave/legacy => weave_query}/examples/reference/control/Object Picker.ipynb (71%) rename {weave/legacy => weave_query}/examples/reference/control/Slider.ipynb (97%) rename {weave/legacy => weave_query}/examples/reference/create_ops.ipynb (100%) rename {weave/legacy => weave_query}/examples/reference/create_plots_ui_guide.ipynb (99%) rename {weave/legacy => weave_query}/examples/reference/layout/Each.ipynb (93%) rename {weave/legacy => weave_query}/examples/reference/layout/Group & LabeledItem.ipynb (54%) rename {weave/legacy => weave_query}/examples/reference/markdown.ipynb (80%) rename {weave/legacy => weave_query}/examples/reference/panels/plot/synced_axes.ipynb (85%) rename {weave/legacy => weave_query}/examples/reference/vis/Distribution.ipynb (96%) rename {weave/legacy => weave_query}/examples/reference/vis/Scatter.ipynb (84%) rename {weave/legacy => weave_query}/examples/reference/vis/derived_plots_from_tables.ipynb (80%) rename {weave/legacy => weave_query}/internal_tools/Module deps viz.ipynb (100%) rename {weave/legacy => weave_query}/internal_tools/generate_notebook_tests.py (100%) rename {weave/legacy => weave_query}/make_class_diagram.sh (100%) rename mypy.ini => weave_query/mypy.ini (100%) rename {weave/legacy => weave_query}/notebooks/Embeddings.ipynb (100%) rename {weave/legacy => weave_query}/notebooks/Eval Board Syn.ipynb (80%) create mode 100644 weave_query/notebooks/Eval Board.ipynb rename {weave/legacy => weave_query}/notebooks/Text Extraction Eval.ipynb (99%) rename {weave/legacy => weave_query}/perf_notebooks/case_when v if_then_else.ipynb (100%) rename {weave/legacy => weave_query}/perf_notebooks/pyarrow joinall.ipynb (100%) create mode 100644 weave_query/pyproject.toml create mode 100644 weave_query/pytest.ini rename requirements.legacy.datadog.txt => weave_query/requirements.legacy.datadog.txt (100%) rename requirements.legacy.dev.txt => weave_query/requirements.legacy.dev.txt (100%) rename requirements.legacy.ecosystem.txt => weave_query/requirements.legacy.ecosystem.txt (100%) rename requirements.legacy.engine.txt => weave_query/requirements.legacy.engine.txt (100%) rename requirements.legacy.test.txt => weave_query/requirements.legacy.test.txt (97%) rename requirements.legacy.txt => weave_query/requirements.legacy.txt (100%) rename {weave/legacy => weave_query}/scripts/clear_cache.py (93%) rename {weave/legacy => weave_query}/scripts/jupyter_dev.sh (100%) rename {weave/legacy => weave_query}/scripts/pytest_parallel.sh (100%) rename {weave/legacy => weave_query}/scripts/syndata.py (97%) rename {weave/legacy => weave_query}/scripts/syndata_mon.py (98%) rename {weave/legacy => weave_query}/scripts/wandb_artifact_perf.py (98%) rename {weave/legacy => weave_query}/supervisord.conf (100%) rename {weave => weave_query}/testdata/cereal.csv (100%) rename {weave => weave_query}/testdata/cereal.db (100%) rename {weave => weave_query}/testdata/chinook.db (100%) rename {weave => weave_query}/testdata/obj.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/media/images/8f65e54dc684f7675aec.png (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/test_results.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/weird_table.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/table.joined-table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_1.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_2.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/table.partitioned-table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_1.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_2.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_3.table.json (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test.parquet (100%) rename {weave => weave_query}/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test_media.parquet (100%) rename {weave => weave_query}/testdata/spring-lamb.jpg (100%) rename {weave => weave_query}/testdata/sqlite_cereal.sql (100%) rename {weave => weave_query}/testdata/sqlite_make_cereal.sh (100%) rename {weave => weave_query}/testdata/t8.shakespeare.txt (100%) rename {weave => weave_query}/testdata/test_dir/b.txt (100%) rename {weave => weave_query}/testdata/test_dir/c.txt (100%) rename {weave => weave_query}/testdata/test_dir/sub_dir/a.txt (100%) rename {weave => weave_query}/testdata/train.py (100%) rename {weave/legacy => weave_query/tests}/__init__.py (100%) rename {weave/legacy => weave_query}/tests/example_wb_unit_test.py (91%) rename {weave => weave_query}/tests/fixture_fakewandb.py (98%) rename {weave/legacy => weave_query}/tests/test_access.py (90%) rename {weave/legacy => weave_query}/tests/test_api.py (95%) rename {weave/legacy => weave_query}/tests/test_arrow.py (98%) rename {weave/legacy => weave_query}/tests/test_arrow_awl.py (91%) rename {weave/legacy => weave_query}/tests/test_arrow_concat.py (98%) rename {weave/legacy => weave_query}/tests/test_arrow_perf.py (86%) rename {weave/legacy => weave_query}/tests/test_arrow_topy.py (97%) rename {weave/legacy => weave_query}/tests/test_arrow_vectorizer.py (98%) rename {weave/legacy => weave_query}/tests/test_artifact.py (94%) rename {weave/legacy => weave_query}/tests/test_artifact_metadata.py (91%) rename {weave/legacy => weave_query}/tests/test_assign_perf.py (96%) rename {weave/legacy => weave_query}/tests/test_assignment.py (94%) rename {weave/legacy => weave_query}/tests/test_async.py (97%) rename {weave/legacy => weave_query}/tests/test_async_queue.py (94%) rename {weave/legacy => weave_query}/tests/test_basic_ops.py (95%) rename {weave/legacy => weave_query}/tests/test_box.py (79%) rename {weave/legacy => weave_query}/tests/test_cache.py (98%) rename {weave/legacy => weave_query}/tests/test_codify.py (70%) rename {weave/legacy => weave_query}/tests/test_compile.py (87%) rename {weave/legacy => weave_query}/tests/test_complex_calls.py (84%) rename {weave/legacy => weave_query}/tests/test_cond.py (68%) rename {weave/legacy => weave_query}/tests/test_const_type_mapper.py (84%) rename {weave/legacy => weave_query}/tests/test_custom_types.py (89%) rename {weave/legacy => weave_query}/tests/test_datetime_timestamp.py (93%) rename {weave/legacy => weave_query}/tests/test_decorator_type.py (96%) rename {weave/legacy => weave_query}/tests/test_decorators.py (91%) rename {weave/legacy => weave_query}/tests/test_derive_op.py (65%) rename {weave/legacy => weave_query}/tests/test_dispatch.py (78%) rename {weave/legacy => weave_query}/tests/test_examples.py (88%) rename {weave/legacy => weave_query}/tests/test_execute.py (92%) rename {weave/legacy => weave_query}/tests/test_execute_fast.py (81%) rename {weave/legacy => weave_query}/tests/test_execution_graphs.py (95%) rename {weave/legacy => weave_query}/tests/test_file.py (81%) rename {weave/legacy => weave_query}/tests/test_filesystem.py (95%) rename {weave/legacy => weave_query}/tests/test_gql_to_weave.py (99%) rename {weave/legacy => weave_query}/tests/test_graph.py (95%) rename {weave/legacy => weave_query}/tests/test_graph_debug.py (96%) rename {weave/legacy => weave_query}/tests/test_helpers.py (100%) rename {weave/legacy => weave_query}/tests/test_hypothesis.py (97%) rename {weave/legacy => weave_query}/tests/test_index.py (76%) rename {weave/legacy => weave_query}/tests/test_infer_types.py (87%) rename {weave/legacy => weave_query}/tests/test_io_service.py (96%) rename {weave/legacy => weave_query}/tests/test_join.py (88%) rename {weave/legacy => weave_query}/tests/test_js_compat.py (99%) rename {weave/legacy => weave_query}/tests/test_language.py (94%) rename {weave/legacy => weave_query}/tests/test_language_autocall.py (94%) rename {weave/legacy => weave_query}/tests/test_levenshtein.py (88%) rename {weave/legacy => weave_query}/tests/test_list_arrow_compat.py (97%) rename {weave/legacy => weave_query}/tests/test_list_indexing.py (94%) rename {weave/legacy => weave_query}/tests/test_logging.py (97%) rename {weave/legacy => weave_query}/tests/test_mappability.py (84%) rename {weave/legacy => weave_query}/tests/test_mappers_arrow.py (96%) rename {weave/legacy => weave_query}/tests/test_mappers_python.py (93%) rename {weave/legacy => weave_query}/tests/test_media.py (98%) rename {weave/legacy => weave_query}/tests/test_media_user.py (84%) rename {weave/legacy => weave_query}/tests/test_mutation2.py (61%) rename {weave/legacy => weave_query}/tests/test_mutations.py (94%) rename {weave/legacy => weave_query}/tests/test_node_ref.py (76%) rename {weave/legacy => weave_query}/tests/test_nullability.py (94%) rename {weave/legacy => weave_query}/tests/test_number_bin.py (62%) rename {weave/legacy => weave_query}/tests/test_numpy.py (96%) rename {weave/legacy => weave_query}/tests/test_op.py (96%) rename {weave/legacy => weave_query}/tests/test_op_behaviors.py (98%) rename {weave/legacy => weave_query}/tests/test_op_coverage.py (99%) rename {weave/legacy => weave_query}/tests/test_op_def.py (92%) rename {weave/legacy => weave_query}/tests/test_op_def_data.json (100%) rename {weave/legacy => weave_query}/tests/test_op_def_type.py (89%) rename {weave/legacy => weave_query}/tests/test_op_dispatching.py (93%) rename {weave/legacy => weave_query}/tests/test_op_serialization.py (91%) rename {weave/legacy => weave_query}/tests/test_panel_coverage.py (95%) rename {weave/legacy => weave_query}/tests/test_panel_time_series.py (74%) rename {weave/legacy => weave_query}/tests/test_panels.py (78%) rename {weave/legacy => weave_query}/tests/test_partial_object.py (98%) rename {weave/legacy => weave_query}/tests/test_plot.py (98%) rename {weave/legacy => weave_query}/tests/test_projection_timeout.py (87%) rename {weave/legacy => weave_query}/tests/test_publish_flow.py (90%) rename {weave/legacy => weave_query}/tests/test_pydantic.py (56%) rename {weave/legacy => weave_query}/tests/test_ref_tracking.py (90%) rename {weave/legacy => weave_query}/tests/test_refs.py (94%) rename {weave/legacy => weave_query}/tests/test_relpath_no_syscalls.py (97%) rename {weave/legacy => weave_query}/tests/test_run_segment.py (98%) rename {weave/legacy => weave_query}/tests/test_serialize.py (94%) rename {weave/legacy => weave_query}/tests/test_server.py (83%) rename {weave/legacy => weave_query}/tests/test_show.py (90%) rename {weave/legacy => weave_query}/tests/test_stitch.py (86%) rename {weave/legacy => weave_query}/tests/test_storage.py (97%) rename {weave/legacy => weave_query}/tests/test_stream_table.py (89%) rename {weave/legacy => weave_query}/tests/test_table_ops.py (97%) rename {weave/legacy => weave_query}/tests/test_tagging.py (95%) rename {weave/legacy => weave_query}/tests/test_templates.py (83%) rename {weave/legacy => weave_query}/tests/test_timestamp_bin.py (83%) rename {weave/legacy => weave_query}/tests/test_trace.py (84%) rename {weave/legacy => weave_query}/tests/test_typeddict_notrequired.py (87%) rename {weave/legacy => weave_query}/tests/test_uris.py (91%) rename {weave/legacy => weave_query}/tests/test_wb.py (98%) rename {weave/legacy => weave_query}/tests/test_wb_data_types.py (95%) rename {weave/legacy => weave_query}/tests/test_wb_domain_ops.py (98%) rename {weave/legacy => weave_query}/tests/test_wb_domain_types.py (88%) rename {weave/legacy => weave_query}/tests/test_wb_end_to_end.py (83%) rename {weave/legacy => weave_query}/tests/test_wb_history_loading_compatability.py (96%) rename {weave/legacy => weave_query}/tests/test_wb_stream_table.py (91%) rename {weave/legacy => weave_query}/tests/test_wb_tables.py (88%) create mode 100644 weave_query/tests/test_weave_api.py rename {weave/legacy => weave_query}/tests/test_weave_types.py (83%) rename {weave/legacy => weave_query}/tests/test_weavejs_fixes.py (96%) rename {weave/legacy => weave_query}/tests/test_weavify.py (92%) rename {weave/legacy => weave_query}/tests/test_with_columns.py (96%) rename {weave/legacy/tests => weave_query/tests/util}/__init__.py (100%) rename {weave/legacy => weave_query}/tests/util/concrete_tagged_value.py (94%) rename {weave/legacy => weave_query}/tests/util/geom.py (88%) rename {weave/legacy => weave_query}/tests/util/list_arrow_test_helpers.py (82%) rename {weave/legacy => weave_query}/tests/util/op_specs.py (98%) rename {weave/legacy => weave_query}/tests/util/tag_test_util.py (70%) rename {weave/legacy => weave_query}/tests/util/weavejs_ops.py (91%) create mode 100644 weave_query/tests/wandb_system_tests_conftest.py create mode 100644 weave_query/wb_schema.gql create mode 100644 weave_query/weave_query/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/_dict_utils.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/api.py (79%) rename {weave/legacy/tests/util => weave_query/weave_query/arrow}/__init__.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/arrow.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/arrow_tags.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/concat.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/constructors.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/convert.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/arrow/list_.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/arrow_util.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/artifact_base.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/artifact_fs.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/artifact_local.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/artifact_mem.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/artifact_wandb.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/async_demo.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/async_map.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/async_queue.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/box.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/cache.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/client.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/client_interface.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/codifiable_value_mixin.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/codify.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/compile.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/compile_domain.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/compile_table.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/context.py (88%) rename {weave/legacy/weave => weave_query/weave_query}/context_state.py (98%) create mode 100644 weave_query/weave_query/core_types/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/core_types/stream_table_type.py (78%) rename {weave/legacy/weave => weave_query/weave_query}/debug.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/debug_compile.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/debug_types.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_arrow_op.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_class.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_mutation.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_op.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_type.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/decorator_type.pyi (100%) rename {weave/legacy/weave => weave_query/weave_query}/decorators.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/derive_op.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/dispatch.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/eager.py (93%) create mode 100644 weave_query/weave_query/ecosystem/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/all.py (90%) create mode 100644 weave_query/weave_query/ecosystem/bertviz/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/bertviz/panels.py (83%) create mode 100644 weave_query/weave_query/ecosystem/craiyon/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/craiyon/ops.py (93%) rename {weave/legacy/weave/ecosystem/umap => weave_query/weave_query/ecosystem/example}/__init__.py (74%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/example/ops.py (76%) rename {weave/legacy/weave/ecosystem/example => weave_query/weave_query/ecosystem/hdbscan}/__init__.py (73%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/hdbscan/ops.py (90%) create mode 100644 weave_query/weave_query/ecosystem/huggingface/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/huggingface/hfmodel.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/huggingface/huggingface_datasets.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/huggingface/huggingface_models.py (77%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/huggingface/model_textclassification.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/huggingface/model_textgeneration.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/keras/__init__.py (51%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/keras/model.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/langchain/__init__.py (67%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/langchain/lc.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/langchain/util.py (99%) create mode 100644 weave_query/weave_query/ecosystem/lens/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/lens/lens.py (98%) create mode 100644 weave_query/weave_query/ecosystem/py/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/py/pydoc.py (75%) create mode 100644 weave_query/weave_query/ecosystem/pytorch/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/pytorch/model.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/replicate/__init__.py (57%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/replicate/rep.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/root.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/scenario/__init__.py (78%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/shap/__init__.py (52%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/shap/shap.py (82%) rename {weave/legacy/weave/ecosystem/spacy => weave_query/weave_query/ecosystem/shawn}/__init__.py (51%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/shawn/petdataset.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/shawn/scratch.py (68%) create mode 100644 weave_query/weave_query/ecosystem/sklearn/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/sklearn/datasets.py (74%) create mode 100644 weave_query/weave_query/ecosystem/slack/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/slack/panels.py (72%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/slack/slack.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/slack/slackapi.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/slack/slackapi_readexport.py (94%) create mode 100644 weave_query/weave_query/ecosystem/slurm/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/slurm/ops.py (78%) rename {weave/legacy/weave/ecosystem/xgboost => weave_query/weave_query/ecosystem/spacy}/__init__.py (51%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/spacy/spacy.py (72%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/test_notebook_ecosystem_executions.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/torch_mnist_model_example.py (93%) create mode 100644 weave_query/weave_query/ecosystem/torchvision/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/torchvision/datasets.py (97%) rename {weave/legacy/weave => weave_query/weave_query/ecosystem/twitter}/__init__.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/twitter/tweet.py (95%) rename {weave/legacy/weave/ecosystem/hdbscan => weave_query/weave_query/ecosystem/umap}/__init__.py (73%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/umap/ops.py (93%) create mode 100644 weave_query/weave_query/ecosystem/wandb/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/gql_artifact_dag.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/panel_distribution.py (75%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/panel_geo.py (76%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/panel_scatter.py (65%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/panel_time_series.py (79%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/run_chain.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/test_panel_distribution.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/wandb_objs.py (72%) rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/wandb/weave_plotly.py (97%) create mode 100644 weave_query/weave_query/ecosystem/xgboost/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ecosystem/xgboost/model.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/engine_trace.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/environment.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/errors.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/execute.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/execute_fast.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/file_base.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/file_local.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/file_util.py (88%) rename {weave/legacy/weave => weave_query/weave_query}/filesystem.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/forward_graph.py (98%) rename {weave => weave_query/weave_query}/frontend/autotrack.js (100%) rename {weave => weave_query/weave_query}/frontend/autotrack.js.map (100%) rename {weave => weave_query/weave_query}/frontend/build.sh (100%) rename {weave => weave_query/weave_query}/frontend/bundle.sh (100%) rename {weave => weave_query/weave_query}/frontend/consentAwareAnalyticsInjector.js (100%) rename {weave => weave_query/weave_query}/frontend/core_version (100%) rename {weave => weave_query/weave_query}/frontend/favicon.ico (100%) rename {weave => weave_query/weave_query}/frontend/index.html (100%) rename {weave => weave_query/weave_query}/frontend/jquery-3.6.0.min.js (100%) rename {weave => weave_query/weave_query}/frontend/sa.min.js (100%) rename {weave => weave_query/weave_query}/frontend/sha1.txt (100%) rename {weave => weave_query/weave_query}/frontend/track-v1.js (100%) rename {weave/legacy/weave => weave_query/weave_query}/gql_json_cache.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/gql_op_plugin.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/gql_schema.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/gql_to_weave.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/graph.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/graph_debug.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/graph_mapper.py (75%) rename {weave/legacy/weave => weave_query/weave_query}/infer_types.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/input_provider.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/io_service.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/language_autocall.py (93%) rename {weave/legacy/weave/arrow => weave_query/weave_query/language_features}/__init__.py (100%) rename {weave/legacy/weave/ecosystem/twitter => weave_query/weave_query/language_features/tagging}/__init__.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/is_tag_getter.py (84%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/make_tag_getter_op.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/opdef_util.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/process_opdef_output_type.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/process_opdef_resolve_fn.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/tag_store.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/tagged_value_type.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/tagged_value_type_helpers.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/tagging_op_logic.py (86%) rename {weave/legacy/weave => weave_query/weave_query}/language_features/tagging/tagging_ops.py (84%) rename {weave/legacy/weave => weave_query/weave_query}/language_nullability.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/logs.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/make_type.py (81%) rename {weave/legacy/weave => weave_query/weave_query}/mappers.py (81%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_arrow.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_gql.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_publisher.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_python.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_python_def.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/mappers_weave.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/memo.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/__init__.py (58%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/langchain.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/monitor.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/openai/__init__.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/openai/models.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/openai/openai.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/monitoring/openai/util.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/node_ref.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/object_context.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/object_type_ref_util.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/op_aliases.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/op_args.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/op_def.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/op_def_type.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/op_execute.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/op_policy.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/ops.py (100%) create mode 100644 weave_query/weave_query/ops_arrow/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/arraylist_ops.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/boolean.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/convert_ops.py (71%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/date.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/dict.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/list_join.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/list_ops.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/list_range.py (61%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/number.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/obj.py (72%) create mode 100644 weave_query/weave_query/ops_arrow/ops.py rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/ref_ops.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/string.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/util.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/ops_arrow/vectorize.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/__init__.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/artifact_alias_ops.py (61%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/artifact_collection_ops.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/artifact_membership_ops.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/artifact_type_ops.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/artifact_version_ops.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/entity_ops.py (82%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/org_ops.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/project_ops.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/repo_insight_ops.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/report_ops.py (91%) rename {weave/legacy/weave/language_features => weave_query/weave_query/ops_domain/run_history}/__init__.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_history/context.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_history/history_op_common.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_history/run_history_v1_legacy_ops.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_history/run_history_v2_parquet_media.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_ops.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_queue_ops.py (51%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/run_segment.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/stream_table_ops.py (68%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/table.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/trace_tree.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/user_ops.py (77%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/wandb_domain_gql.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/wb_domain_types.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/wb_util.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/wbgqlquery_op.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/ops_domain/wbmedia.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/__init__.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/_dict_utils.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/any.py (61%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/artifacts.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/boolean.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/csv_.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/date.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/dict.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/file.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/file_artifact.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/file_local.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/geom.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/html.py (82%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/image.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/json_.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/list_.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/list_tag_getters.py (74%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/markdown.py (82%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/number.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/number_bin.py (81%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/obj.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/op_def.py (68%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/pandas_.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/projection_utils.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/random_junk.py (82%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/server.py (58%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/set_.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/sql.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/string.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_any.py (73%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_dict.py (78%) create mode 100644 weave_query/weave_query/ops_primitives/test_file.py rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_image.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_list.py (95%) create mode 100644 weave_query/weave_query/ops_primitives/test_list_range.py rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_pandas.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_set.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_type.py (75%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/test_typeddict.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/timestamp_bin.py (86%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/type.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/ops_primitives/weave_api.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/panel.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/panel_util.py (80%) create mode 100644 weave_query/weave_query/panels/__init__.py rename {weave/legacy/weave => weave_query/weave_query}/panels/bank.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_auto.py (60%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_basic.py (71%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_board.py (91%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_card.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_color.py (71%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_daterange.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_domain.py (80%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_dropdown.py (86%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_each.py (80%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_each_column.py (80%) create mode 100644 weave_query/weave_query/panels/panel_expression.py rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_facet.py (86%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_facet_tabs.py (70%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_filter_editor.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_function_editor.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_group.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_group_panel_info.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_grouping_editor.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_histogram.py (73%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_html.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_labeled_item.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_legacy.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_markdown.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_object_picker.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_plot.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_query.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_sections.py (70%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_select.py (83%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_sidebarcontainer.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_slider.py (82%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_string.py (89%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_string_editor.py (67%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_table.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_trace.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_trace_span.py (72%) rename {weave/legacy/weave => weave_query/weave_query}/panels/panel_weavelink.py (87%) rename {weave/legacy/weave => weave_query/weave_query}/panels/table_state.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/__init__.py (64%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/generator_templates.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/instructions/panel_autoboard.md (100%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/instructions/panel_llm_monitor.md (100%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/instructions/panel_trace_monitor.md (93%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_autoboard.py (84%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_eval.py (66%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_example_custom_board.py (76%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_llm_monitor.py (85%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_observability.py (81%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_seedboard.py (58%) rename {weave/legacy/weave => weave_query/weave_query}/panels_py/panel_trace_monitor.py (81%) rename {weave/legacy/weave => weave_query/weave_query}/parallelism.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/partial_object.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/path_util.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/propagate_gql_keys.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/pyfunc_type_util.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/ref_base.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/ref_util.py (94%) rename {weave/legacy/weave => weave_query/weave_query}/registry_mem.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/run.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/run_streamtable_span.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/runfiles_wandb.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/runs.py (92%) rename {weave/legacy/weave => weave_query/weave_query}/serialize.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/server.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/server_error_handling.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/server_interface.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/show.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/signal_handlers.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/stitch.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/storage.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/stream_data_interfaces.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/timestamp.py (100%) rename {weave/legacy/weave => weave_query/weave_query}/trace_legacy.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/trace_local.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/types_numpy.py (96%) rename {weave/legacy/weave => weave_query/weave_query}/uris.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/urls.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/usage_analytics.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/util.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/val_const.py (90%) rename {weave/legacy/weave => weave_query/weave_query}/value_or_error.py (100%) create mode 100644 weave_query/weave_query/version.py rename {weave/legacy/weave => weave_query/weave_query}/wandb_api.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_client_api.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_file_manager.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_interface/wandb_artifact_pusher.py (95%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_interface/wandb_lite_run.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_interface/wandb_stream_table.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/wandb_util.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/weave_http.py (98%) rename {weave/legacy/weave => weave_query/weave_query}/weave_inspector.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/weave_internal.py (93%) rename {weave/legacy/weave => weave_query/weave_query}/weave_pydantic.py (95%) rename {weave => weave_query/weave_query}/weave_server.py (97%) rename {weave/legacy/weave => weave_query/weave_query}/weave_types.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/weavejs_fixes.py (99%) rename {weave/legacy/weave => weave_query/weave_query}/weavify.py (93%) diff --git a/.github/workflows/test.yaml b/.github/workflows/test.yaml index 24fd4386c7f..76daabaab03 100644 --- a/.github/workflows/test.yaml +++ b/.github/workflows/test.yaml @@ -36,7 +36,7 @@ jobs: - name: Prune docker cache run: docker system prune -f - name: Build legacy (query sevice) unit test image - run: python3 weave/docker/docker_build.py build_deps weave-test-python-query-service builder . weave/legacy/Dockerfile.ci.test + run: python3 weave/docker/docker_build.py build_deps weave-test-python-query-service builder . weave_query/Dockerfile.ci.test test-query-service: name: Legacy (Query Service) Python unit tests @@ -82,15 +82,13 @@ jobs: WEAVE_SERVER_DISABLE_ECOSYSTEM: 1 run: | source /root/venv/bin/activate && \ - pip install 'dspy-ai==2.4.13' && \ - pip install pydantic -U && \ - cd weave && \ + cd weave_query && \ pytest \ --job-num=${{ matrix.job_num }} \ --timeout=90 \ --ddtrace \ --durations=5 \ - ./legacy + . test-query-service-matrix-check: # This job does nothing and is only used for the branch protection if: always() diff --git a/.pre-commit-config.yaml b/.pre-commit-config.yaml index db50b49ac75..265bbce2136 100644 --- a/.pre-commit-config.yaml +++ b/.pre-commit-config.yaml @@ -12,13 +12,15 @@ repos: - id: ruff-format types_or: [python, pyi, jupyter] - repo: https://github.com/pre-commit/mirrors-mypy - rev: "v1.10.0" + rev: 'v1.10.0' hooks: - id: mypy additional_dependencies: [types-pkg-resources==0.1.3, types-all, wandb>=0.15.5] # You have to exclude in 3 places. 1) here. 2) mypi.ini exclude, 3) follow_imports = skip for each module in mypy.ini - exclude: (.*pyi$)|(weave/legacy)|(weave/tests) + # exclude: (.*pyi$)|(weave/legacy)|(weave/tests) + args: ['--config-file=pyproject.toml'] + exclude: (.*pyi$)|(weave_query)|(weave/tests)|(weave/trace_server/tests)|(weave/conftest.py)|(weave/trace/tests)|(integration_test)|(weave/tests/trace)|(weave/conftest.py)|(weave/trace_server/tests)|(examples)|(weave/integrations)|(weave/docker) # This is legacy Weave when we were building a notebook product - should be removed - repo: local hooks: diff --git a/integration_test/.gitignore b/integration_test/.gitignore deleted file mode 100644 index 3c3629e647f..00000000000 --- a/integration_test/.gitignore +++ /dev/null @@ -1 +0,0 @@ -node_modules diff --git a/integration_test/.prettierrc b/integration_test/.prettierrc deleted file mode 100644 index 11e710376ab..00000000000 --- a/integration_test/.prettierrc +++ /dev/null @@ -1,9 +0,0 @@ -{ - "parser": "typescript", - "trailingComma": "es5", - "singleQuote": true, - "bracketSpacing": false, - "jsxBracketSameLine": true, - "tabWidth": 2, - "arrowParens": "avoid" -} diff --git a/integration_test/README.md b/integration_test/README.md deleted file mode 100644 index 77c6eab53db..00000000000 --- a/integration_test/README.md +++ /dev/null @@ -1,21 +0,0 @@ -# Running in devmode - -Start the weave server and frontend dev server with -cd .. && make integration - -Start cypress with -yarn && yarn dev - -# Running against built assets - -Build the latest frontend with - -cd .. && ./build_frontend.sh - -Start cypress with - -yarn && yarn run cypress open - -Start the weave server with - -bash scripts/weave_server_test.sh diff --git a/integration_test/cypress.config.js b/integration_test/cypress.config.js deleted file mode 100644 index c9fbf79105f..00000000000 --- a/integration_test/cypress.config.js +++ /dev/null @@ -1,27 +0,0 @@ -const { defineConfig } = require("cypress"); -const { plugin: replayPlugin } = require("@replayio/cypress") -const cypressSplit = require('cypress-split') - -// Retrieve the port from the environment variable or set a default -const FE_PORT = process.env.FE_PORT || '9994'; -const BASE_URL = `http://localhost:${FE_PORT}`; - -module.exports = defineConfig({ - projectId: "dsmm8g", - chromeWebSecurity: false, - e2e: { - baseUrl: BASE_URL, - experimentalSessionAndOrigin: true, - setupNodeEvents(on, config) { - cypressSplit(on, config) - - // 🙋‍♂️ Add this line to install the replay plugin - replayPlugin(on, config, { - upload: true, - apiKey: process.env.REPLAY_API_KEY, - }); - // Make sure that setupNodeEvents returns config - return config; - }, - }, -}); diff --git a/integration_test/cypress/.gitignore b/integration_test/cypress/.gitignore deleted file mode 100644 index c93c160370e..00000000000 --- a/integration_test/cypress/.gitignore +++ /dev/null @@ -1,2 +0,0 @@ -screenshots -videos diff --git a/integration_test/cypress/e2e/interactive/blank.py b/integration_test/cypress/e2e/interactive/blank.py deleted file mode 100644 index 0dc51529825..00000000000 --- a/integration_test/cypress/e2e/interactive/blank.py +++ /dev/null @@ -1,12 +0,0 @@ -import weave -from weave.legacy.weave.show import show_url - -weave.use_fixed_server_port() -obj = [ - 1, - 2, - 3, -] # weave.legacy.weave.panels.Board({}, [weave.legacy.weave.panels.BoardPanel(weave.legacy.weave.panels.Table([1, 2, 3]))]) -blank = weave.save(obj) - -print(show_url(obj)) diff --git a/integration_test/cypress/e2e/interactive/boardTemplateNotebookLinks.cy.ts b/integration_test/cypress/e2e/interactive/boardTemplateNotebookLinks.cy.ts deleted file mode 100644 index fbc8055494b..00000000000 --- a/integration_test/cypress/e2e/interactive/boardTemplateNotebookLinks.cy.ts +++ /dev/null @@ -1,56 +0,0 @@ -import {goToHomePage} from '../testlib'; - -describe('board template notebook links', () => { - it('check that board template notebook links to colab work', () => { - goToHomePage(); - cy.contains('Board templates').click(); - - cy.get('[data-testid="template-card"]').each(($el, index, $list) => { - const currentEl = cy.get('[data-testid="template-card"]').eq(index); - currentEl - .trigger('mouseenter') - .realHover() - .trigger('mouseenter') - .realHover() - .contains('Try it out') - .click(); - - cy.get( - 'img[src="https://colab.research.google.com/assets/colab-badge.svg"]' - ) - - .parent('a') - .each(($innerEl, index, $list) => { - const href = $innerEl.prop('href'); - // check that the url starts with https://colab.research.google.com/github - expect(href).to.match( - /^https:\/\/colab\.research\.google\.com\/github/ - ); - - const newHref = href - .replace( - 'https://colab.research.google.com/github', - 'https://raw.githubusercontent.com' - ) - .replace('blob/', ''); - - // load the notebook. - cy.request(newHref).then(response => { - // check that the status code is 200 - expect(response.status).to.eq(200); - }); - - cy.origin( - 'https://colab.research.google.com', - {args: {href}}, - ({href}) => { - cy.visit(href); - cy.contains('pip install').scrollIntoView().should('be.visible'); - } - ); - }); - goToHomePage(); - cy.contains('Board templates').click(); - }); - }); -}); diff --git a/integration_test/cypress/e2e/interactive/dashboard.cy.ts b/integration_test/cypress/e2e/interactive/dashboard.cy.ts deleted file mode 100644 index 1ce065383e5..00000000000 --- a/integration_test/cypress/e2e/interactive/dashboard.cy.ts +++ /dev/null @@ -1,45 +0,0 @@ -import { - gotoBlankDashboard, - panelTypeInputExpr, - addSidebarPanel, - scrollToEEAndType, - panelChangeId, - tableAppendColumn, - tableCheckContainsValue, - addMainPanel, -} from '../testlib'; - -describe('dashboard', () => { - it('dashboard', () => { - gotoBlankDashboard(); - - // Setup sidebar - panelTypeInputExpr(['sidebar', 'var0'], 'range(0, 100, 1)'); - addSidebarPanel(); - panelTypeInputExpr(['sidebar', 'var1'], '2.5'); - addSidebarPanel(); - panelTypeInputExpr(['sidebar', 'var2'], 'var1'); - // dashboardConvertToControl(['sidebar', 'var2']); - - // Add table panel - scrollToEEAndType(['main', 'panel0'], 'var0'); - panelChangeId(['main', 'panel0'], 'table'); - tableAppendColumn(['main', 'panel0'], 'row ** var1'); - tableCheckContainsValue(['main', 'panel0'], '5.657'); - - // Add another table panel - addMainPanel(); - scrollToEEAndType(['main', 'panel1'], 'panel0.all_rows'); - tableCheckContainsValue(['main', 'panel1'], '5.657'); - - // Add plot panel - addMainPanel(); - scrollToEEAndType(['main', 'panel2'], 'panel0.all_rows'); - panelChangeId(['main', 'panel2'], 'plot'); - - // sliderSetValue(['sidebar', 'var2'], 0.5); - panelTypeInputExpr(['sidebar', 'var1'], '0.5'); - tableCheckContainsValue(['main', 'panel0'], '1.414'); - tableCheckContainsValue(['main', 'panel1'], '1.414'); - }); -}); diff --git a/integration_test/cypress/e2e/interactive/distribution.cy.ts b/integration_test/cypress/e2e/interactive/distribution.cy.ts deleted file mode 100644 index 03edd355e60..00000000000 --- a/integration_test/cypress/e2e/interactive/distribution.cy.ts +++ /dev/null @@ -1,54 +0,0 @@ -import {exec, getPanel, openPanelConfig} from '../testlib'; - -describe('distribution interactions', () => { - it('can configure a python panel from scratch by clicking', () => { - exec('python cypress/e2e/interactive/distribution.py', 10000).then( - result => { - const url = result.stdout.replace( - 'http://localhost:9994/__frontend/weave_jupyter', - '' - ); - - cy.on('uncaught:exception', (err, runnable) => { - if (err.message.includes('ResizeObserver loop')) { - return false; - } - }); - - cy.visit(url); - cy.wait(1000); - - const panel = getPanel(['main', 'panel0']); - openPanelConfig(panel); - cy.wait(1000); - - const value = '(item) => item["loss1"]'; - - cy.get('[data-test=weave-sidebar]') - .find( - '[data-test=expression-editor-container] [contenteditable=true]' - ) - .contains(value); - - // modify the expression to select some data. - // this is currently broken. it fails with an error - // in mutation.ts. todo: renable when we want declarable - // python panels to work again. - /* - - .click() - .type('{rightarrow}'.repeat(value.length)) - .type('{backspace}'.repeat(9)) - .type("['loss2']") - .type('{enter}'); - - */ - - // Click ok in the sidebar - cy.get('[data-testid=close-panel-panel-config]').click(); - - cy.get('rect').should('have.length.gte', 2); - } - ); - }); -}); diff --git a/integration_test/cypress/e2e/interactive/distribution.py b/integration_test/cypress/e2e/interactive/distribution.py deleted file mode 100644 index f516a04364c..00000000000 --- a/integration_test/cypress/e2e/interactive/distribution.py +++ /dev/null @@ -1,47 +0,0 @@ -import random - -import weave -from weave.legacy.weave import panels -from weave.legacy.weave.show import show_url - -# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now. -weave.use_lazy_execution() -from weave.legacy.weave.ecosystem import wandb - -weave.use_fixed_server_port() - -items = weave.save( - [ - { - "name": "x", - "loss1": [random.gauss(5, 2) for i in range(500)], - "loss2": [random.gauss(5, 2) for i in range(500)], - "str_val": [random.choice(["a", "b", "c"]) for i in range(500)], - }, - { - "name": "y", - "loss1": [random.gauss(9, 4) for i in range(500)], - "loss2": [random.gauss(-1, 2) for i in range(500)], - "str_val": [random.choice(["a", "b", "c"]) for i in range(500)], - }, - ] -) - -panel: wandb.Distribution = wandb.Distribution( - items, - value_fn=lambda x: x["loss1"], - label_fn=lambda x: x["str_val"], - bin_size=1.5, # type: ignore -) - -panel = panels.Board( - {}, - [ - panels.BoardPanel( - panel, - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12), - ) - ], -) - -print(show_url(panel)) diff --git a/integration_test/cypress/e2e/interactive/plotboard.cy.ts b/integration_test/cypress/e2e/interactive/plotboard.cy.ts deleted file mode 100644 index eb496e20524..00000000000 --- a/integration_test/cypress/e2e/interactive/plotboard.cy.ts +++ /dev/null @@ -1,47 +0,0 @@ -import { - gotoBlankDashboard, - panelTypeInputExpr, - scrollToEEAndType, - panelChangeId, - getPanel, - openPanelConfig, - setPlotConfig, -} from '../testlib'; - -describe('plotboard', () => { - it('configure plot panel', () => { - gotoBlankDashboard(); - - // Setup sidebar - panelTypeInputExpr(['sidebar', 'var0'], 'range(0, 1000, 1)'); - - // Add table panel - scrollToEEAndType(['main', 'panel0'], 'var0'); - - // Make it a plot - panelChangeId(['main', 'panel0'], 'plot'); - - const panel = getPanel(['main', 'panel0']); - const configPanel = openPanelConfig(panel); - - const xDimConfig = configPanel.get('[data-test="x-dim-config"]'); - setPlotConfig(xDimConfig, 'row'); - - const yDimConfig = configPanel.get('[data-test="y-dim-config"]'); - setPlotConfig(yDimConfig, 'sin(row / 31.4159)'); - - const colorDimConfig = configPanel.get('[data-test="label-dim-config"]'); - setPlotConfig(colorDimConfig, 'row'); - - ['line', 'bar'].forEach(mark => { - cy.get('[data-testid="dropdown-mark"]').click().contains(mark).click(); - [20, 40, 60, 80, 100, 120, 150, 175, 200, 220].forEach(x => { - setPlotConfig( - configPanel.get('[data-test="label-dim-config"]'), - `row % ${x}` - ); - cy.wait(200); - }); - }); - }); -}); diff --git a/integration_test/cypress/e2e/interactive/scatter.cy.ts b/integration_test/cypress/e2e/interactive/scatter.cy.ts deleted file mode 100644 index 1438f41dd31..00000000000 --- a/integration_test/cypress/e2e/interactive/scatter.cy.ts +++ /dev/null @@ -1,33 +0,0 @@ -import {exec, checkAllPanelsRendered} from '../testlib'; - -describe.skip('scatter interactions', () => { - it('can select a region on a scatter plot and update another panel based on selection', () => { - exec('python cypress/e2e/interactive/scatter.py', 10000).then(result => { - const url = result.stdout; - cy.visit(url); - cy.wait(3000); - - checkAllPanelsRendered(); - - // This does a plotly select - cy.get('[data-test-weave-id=PanelPlotly] .svg-container .drag') - .first() - .trigger('mousedown', 200, 200, {force: true}) - .trigger('mousemove', 500, 500, {force: true}) - .trigger('mouseup', {force: true}); - - checkAllPanelsRendered(); - - // This scrolls the content area to the bottom. Unfortunate to need - // >div>div - cy.get('[data-test=panel-expression-content]>div>div').scrollTo('bottom'); - - // The table shows the selected items, there should be some numbers - // inside now. - cy.get('.BaseTable__row-cell [data-test-weave-id=number]').should( - 'have.length.gte', - 10 - ); - }); - }); -}); diff --git a/integration_test/cypress/e2e/interactive/scatter.py b/integration_test/cypress/e2e/interactive/scatter.py deleted file mode 100644 index b0e170fcc56..00000000000 --- a/integration_test/cypress/e2e/interactive/scatter.py +++ /dev/null @@ -1,38 +0,0 @@ -import random - -import weave -from weave.legacy.weave.ecosystem import wandb -from weave.legacy.weave.show import show_url - -weave.use_fixed_server_port() - -data = weave.save( - [ - { - "a": random.gauss(5, 2), - "b": random.gauss(0, 9), - "c": random.gauss(15, 0.9), - "d": random.random(), - "e": random.choice(["a", "b"]), - } - for i in range(500) - ] -) - -panel: weave.legacy.weave.panels.Group = weave.legacy.weave.panels.Group( - items={ - "scatter": wandb.Scatter( # type: ignore - data, x_fn=lambda item: item["a"], y_fn=lambda item: item["b"] - ), - "table": lambda scatter: weave.legacy.weave.panels.LabeledItem( - label="Selected items", - item=weave.legacy.weave.panels.Group( - style="height: 400px;", - preferHorizontal=True, - items={"table": scatter.selected()}, - ), - ), - } -) - -print(show_url(panel)) diff --git a/integration_test/cypress/e2e/notebooks/README.md b/integration_test/cypress/e2e/notebooks/README.md deleted file mode 100644 index 9ea8c5db590..00000000000 --- a/integration_test/cypress/e2e/notebooks/README.md +++ /dev/null @@ -1 +0,0 @@ -These tests are all auto-generated by the generate_notebook_tests.py script. You should not manually add tests in this directory. \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/AutoBoard.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/AutoBoard.cy.ts deleted file mode 100644 index dff3492376a..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/AutoBoard.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/AutoBoard.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/AutoBoard.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/Closures.cydisabled.ts b/integration_test/cypress/e2e/notebooks/experimental/Closures.cydisabled.ts deleted file mode 100644 index ed63746dabb..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/Closures.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/experimental/Closures.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/experimental/Closures.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/Monitor.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/Monitor.cy.ts deleted file mode 100644 index 2a54869af2f..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/Monitor.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/Monitor.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/Monitor.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/MonitorPanelPlot.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/MonitorPanelPlot.cy.ts deleted file mode 100644 index e8f2bfa5958..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/MonitorPanelPlot.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/MonitorPanelPlot.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/MonitorPanelPlot.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/Mutations.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/Mutations.cy.ts deleted file mode 100644 index 7da28147003..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/Mutations.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/Mutations.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/Mutations.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/Table Summary Panel.cydisabled.ts b/integration_test/cypress/e2e/notebooks/experimental/Table Summary Panel.cydisabled.ts deleted file mode 100644 index e389bf3b7e1..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/Table Summary Panel.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/experimental/Table Summary Panel.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/experimental/Table Summary Panel.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/app/RunChain.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/app/RunChain.cy.ts deleted file mode 100644 index 418dc2ff776..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/app/RunChain.cy.ts +++ /dev/null @@ -1,10 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/experimental/app/RunChain.ipynb notebook test', () => { - // Skipping until this is stable - it.skip('passes', () => { - return checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/app/RunChain.ipynb' - ); - }); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/app/beautiful_runs.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/app/beautiful_runs.cy.ts deleted file mode 100644 index 5b25ef8202e..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/app/beautiful_runs.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/experimental/app/beautiful_runs.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/app/beautiful_runs.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/app/scenario_compare.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/app/scenario_compare.cy.ts deleted file mode 100644 index ec4ab75457b..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/app/scenario_compare.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/experimental/app/scenario_compare.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/app/scenario_compare.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/composite_histograms.cydisabled.ts b/integration_test/cypress/e2e/notebooks/experimental/composite_histograms.cydisabled.ts deleted file mode 100644 index 450c1f03548..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/composite_histograms.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/experimental/composite_histograms.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/experimental/composite_histograms.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/dir_browsing.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/dir_browsing.cy.ts deleted file mode 100644 index 33b8eb15f85..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/dir_browsing.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/dir_browsing.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/dir_browsing.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/ecosystem.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/ecosystem.cy.ts deleted file mode 100644 index 45b124b806d..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/ecosystem.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/ecosystem.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/ecosystem.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/image_gen_craiyon.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/image_gen_craiyon.cy.ts deleted file mode 100644 index ce8e9acb66f..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/image_gen_craiyon.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/image_gen_craiyon.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/image_gen_craiyon.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/image_gen_ops.cydisabled.ts b/integration_test/cypress/e2e/notebooks/experimental/image_gen_ops.cydisabled.ts deleted file mode 100644 index ac80e11b1b7..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/image_gen_ops.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/experimental/image_gen_ops.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/experimental/image_gen_ops.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/layout_panels.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/layout_panels.cy.ts deleted file mode 100644 index 536aa496cd4..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/layout_panels.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/layout_panels.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/layout_panels.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/mnist_train.cydisabled.ts b/integration_test/cypress/e2e/notebooks/experimental/mnist_train.cydisabled.ts deleted file mode 100644 index a77e801e578..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/mnist_train.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/experimental/mnist_train.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/experimental/mnist_train.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/experimental/spacy_demo.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/spacy_demo.cy.ts deleted file mode 100644 index 81563c82ba1..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/spacy_demo.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/spacy_demo.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/spacy_demo.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/table_data_passing.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/table_data_passing.cy.ts deleted file mode 100644 index dda193c3bda..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/table_data_passing.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/table_data_passing.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/table_data_passing.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/experimental/tag_search.cy.ts b/integration_test/cypress/e2e/notebooks/experimental/tag_search.cy.ts deleted file mode 100644 index ed077f50955..00000000000 --- a/integration_test/cypress/e2e/notebooks/experimental/tag_search.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/experimental/tag_search.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/experimental/tag_search.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/get_started.cy.ts b/integration_test/cypress/e2e/notebooks/get_started.cy.ts deleted file mode 100644 index edc71adaa1a..00000000000 --- a/integration_test/cypress/e2e/notebooks/get_started.cy.ts +++ /dev/null @@ -1,7 +0,0 @@ -import { checkWeaveNotebookOutputs } from './notebooks'; - -describe('../weave/legacy/examples/get_started.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../weave/legacy/examples/get_started.ipynb') - ); -}); diff --git a/integration_test/cypress/e2e/notebooks/notebooks.ts b/integration_test/cypress/e2e/notebooks/notebooks.ts deleted file mode 100644 index 47fe010f4ef..00000000000 --- a/integration_test/cypress/e2e/notebooks/notebooks.ts +++ /dev/null @@ -1,118 +0,0 @@ -import {exec, checkAllPanelsRendered} from '../testlib'; - -interface Notebook { - cells: Array<{ - id: string; - cell_type: 'code' | 'markdown'; - execution_count: number; - outputs: Array<{ - output_type: 'execute_result' | 'display_data' | 'error'; - data: { - 'text/html'?: string; - }; - }>; - source: string[]; - }>; -} - -function parseNotebook(s: string): Notebook { - return JSON.parse(s); -} - -function forEachWeaveOutputCellInNotebook( - notebookPath: string, - cellTest: (cellId: string) => void -) { - cy.readFile(notebookPath).then(notebookContents => { - const notebook = parseNotebook(notebookContents); - let executionCount = 0; - for (let i = 0; i < notebook.cells.length; i++) { - const cell = notebook.cells[i]; - if (cell.cell_type !== 'code') { - continue; - } - if (cell.source[0]?.includes('# weave-test-skip')) { - continue; - } - executionCount++; - if (cell.execution_count !== executionCount) { - throw new Error( - `Execution count mismatch for cell ${i}. Notebooks must be cleared and then re-run with pytest -nbmake before running cypress tests.` - ); - } - for (const output of cell.outputs) { - if (output.output_type === 'error') { - throw new Error(`Encountered python error in cell ${i}`); - } - if (output.output_type !== 'display_data') { - continue; - } - const html = output.data['text/html']; - if (html == null) { - // Not a cell that output html - continue; - } - const el = document.createElement('html'); - el.innerHTML = html; - const iframe = el.getElementsByTagName('iframe')[0]; - const src = iframe.src; - if (!src.includes('weave_jupyter')) { - throw new Error( - 'Encountered an iframe output cell that is not a weave output' - ); - } - const url = new URL(src); - - // TODO: This switches depending on if in devmode - cy.visit('/__frontend/weave_frontend' + url.search); - - // Cypress is erroring on ResizeObserver loop limit exceeded, but - // we are not seeing anything like this locally. I think it might - // have to do with cypress itself. Similar issues have been noted - // here: https://github.com/cypress-io/cypress/issues/8418, with similar - // patches resolving the issue. I'm not sure if this is the best way - // to handle this, but it seems to work. - cy.on('uncaught:exception', err => { - - if ( - err.name?.includes('ResizeObserver') || - err.message?.includes('ResizeObserver') - ) { - return false; - - } - }); - - // cy.visit('http://localhost:3000/' + url.search); - - cellTest(cell.id); - } - } - }); -} - -function executeNotebook(notebookPath: string) { - exec( - 'pytest --nbmake --nbmake-timeout=3000 --overwrite "' + notebookPath + '"', - 160000 - ); -} - -export function checkWeaveNotebookOutputs(notebookPath: string) { - cy.readFile(notebookPath).then(notebookContents => { - const notebook = parseNotebook(notebookContents); - if (notebook.cells[0].source[0]?.includes('# weave-test-skip-all')) { - cy.log( - 'Skipping notebook due to weave-test-skip-all directive ' + notebookPath - ); - return; - } - executeNotebook(notebookPath); - forEachWeaveOutputCellInNotebook(notebookPath, cellId => { - // assert that there is at least 1 element with an attribute 'data-test-weave-id' - checkAllPanelsRendered(); - cy.wait(1000); - checkAllPanelsRendered(); - }); - }); -} diff --git a/integration_test/cypress/e2e/notebooks/reference/WB_API.cy.ts b/integration_test/cypress/e2e/notebooks/reference/WB_API.cy.ts deleted file mode 100644 index 95b70e8b197..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/WB_API.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/reference/WB_API.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/WB_API.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/basic_weave_types.cy.ts b/integration_test/cypress/e2e/notebooks/reference/basic_weave_types.cy.ts deleted file mode 100644 index 1d5b0f2db26..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/basic_weave_types.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/reference/basic_weave_types.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/basic_weave_types.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/confusion_matrix.cy.ts b/integration_test/cypress/e2e/notebooks/reference/confusion_matrix.cy.ts deleted file mode 100644 index 3be38b4eb2e..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/confusion_matrix.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/reference/confusion_matrix.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/confusion_matrix.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/control/Object Picker.cy.ts b/integration_test/cypress/e2e/notebooks/reference/control/Object Picker.cy.ts deleted file mode 100644 index 58a8525d577..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/control/Object Picker.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/control/Object Picker.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/control/Object Picker.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/control/Slider.cy.ts b/integration_test/cypress/e2e/notebooks/reference/control/Slider.cy.ts deleted file mode 100644 index b1413fd62b1..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/control/Slider.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/control/Slider.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/control/Slider.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/create_ops.cydisabled.ts b/integration_test/cypress/e2e/notebooks/reference/create_ops.cydisabled.ts deleted file mode 100644 index 3f8418976aa..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/create_ops.cydisabled.ts +++ /dev/null @@ -1,7 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../examples/reference/create_ops.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs('../examples/reference/create_ops.ipynb') - ); -}); \ No newline at end of file diff --git a/integration_test/cypress/e2e/notebooks/reference/create_plots_ui_guide.cy.ts b/integration_test/cypress/e2e/notebooks/reference/create_plots_ui_guide.cy.ts deleted file mode 100644 index dac28852865..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/create_plots_ui_guide.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../notebooks'; - -describe('../weave/legacy/examples/reference/create_plots_ui_guide.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/create_plots_ui_guide.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/layout/Each.cy.ts b/integration_test/cypress/e2e/notebooks/reference/layout/Each.cy.ts deleted file mode 100644 index 2979cd6496b..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/layout/Each.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/layout/Each.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/layout/Each.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/layout/Group & LabeledItem.cy.ts b/integration_test/cypress/e2e/notebooks/reference/layout/Group & LabeledItem.cy.ts deleted file mode 100644 index 1dc98c1a348..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/layout/Group & LabeledItem.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/layout/Group & LabeledItem.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/layout/Group & LabeledItem.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/panels/plot/synced_axes.cy.ts b/integration_test/cypress/e2e/notebooks/reference/panels/plot/synced_axes.cy.ts deleted file mode 100644 index bdf79decb3f..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/panels/plot/synced_axes.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../../notebooks'; - -describe('../weave/legacy/examples/reference/panels/plot/synced_axes.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/panels/plot/synced_axes.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/vis/Distribution.cy.ts b/integration_test/cypress/e2e/notebooks/reference/vis/Distribution.cy.ts deleted file mode 100644 index 5acc7678425..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/vis/Distribution.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/vis/Distribution.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/vis/Distribution.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/vis/Scatter.cy.ts b/integration_test/cypress/e2e/notebooks/reference/vis/Scatter.cy.ts deleted file mode 100644 index 9b39b237944..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/vis/Scatter.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/vis/Scatter.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/vis/Scatter.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/notebooks/reference/vis/derived_plots_from_tables.cy.ts b/integration_test/cypress/e2e/notebooks/reference/vis/derived_plots_from_tables.cy.ts deleted file mode 100644 index 072da256384..00000000000 --- a/integration_test/cypress/e2e/notebooks/reference/vis/derived_plots_from_tables.cy.ts +++ /dev/null @@ -1,8 +0,0 @@ -import {checkWeaveNotebookOutputs} from '../../notebooks'; - -describe('../weave/legacy/examples/reference/vis/derived_plots_from_tables.ipynb notebook test', () => { - it('passes', () => - checkWeaveNotebookOutputs( - '../weave/legacy/examples/reference/vis/derived_plots_from_tables.ipynb' - )); -}); diff --git a/integration_test/cypress/e2e/testlib.ts b/integration_test/cypress/e2e/testlib.ts deleted file mode 100644 index cf6566875f4..00000000000 --- a/integration_test/cypress/e2e/testlib.ts +++ /dev/null @@ -1,192 +0,0 @@ -import {config} from 'cypress/types/bluebird'; - -// Log the full error output. From here: https://github.com/cypress-io/cypress/issues/5470 -export const exec = (command: string, timeout: number) => { - return cy.exec(command, {failOnNonZeroExit: false, timeout}).then(result => { - if (result.code) { - throw new Error(`Execution of "${command}" failed - Exit code: ${result.code} - Stdout:\n${result.stdout} - Stderr:\n${result.stderr}`); - } - }); -}; - -export function checkAllPanelsRendered() { - const panels = cy - .get('[data-test-weave-id]', {timeout: 60000}) - .should('have.length.greaterThan', 0); - panels.each((panel, index) => { - // assert that the element has a non-empty attribute 'data-test-weave-id' - const panelId = panel.attr('data-test-weave-id'); - if (panelId == 'PanelPlotly') { - cy.wrap(panel).find('.plotly', {timeout: 30000}).should('exist'); - } else if (panelId == 'table') { - cy.wrap(panel).find('.BaseTable').should('exist'); - } else if (panelId === 'plot') { - cy.wrap(panel).find('canvas').should('exist'); - } else if (panelId == 'html-file') { - // pass, this is rendered as an iframe, we don't reach in for now. - } else if (panelId == 'boolean') { - // pass for now, boolean just renders its value - } else if (panelId == 'Card') { - // pass for now. - // TODO: But we should click each tab and recursively check its content! - } else if (panelId === 'dir') { - cy.wrap(panel).find('table').should('exist'); - } else if (panelId == 'pil-image') { - cy.wrap(panel) - .find('img') - .should('exist') - .and($img => { - // "naturalWidth" and "naturalHeight" are set when the image loads - expect($img[0].naturalWidth).to.be.greaterThan(0); - }); - } else if (panelId == 'Color') { - cy.wrap(panel).should('have.css', 'background-color'); - } else if (panelId === 'string' || panelId === 'number') { - // just existence of the data-test-weave-id is enough - } else { - throw new Error( - `Unknown weave panel type (${panelId}). You should add assertions for it.` - ); - } - }); -} - -export const getPanel = (path: string[]) => { - const attrPath = path.map(p => `[data-weavepath=${p}]`); - return cy.get(attrPath.join(' ')); -}; - -export const openPanelConfig = (panel: Cypress.Chainable) => { - panel.trigger('mouseenter').click(); - const editorPanel = panel.find('[data-testid="open-panel-editor"]'); - editorPanel.click(); - return editorPanel; -}; - -export const gotoBlankDashboard = () => { - exec('python cypress/e2e/interactive/blank.py', 10000); - const url = - '/?fullScreen&expNode=%7B%22nodeType%22%3A%20%22output%22%2C%20%22type%22%3A%20%22any%22%2C%20%22fromOp%22%3A%20%7B%22name%22%3A%20%22get%22%2C%20%22inputs%22%3A%20%7B%22uri%22%3A%20%7B%22nodeType%22%3A%20%22const%22%2C%20%22type%22%3A%20%22string%22%2C%20%22val%22%3A%20%22local-artifact%3A///dashboard-list%3Alatest/obj%22%7D%7D%7D%7D'; - cy.viewport(1600, 900); - cy.visit(url); - cy.get('canvas').should('be.visible'); - cy.get('[data-testid="header-center-controls"]').should('be.visible').click(); - cy.get('[data-testid="new-board-button"]').should('be.visible').click(); -}; - -export const goToHomePage = () => { - const url = '/'; - cy.viewport(1600, 900); - cy.visit(url); - cy.contains('Board templates').should('be.visible'); -}; - -export const addSidebarPanel = () => { - getPanel(['sidebar']).contains('New variable').click(); -}; - -export const addMainPanel = () => { - getPanel(['main']) - .find('button[data-test="new-panel-button"]') - .click({force: true}); -}; - -export const dashboardConvertToControl = (path: string[]) => { - const panel = getPanel(path); - panel.find('i.sliders').click(); -}; - -export const panelTypeInputExpr = (path: string[], text: string) => { - const panel = getPanel(path); - panel - .find('[data-test=expression-editor-container] [contenteditable=true]') - .click() - .clear() - .type(text) - .wait(300) - .type('{enter}', {force: true}); -}; - -function typeWithRetry( - path: string[], - text: string, - retries: number = 10, - delay: number = 1000 -) { - const panel = getPanel(path); - - panel - .trigger('mouseenter') - .click() - .find('[data-test=expression-editor-container] [contenteditable=true]') - .realHover() - .realClick() - - .type(text, {force: true}) - .wait(300) - .type('{enter}', {force: true}); - - getPanel(path) - .find('[data-test=expression-editor-container] [contenteditable=true]') - .then($el => { - if ($el.text() !== text) { - if (retries > 0) { - cy.wait(delay); - typeWithRetry(path, text, retries - 1, delay); - } else { - throw new Error('Condition not met'); - } - } - }); -} - -export const scrollToEEAndType = (path: string[], text: string) => { - typeWithRetry(path, text); -}; - -export const panelChangeId = (path: string[], text: string) => { - const panel = getPanel(path); - panel.find('[data-test-comp=PanelNameEditor] [contenteditable=true]').click(); - cy.get('[data-test=wb-menu-item]').contains(text).click(); -}; - -export const tableAppendColumn = (path: string[], expr) => { - const panel = getPanel(path); - panel.find('i.column-actions-trigger').click({force: true}); - // TODO: these should be panel.find... but that didn't work on my first try - cy.get('[data-test=wb-menu-item]').contains('Insert 1 right').click(); - cy.get('[data-test=column-header').last().click(); - - cy.get('.wb-table-action-popup') - .find('[data-test=expression-editor-container] [contenteditable=true]') - .click() - .type('{backspace}{backspace}{backspace}{backspace}{backspace}') - .type(expr); - cy.get('#root').click({force: true}); -}; - -export const tableCheckContainsValue = (path: string[], value: string) => { - const panel = getPanel(path).scrollIntoView(); - panel.find('.BaseTable__row-cell div').contains(value); -}; - -export const sliderSetValue = (path: string[], value: number) => { - const panel = getPanel(path); - panel.find('input[type=range]').invoke('val', value).trigger('input'); -}; - -export const setPlotConfig = ( - configDivElement: Cypress.Chainable, - eeText: string -) => { - configDivElement - .find('[data-test=expression-editor-container] [contenteditable=true]') - .click() - .clear() - .type(eeText) - .wait(300) - .type('{enter}', {force: true}); -}; diff --git a/integration_test/cypress/fixtures/example.json b/integration_test/cypress/fixtures/example.json deleted file mode 100644 index 02e4254378e..00000000000 --- a/integration_test/cypress/fixtures/example.json +++ /dev/null @@ -1,5 +0,0 @@ -{ - "name": "Using fixtures to represent data", - "email": "hello@cypress.io", - "body": "Fixtures are a great way to mock data for responses to routes" -} diff --git a/integration_test/cypress/plugins/index.ts b/integration_test/cypress/plugins/index.ts deleted file mode 100644 index 7e66103771b..00000000000 --- a/integration_test/cypress/plugins/index.ts +++ /dev/null @@ -1,3 +0,0 @@ -export default (on, config) => { - -}; diff --git a/integration_test/cypress/support/commands.js b/integration_test/cypress/support/commands.js deleted file mode 100644 index 66ea16ef0e3..00000000000 --- a/integration_test/cypress/support/commands.js +++ /dev/null @@ -1,25 +0,0 @@ -// *********************************************** -// This example commands.js shows you how to -// create various custom commands and overwrite -// existing commands. -// -// For more comprehensive examples of custom -// commands please read more here: -// https://on.cypress.io/custom-commands -// *********************************************** -// -// -// -- This is a parent command -- -// Cypress.Commands.add('login', (email, password) => { ... }) -// -// -// -- This is a child command -- -// Cypress.Commands.add('drag', { prevSubject: 'element'}, (subject, options) => { ... }) -// -// -// -- This is a dual command -- -// Cypress.Commands.add('dismiss', { prevSubject: 'optional'}, (subject, options) => { ... }) -// -// -// -- This will overwrite an existing command -- -// Cypress.Commands.overwrite('visit', (originalFn, url, options) => { ... }) \ No newline at end of file diff --git a/integration_test/cypress/support/e2e.js b/integration_test/cypress/support/e2e.js deleted file mode 100644 index 22959e21aef..00000000000 --- a/integration_test/cypress/support/e2e.js +++ /dev/null @@ -1,23 +0,0 @@ -// *********************************************************** -// This example support/e2e.js is processed and -// loaded automatically before your test files. -// -// This is a great place to put global configuration and -// behavior that modifies Cypress. -// -// You can change the location of this file or turn off -// automatically serving support files with the -// 'supportFile' configuration option. -// -// You can read more here: -// https://on.cypress.io/configuration -// *********************************************************** - -// Import commands.js using ES2015 syntax: -import './commands' -import '@replayio/cypress/support'; -import "cypress-real-events/support"; - - -// Alternatively you can use CommonJS syntax: -// require('./commands') diff --git a/integration_test/cypress/tsconfig.json b/integration_test/cypress/tsconfig.json deleted file mode 100644 index 18edb199acd..00000000000 --- a/integration_test/cypress/tsconfig.json +++ /dev/null @@ -1,8 +0,0 @@ -{ - "compilerOptions": { - "target": "es5", - "lib": ["es5", "dom"], - "types": ["cypress", "node"] - }, - "include": ["**/*.ts"] -} diff --git a/integration_test/cypress_parallel.sh b/integration_test/cypress_parallel.sh deleted file mode 100644 index 3bbac4adf38..00000000000 --- a/integration_test/cypress_parallel.sh +++ /dev/null @@ -1,5 +0,0 @@ -for i in `seq 1 6`; do - npx ds run --parallel --record --browser chrome & -done - -wait diff --git a/integration_test/package.json b/integration_test/package.json deleted file mode 100644 index 7e4cd17776d..00000000000 --- a/integration_test/package.json +++ /dev/null @@ -1,25 +0,0 @@ -{ - "name": "integration_test", - "version": "1.0.0", - "description": "Weave notebook testing using Cypress", - "main": "index.js", - "scripts": { - "test": "echo \"Error: no test specified\" && exit 1", - "dev": "FE_PORT=3000 cypress open" - }, - "dependencies": { - "cypress-real-events": "1.10.3", - "slate": "0.94.1", - "slate-history": "0.93.0", - "slate-react": "0.97.1" - }, - "author": "", - "license": "ISC", - "devDependencies": { - "@replayio/cypress": "^1.7.10", - "cypress": "^10.11.0", - "cypress-promise": "^1.1.0", - "cypress-split": "^1.17.1", - "typescript": "^4.8.4" - } -} diff --git a/integration_test/yarn.lock b/integration_test/yarn.lock deleted file mode 100644 index cf11ec831e9..00000000000 --- a/integration_test/yarn.lock +++ /dev/null @@ -1,2917 +0,0 @@ -# THIS IS AN AUTOGENERATED FILE. DO NOT EDIT THIS FILE DIRECTLY. -# yarn lockfile v1 - - -"@actions/core@^1.10.0": - version "1.10.1" - resolved "https://registry.yarnpkg.com/@actions/core/-/core-1.10.1.tgz#61108e7ac40acae95ee36da074fa5850ca4ced8a" - integrity sha512-3lBR9EDAY+iYIpTnTIXmWcNbX3T2kCkAEQGIQx4NVQ0575nk2k3GRZDTPQG+vVtS2izSLmINlxXf0uLtnrTP+g== - dependencies: - "@actions/http-client" "^2.0.1" - uuid "^8.3.2" - -"@actions/http-client@^2.0.1": - version "2.2.0" - resolved "https://registry.yarnpkg.com/@actions/http-client/-/http-client-2.2.0.tgz#f8239f375be6185fcd07765efdcf0031ad5df1a0" - integrity sha512-q+epW0trjVUUHboliPb4UF9g2msf+w61b32tAkFEwL/IwP0DQWgbCMM0Hbe3e3WXSKz5VcUXbzJQgy8Hkra/Lg== - dependencies: - tunnel "^0.0.6" - undici "^5.25.4" - -"@babel/helper-plugin-utils@^7.22.5": - version "7.22.5" - resolved "https://registry.yarnpkg.com/@babel/helper-plugin-utils/-/helper-plugin-utils-7.22.5.tgz#dd7ee3735e8a313b9f7b05a773d892e88e6d7295" - integrity sha512-uLls06UVKgFG9QD4OeFYLEGteMIAa5kpTPcFL28yuCIIzsf6ZyKZMllKVOCZFhiZ5ptnwX4mtKdWCBE/uT4amg== - -"@babel/parser@^7.21.8", "@babel/parser@^7.23.0": - version "7.23.6" - resolved "https://registry.yarnpkg.com/@babel/parser/-/parser-7.23.6.tgz#ba1c9e512bda72a47e285ae42aff9d2a635a9e3b" - integrity sha512-Z2uID7YJ7oNvAI20O9X0bblw7Qqs8Q2hFy0R9tAfnfLkp5MW0UH9eUvnDSnFwKZ0AvgS1ucqR4KzvVHgnke1VQ== - -"@babel/plugin-syntax-jsx@^7.22.5": - version "7.23.3" - resolved "https://registry.yarnpkg.com/@babel/plugin-syntax-jsx/-/plugin-syntax-jsx-7.23.3.tgz#8f2e4f8a9b5f9aa16067e142c1ac9cd9f810f473" - integrity sha512-EB2MELswq55OHUoRZLGg/zC7QWUKfNLpE57m/S2yr1uEneIgsTgrSzXP3NXEsMkVn76OlaVVnzN+ugObuYGwhg== - dependencies: - "@babel/helper-plugin-utils" "^7.22.5" - -"@colors/colors@1.5.0": - version "1.5.0" - resolved "https://registry.yarnpkg.com/@colors/colors/-/colors-1.5.0.tgz#bb504579c1cae923e6576a4f5da43d25f97bdbd9" - integrity sha512-ooWCrlZP11i8GImSjTHYHLkvFDP48nS4+204nGb1RiX/WXYHmJA2III9/e2DWVabCESdW7hBAEzHRqUn9OUVvQ== - -"@cspotcode/source-map-support@^0.8.0": - version "0.8.1" - resolved "https://registry.yarnpkg.com/@cspotcode/source-map-support/-/source-map-support-0.8.1.tgz#00629c35a688e05a88b1cda684fb9d5e73f000a1" - integrity sha512-IchNf6dN4tHoMFIn/7OE8LWZ19Y6q/67Bmf6vnGREv8RSbBVb9LPJxEcnwrcwX6ixSvaiGoomAUvu4YSxXrVgw== - dependencies: - "@jridgewell/trace-mapping" "0.3.9" - -"@cypress/request@^2.88.10": - version "2.88.11" - resolved "https://registry.yarnpkg.com/@cypress/request/-/request-2.88.11.tgz#5a4c7399bc2d7e7ed56e92ce5acb620c8b187047" - integrity sha512-M83/wfQ1EkspjkE2lNWNV5ui2Cv7UCv1swW1DqljahbzLVWltcsexQh8jYtuS/vzFXP+HySntGM83ZXA9fn17w== - dependencies: - aws-sign2 "~0.7.0" - aws4 "^1.8.0" - caseless "~0.12.0" - combined-stream "~1.0.6" - extend "~3.0.2" - forever-agent "~0.6.1" - form-data "~2.3.2" - http-signature "~1.3.6" - is-typedarray "~1.0.0" - isstream "~0.1.2" - json-stringify-safe "~5.0.1" - mime-types "~2.1.19" - performance-now "^2.1.0" - qs "~6.10.3" - safe-buffer "^5.1.2" - tough-cookie "~2.5.0" - tunnel-agent "^0.6.0" - uuid "^8.3.2" - -"@cypress/xvfb@^1.2.4": - version "1.2.4" - resolved "https://registry.yarnpkg.com/@cypress/xvfb/-/xvfb-1.2.4.tgz#2daf42e8275b39f4aa53c14214e557bd14e7748a" - integrity sha512-skbBzPggOVYCbnGgV+0dmBdW/s77ZkAOXIC1knS8NagwDjBrNC1LuXtQJeiN6l+m7lzmHtaoUw/ctJKdqkG57Q== - dependencies: - debug "^3.1.0" - lodash.once "^4.1.1" - -"@dependents/detective-less@^4.1.0": - version "4.1.0" - resolved "https://registry.yarnpkg.com/@dependents/detective-less/-/detective-less-4.1.0.tgz#4a979ee7a6a79eb33602862d6a1263e30f98002e" - integrity sha512-KrkT6qO5NxqNfy68sBl6CTSoJ4SNDIS5iQArkibhlbGU4LaDukZ3q2HIkh8aUKDio6o4itU4xDR7t82Y2eP1Bg== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -"@fastify/busboy@^2.0.0": - version "2.1.0" - resolved "https://registry.yarnpkg.com/@fastify/busboy/-/busboy-2.1.0.tgz#0709e9f4cb252351c609c6e6d8d6779a8d25edff" - integrity sha512-+KpH+QxZU7O4675t3mnkQKcZZg56u+K/Ct2K+N2AZYNVK8kyeo/bI18tI8aPm3tvNNRyTWfj6s5tnGNlcbQRsA== - -"@jridgewell/resolve-uri@^3.0.3": - version "3.1.1" - resolved "https://registry.yarnpkg.com/@jridgewell/resolve-uri/-/resolve-uri-3.1.1.tgz#c08679063f279615a3326583ba3a90d1d82cc721" - integrity sha512-dSYZh7HhCDtCKm4QakX0xFpsRDqjjtZf/kjI/v3T3Nwt5r8/qz/M19F9ySyOqU94SXBmeG9ttTul+YnR4LOxFA== - -"@jridgewell/sourcemap-codec@^1.4.10": - version "1.4.15" - resolved "https://registry.yarnpkg.com/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz#d7c6e6755c78567a951e04ab52ef0fd26de59f32" - integrity sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg== - -"@jridgewell/trace-mapping@0.3.9": - version "0.3.9" - resolved "https://registry.yarnpkg.com/@jridgewell/trace-mapping/-/trace-mapping-0.3.9.tgz#6534fd5933a53ba7cbf3a17615e273a0d1273ff9" - integrity sha512-3Belt6tdc8bPgAtbcmdtNJlirVoTmEb5e2gC94PnkwEW9jI6CAHUeoG85tjWP5WquqfavoMtMwiG4P926ZKKuQ== - dependencies: - "@jridgewell/resolve-uri" "^3.0.3" - "@jridgewell/sourcemap-codec" "^1.4.10" - -"@juggle/resize-observer@^3.4.0": - version "3.4.0" - resolved "https://registry.yarnpkg.com/@juggle/resize-observer/-/resize-observer-3.4.0.tgz#08d6c5e20cf7e4cc02fd181c4b0c225cd31dbb60" - integrity sha512-dfLbk+PwWvFzSxwk3n5ySL0hfBog779o8h68wK/7/APo/7cgyWp5jcXockbxdk5kFRkbeXWm4Fbi9FrdN381sA== - -"@nodelib/fs.scandir@2.1.5": - version "2.1.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz#7619c2eb21b25483f6d167548b4cfd5a7488c3d5" - integrity sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g== - dependencies: - "@nodelib/fs.stat" "2.0.5" - run-parallel "^1.1.9" - -"@nodelib/fs.stat@2.0.5", "@nodelib/fs.stat@^2.0.2": - version "2.0.5" - resolved "https://registry.yarnpkg.com/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz#5bd262af94e9d25bd1e71b05deed44876a222e8b" - integrity sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A== - -"@nodelib/fs.walk@^1.2.3": - version "1.2.8" - resolved "https://registry.yarnpkg.com/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz#e95737e8bb6746ddedf69c556953494f196fe69a" - integrity sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg== - dependencies: - "@nodelib/fs.scandir" "2.1.5" - fastq "^1.6.0" - -"@replayio/cypress@^1.7.10": - version "1.7.10" - resolved "https://registry.yarnpkg.com/@replayio/cypress/-/cypress-1.7.10.tgz#5788799684a68c01653009e8c278937d1516d3b1" - integrity sha512-B3ChgiAgSuN33vuxjCr949/WixHgBPkz4LuZjepCgNy4f68hXZH+5IDmP3N+DehHXvQ2msZWpm/mODXcLtGQQw== - dependencies: - "@replayio/replay" "^0.20.1" - "@replayio/test-utils" "^1.3.8" - chalk "^4.1.2" - debug "^4.3.4" - semver "^7.5.2" - terminate "^2.6.1" - txml "^3.2.5" - uuid "^8.3.2" - ws "^8.14.2" - -"@replayio/replay@^0.20.1": - version "0.20.1" - resolved "https://registry.yarnpkg.com/@replayio/replay/-/replay-0.20.1.tgz#d88945482bfbff53e44ed04d02e519f782e2bfa6" - integrity sha512-sgbH7iDApXRQkdv6bcDVDACNQ0GQ9IUcZcMo/72g6hGe8YZG1JQbsUDd71EWMEfbjpoJI7bpkKe0VuS8vPybNw== - dependencies: - "@replayio/sourcemap-upload" "^1.1.1" - "@types/semver" "^7.5.6" - commander "^7.2.0" - debug "^4.3.4" - is-uuid "^1.0.2" - jsonata "^1.8.6" - node-fetch "^2.6.8" - p-map "^4.0.0" - query-registry "^2.6.0" - semver "^7.5.4" - superstruct "^0.15.4" - text-table "^0.2.0" - ws "^7.5.0" - -"@replayio/sourcemap-upload@^1.1.1": - version "1.1.1" - resolved "https://registry.yarnpkg.com/@replayio/sourcemap-upload/-/sourcemap-upload-1.1.1.tgz#2e6e5c9a5b5037bb2e2d21b2751411e5188eb486" - integrity sha512-XcJmyi2lxVUv/OuCC4GS7SFDrwViObw5czLy2pz7i2AAHFdFQJxTSqnNnw00m7ocUBdgcn/P0DzKHeRvTgPx4w== - dependencies: - commander "^7.2.0" - debug "^4.3.1" - glob "^7.1.6" - node-fetch "^2.6.1" - string.prototype.matchall "^4.0.5" - -"@replayio/test-utils@^1.3.8": - version "1.3.8" - resolved "https://registry.yarnpkg.com/@replayio/test-utils/-/test-utils-1.3.8.tgz#ba3307b0fe103670b46c4e04f3de5d846db117dd" - integrity sha512-gzLWLxgzzqJU5l0Z+2K2eRusl7vhd+mAkiSdvI5kCxkw3l/3+n4R6vc2Kq5VIc1x8KlPf3oeTziW1Eojwuh8bQ== - dependencies: - "@replayio/replay" "^0.20.1" - debug "^4.3.4" - node-fetch "^2.6.7" - uuid "^8.3.2" - -"@tsconfig/node10@^1.0.7": - version "1.0.9" - resolved "https://registry.yarnpkg.com/@tsconfig/node10/-/node10-1.0.9.tgz#df4907fc07a886922637b15e02d4cebc4c0021b2" - integrity sha512-jNsYVVxU8v5g43Erja32laIDHXeoNvFEpX33OK4d6hljo3jDhCBDhx5dhCCTMWUojscpAagGiRkBKxpdl9fxqA== - -"@tsconfig/node12@^1.0.7": - version "1.0.11" - resolved "https://registry.yarnpkg.com/@tsconfig/node12/-/node12-1.0.11.tgz#ee3def1f27d9ed66dac6e46a295cffb0152e058d" - integrity sha512-cqefuRsh12pWyGsIoBKJA9luFu3mRxCA+ORZvA4ktLSzIuCUtWVxGIuXigEwO5/ywWFMZ2QEGKWvkZG1zDMTag== - -"@tsconfig/node14@^1.0.0": - version "1.0.3" - resolved "https://registry.yarnpkg.com/@tsconfig/node14/-/node14-1.0.3.tgz#e4386316284f00b98435bf40f72f75a09dabf6c1" - integrity sha512-ysT8mhdixWK6Hw3i1V2AeRqZ5WfXg1G43mqoYlM2nc6388Fq5jcXyr5mRsqViLx/GJYdoL0bfXD8nmF+Zn/Iow== - -"@tsconfig/node16@^1.0.2": - version "1.0.4" - resolved "https://registry.yarnpkg.com/@tsconfig/node16/-/node16-1.0.4.tgz#0b92dcc0cc1c81f6f306a381f28e31b1a56536e9" - integrity sha512-vxhUy4J8lyeyinH7Azl1pdd43GJhZH/tP2weN8TntQblOY+A0XbT8DJk1/oCPuOOyg/Ja757rG0CgHcWC8OfMA== - -"@types/is-hotkey@^0.1.1": - version "0.1.7" - resolved "https://registry.yarnpkg.com/@types/is-hotkey/-/is-hotkey-0.1.7.tgz#30ec6d4234895230b576728ef77e70a52962f3b3" - integrity sha512-yB5C7zcOM7idwYZZ1wKQ3pTfjA9BbvFqRWvKB46GFddxnJtHwi/b9y84ykQtxQPg5qhdpg4Q/kWU3EGoCTmLzQ== - -"@types/lodash@^4.14.149": - version "4.14.199" - resolved "https://registry.yarnpkg.com/@types/lodash/-/lodash-4.14.199.tgz#c3edb5650149d847a277a8961a7ad360c474e9bf" - integrity sha512-Vrjz5N5Ia4SEzWWgIVwnHNEnb1UE1XMkvY5DGXrAeOGE9imk0hgTHh5GyDjLDJi9OTCn9oo9dXH1uToK1VRfrg== - -"@types/node@*": - version "20.2.5" - resolved "https://registry.yarnpkg.com/@types/node/-/node-20.2.5.tgz#26d295f3570323b2837d322180dfbf1ba156fefb" - integrity sha512-JJulVEQXmiY9Px5axXHeYGLSjhkZEnD+MDPDGbCbIAbMslkKwmygtZFy1X6s/075Yo94sf8GuSlFfPzysQrWZQ== - -"@types/node@^14.14.31": - version "14.18.48" - resolved "https://registry.yarnpkg.com/@types/node/-/node-14.18.48.tgz#ee5c7ac6e38fd2a9e6885f15c003464cf2da343c" - integrity sha512-iL0PIMwejpmuVHgfibHpfDwOdsbmB50wr21X71VnF5d7SsBF7WK+ZvP/SCcFm7Iwb9iiYSap9rlrdhToNAWdxg== - -"@types/semver@^7.5.6": - version "7.5.6" - resolved "https://registry.yarnpkg.com/@types/semver/-/semver-7.5.6.tgz#c65b2bfce1bec346582c07724e3f8c1017a20339" - integrity sha512-dn1l8LaMea/IjDoHNd9J52uBbInB796CDffS6VdIxvqYCPSG0V0DzHp76GpaWnlhg88uYyPbXCDIowa86ybd5A== - -"@types/sinonjs__fake-timers@8.1.1": - version "8.1.1" - resolved "https://registry.yarnpkg.com/@types/sinonjs__fake-timers/-/sinonjs__fake-timers-8.1.1.tgz#b49c2c70150141a15e0fa7e79cf1f92a72934ce3" - integrity sha512-0kSuKjAS0TrGLJ0M/+8MaFkGsQhZpB6pxOmvS3K8FYI72K//YmdfoW9X2qPsAKh1mkwxGD5zib9s1FIFed6E8g== - -"@types/sizzle@^2.3.2": - version "2.3.3" - resolved "https://registry.yarnpkg.com/@types/sizzle/-/sizzle-2.3.3.tgz#ff5e2f1902969d305225a047c8a0fd5c915cebef" - integrity sha512-JYM8x9EGF163bEyhdJBpR2QX1R5naCJHC8ucJylJ3w9/CVBaskdQ8WqBf8MmQrd1kRvp/a4TS8HJ+bxzR7ZJYQ== - -"@types/yauzl@^2.9.1": - version "2.10.0" - resolved "https://registry.yarnpkg.com/@types/yauzl/-/yauzl-2.10.0.tgz#b3248295276cf8c6f153ebe6a9aba0c988cb2599" - integrity sha512-Cn6WYCm0tXv8p6k+A8PvbDG763EDpBoTzHdA+Q/MF6H3sapGjCm9NzoaJncJS9tUKSuCoDs9XHxYYsQDgxR6kw== - dependencies: - "@types/node" "*" - -"@typescript-eslint/types@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/types/-/types-5.62.0.tgz#258607e60effa309f067608931c3df6fed41fd2f" - integrity sha512-87NVngcbVXUahrRTqIK27gD2t5Cu1yuCXxbLcFtCzZGlfyVWWh8mLHkoxzjsB6DDNnvdL+fW8MiwPEJyGJQDgQ== - -"@typescript-eslint/typescript-estree@^5.59.5": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/typescript-estree/-/typescript-estree-5.62.0.tgz#7d17794b77fabcac615d6a48fb143330d962eb9b" - integrity sha512-CmcQ6uY7b9y694lKdRB8FEel7JbU/40iSAPomu++SjLMntB+2Leay2LO6i8VnJk58MtE9/nQSFIH6jpyRWyYzA== - dependencies: - "@typescript-eslint/types" "5.62.0" - "@typescript-eslint/visitor-keys" "5.62.0" - debug "^4.3.4" - globby "^11.1.0" - is-glob "^4.0.3" - semver "^7.3.7" - tsutils "^3.21.0" - -"@typescript-eslint/visitor-keys@5.62.0": - version "5.62.0" - resolved "https://registry.yarnpkg.com/@typescript-eslint/visitor-keys/-/visitor-keys-5.62.0.tgz#2174011917ce582875954ffe2f6912d5931e353e" - integrity sha512-07ny+LHRzQXepkGg6w0mFY41fVUNBrL2Roj/++7V1txKugfjm/Ci/qSND03r2RhlJhJYMcTn9AhhSSqQp0Ysyw== - dependencies: - "@typescript-eslint/types" "5.62.0" - eslint-visitor-keys "^3.3.0" - -acorn-walk@^8.1.1, acorn-walk@^8.2.0: - version "8.3.1" - resolved "https://registry.yarnpkg.com/acorn-walk/-/acorn-walk-8.3.1.tgz#2f10f5b69329d90ae18c58bf1fa8fccd8b959a43" - integrity sha512-TgUZgYvqZprrl7YldZNoa9OciCAyZR+Ejm9eXzKCmjsF5IKp/wgQ7Z/ZpjpGTIUPwrHQIcYeI8qDh4PsEwxMbw== - -acorn@^8.4.1: - version "8.11.2" - resolved "https://registry.yarnpkg.com/acorn/-/acorn-8.11.2.tgz#ca0d78b51895be5390a5903c5b3bdcdaf78ae40b" - integrity sha512-nc0Axzp/0FILLEVsm4fNwLCwMttvhEI263QtVPQcbpfZZ3ts0hLsZGOpE6czNlid7CJ9MlyH8reXkpsf3YUY4w== - -aggregate-error@^3.0.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/aggregate-error/-/aggregate-error-3.1.0.tgz#92670ff50f5359bdb7a3e0d40d0ec30c5737687a" - integrity sha512-4I7Td01quW/RpocfNayFdFVk1qSuoh0E7JrbRJ16nH01HhKFQ88INq9Sd+nd72zqRySlr9BmDA8xlEJ6vJMrYA== - dependencies: - clean-stack "^2.0.0" - indent-string "^4.0.0" - -ansi-colors@^4.1.1: - version "4.1.3" - resolved "https://registry.yarnpkg.com/ansi-colors/-/ansi-colors-4.1.3.tgz#37611340eb2243e70cc604cad35d63270d48781b" - integrity sha512-/6w/C21Pm1A7aZitlI5Ni/2J6FFQN8i1Cvz3kHABAAbw93v/NlvKdVOqz7CCWz/3iv/JplRSEEZ83XION15ovw== - -ansi-escapes@^4.3.0: - version "4.3.2" - resolved "https://registry.yarnpkg.com/ansi-escapes/-/ansi-escapes-4.3.2.tgz#6b2291d1db7d98b6521d5f1efa42d0f3a9feb65e" - integrity sha512-gKXj5ALrKWQLsYG9jlTRmR/xKluxHV+Z9QEwNIgCfM1/uwPMCuzVVnh5mwTd+OuBZcwSIMbqssNWRm1lE51QaQ== - dependencies: - type-fest "^0.21.3" - -ansi-regex@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/ansi-regex/-/ansi-regex-5.0.1.tgz#082cb2c89c9fe8659a311a53bd6a4dc5301db304" - integrity sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ== - -ansi-styles@^4.0.0, ansi-styles@^4.1.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.3.0.tgz#edd803628ae71c04c85ae7a0906edad34b648937" - integrity sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg== - dependencies: - color-convert "^2.0.1" - -app-module-path@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/app-module-path/-/app-module-path-2.2.0.tgz#641aa55dfb7d6a6f0a8141c4b9c0aa50b6c24dd5" - integrity sha512-gkco+qxENJV+8vFcDiiFhuoSvRXb2a/QPqpSoWhVz829VNJfOTnELbBmPmNKFxf3xdNnw4DWCkzkDaavcX/1YQ== - -arch@^2.2.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/arch/-/arch-2.2.0.tgz#1bc47818f305764f23ab3306b0bfc086c5a29d11" - integrity sha512-Of/R0wqp83cgHozfIYLbBMnej79U/SVGOOyuB3VVFv1NRM/PSFMK12x9KVtiYzJqmnU5WR2qp0Z5rHb7sWGnFQ== - -arg@^4.1.0: - version "4.1.3" - resolved "https://registry.yarnpkg.com/arg/-/arg-4.1.3.tgz#269fc7ad5b8e42cb63c896d5666017261c144089" - integrity sha512-58S9QDqG0Xx27YwPSt9fJxivjYl432YCwfDMfZ+71RAqUrZef7LrKQZ3LHLOwCS4FLNBplP533Zx895SeOCHvA== - -arg@^5.0.1, arg@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/arg/-/arg-5.0.2.tgz#c81433cc427c92c4dcf4865142dbca6f15acd59c" - integrity sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg== - -array-buffer-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/array-buffer-byte-length/-/array-buffer-byte-length-1.0.0.tgz#fabe8bc193fea865f317fe7807085ee0dee5aead" - integrity sha512-LPuwb2P+NrQw3XhxGc36+XSvuBPopovXYTR9Ew++Du9Yb/bx5AzBfrIsBoj0EZUifjQU+sHL21sseZ3jerWO/A== - dependencies: - call-bind "^1.0.2" - is-array-buffer "^3.0.1" - -array-union@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/array-union/-/array-union-2.1.0.tgz#b798420adbeb1de828d84acd8a2e23d3efe85e8d" - integrity sha512-HGyxoOTYUyCM6stUe6EJgnd4EoewAI7zMdfqO+kGjnlZmBDz/cR5pf8r/cR4Wq60sL/p0IkcjUEEPwS3GFrIyw== - -arraybuffer.prototype.slice@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/arraybuffer.prototype.slice/-/arraybuffer.prototype.slice-1.0.2.tgz#98bd561953e3e74bb34938e77647179dfe6e9f12" - integrity sha512-yMBKppFur/fbHu9/6USUe03bZ4knMYiwFBcyiaXB8Go0qNehwX6inYPzK9U0NeQvGxKthcmHcaR8P5MStSRBAw== - dependencies: - array-buffer-byte-length "^1.0.0" - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - is-array-buffer "^3.0.2" - is-shared-array-buffer "^1.0.2" - -asn1@~0.2.3: - version "0.2.6" - resolved "https://registry.yarnpkg.com/asn1/-/asn1-0.2.6.tgz#0d3a7bb6e64e02a90c0303b31f292868ea09a08d" - integrity sha512-ix/FxPn0MDjeyJ7i/yoHGFt/EX6LyNbxSEhPPXODPL+KB0VPk86UYfL0lMdy+KCnv+fmvIzySwaK5COwqVbWTQ== - dependencies: - safer-buffer "~2.1.0" - -assert-plus@1.0.0, assert-plus@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/assert-plus/-/assert-plus-1.0.0.tgz#f12e0f3c5d77b0b1cdd9146942e4e96c1e4dd525" - integrity sha512-NfJ4UzBCcQGLDlQq7nHxH+tv3kyZ0hHQqF5BO6J7tNJeP5do1llPr8dZ8zHonfhAu0PHAdMkSo+8o0wxg9lZWw== - -ast-module-types@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/ast-module-types/-/ast-module-types-5.0.0.tgz#32b2b05c56067ff38e95df66f11d6afd6c9ba16b" - integrity sha512-JvqziE0Wc0rXQfma0HZC/aY7URXHFuZV84fJRtP8u+lhp0JYCNd5wJzVXP45t0PH0Mej3ynlzvdyITYIu0G4LQ== - -astral-regex@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/astral-regex/-/astral-regex-2.0.0.tgz#483143c567aeed4785759c0865786dc77d7d2e31" - integrity sha512-Z7tMw1ytTXt5jqMcOP+OQteU1VuNK9Y02uuJtKQ1Sv69jXQKKg5cibLwGJow8yzZP+eAc18EmLGPal0bp36rvQ== - -async@^3.2.0: - version "3.2.4" - resolved "https://registry.yarnpkg.com/async/-/async-3.2.4.tgz#2d22e00f8cddeb5fde5dd33522b56d1cf569a81c" - integrity sha512-iAB+JbDEGXhyIUavoDl9WP/Jj106Kz9DEn1DPgYw5ruDn0e3Wgi3sKFm55sASdGBNOQB8F59d9qQ7deqrHA8wQ== - -asynckit@^0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/asynckit/-/asynckit-0.4.0.tgz#c79ed97f7f34cb8f2ba1bc9790bcc366474b4b79" - integrity sha512-Oei9OH4tRh0YqU3GxhX79dM/mwVgvbZJaSNaRk+bshkj0S5cfHcgYakreBjrHwatXKbz+IoIdYLxrKim2MjW0Q== - -at-least-node@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/at-least-node/-/at-least-node-1.0.0.tgz#602cd4b46e844ad4effc92a8011a3c46e0238dc2" - integrity sha512-+q/t7Ekv1EDY2l6Gda6LLiX14rU9TV20Wa3ofeQmwPFZbOMo9DXrLbOjFaaclkXKWidIaopwAObQDqwWtGUjqg== - -available-typed-arrays@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/available-typed-arrays/-/available-typed-arrays-1.0.5.tgz#92f95616501069d07d10edb2fc37d3e1c65123b7" - integrity sha512-DMD0KiN46eipeziST1LPP/STfDU0sufISXmjSgvVsoU2tqxctQeASejWcfNtxYKqETM1UxQ8sp2OrSBWpHY6sw== - -aws-sign2@~0.7.0: - version "0.7.0" - resolved "https://registry.yarnpkg.com/aws-sign2/-/aws-sign2-0.7.0.tgz#b46e890934a9591f2d2f6f86d7e6a9f1b3fe76a8" - integrity sha512-08kcGqnYf/YmjoRhfxyu+CLxBjUtHLXLXX/vUfx9l2LYzG3c1m61nrpyFUZI6zeS+Li/wWMMidD9KgrqtGq3mA== - -aws4@^1.8.0: - version "1.12.0" - resolved "https://registry.yarnpkg.com/aws4/-/aws4-1.12.0.tgz#ce1c9d143389679e253b314241ea9aa5cec980d3" - integrity sha512-NmWvPnx0F1SfrQbYwOi7OeaNGokp9XhzNioJ/CSBs8Qa4vxug81mhJEAVZwxXuBmYB5KDRfMq/F3RR0BIU7sWg== - -balanced-match@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/balanced-match/-/balanced-match-1.0.2.tgz#e83e3a7e3f300b34cb9d87f615fa0cbf357690ee" - integrity sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw== - -base64-js@^1.3.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/base64-js/-/base64-js-1.5.1.tgz#1b1b440160a5bf7ad40b650f095963481903930a" - integrity sha512-AKpaYlHn8t4SVbOHCy+b5+KKgvR4vrsD8vbvrbiQJps7fKDTkjkDry6ji0rUJjC0kzbNePLwzxq8iypo41qeWA== - -bcrypt-pbkdf@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/bcrypt-pbkdf/-/bcrypt-pbkdf-1.0.2.tgz#a4301d389b6a43f9b67ff3ca11a3f6637e360e9e" - integrity sha512-qeFIXtP4MSoi6NLqO12WfqARWWuCKi2Rn/9hJLEmtB5yTNr9DqFWkJRCf2qShWzPeAMRnOgCrq0sg/KLv5ES9w== - dependencies: - tweetnacl "^0.14.3" - -blob-util@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/blob-util/-/blob-util-2.0.2.tgz#3b4e3c281111bb7f11128518006cdc60b403a1eb" - integrity sha512-T7JQa+zsXXEa6/8ZhHcQEW1UFfVM49Ts65uBkFL6fz2QmrElqmbajIDJvuA0tEhRe5eIjpV9ZF+0RfZR9voJFQ== - -bluebird@^3.7.2: - version "3.7.2" - resolved "https://registry.yarnpkg.com/bluebird/-/bluebird-3.7.2.tgz#9f229c15be272454ffa973ace0dbee79a1b0c36f" - integrity sha512-XpNj6GDQzdfW+r2Wnn7xiSAd7TM3jzkxGXBGTtWKuSXv1xUV+azxAm8jdWZN06QTQk+2N2XB9jRDkvbmQmcRtg== - -brace-expansion@^1.1.7: - version "1.1.11" - resolved "https://registry.yarnpkg.com/brace-expansion/-/brace-expansion-1.1.11.tgz#3c7fcbf529d87226f3d2f52b966ff5271eb441dd" - integrity sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA== - dependencies: - balanced-match "^1.0.0" - concat-map "0.0.1" - -braces@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/braces/-/braces-3.0.2.tgz#3454e1a462ee8d599e236df336cd9ea4f8afe107" - integrity sha512-b8um+L1RzM3WDSzvhm6gIz1yfTbBt6YTlcEKAvsmqCZZFw46z626lVj9j1yEPW33H5H+lBQpZMP1k8l+78Ha0A== - dependencies: - fill-range "^7.0.1" - -buffer-crc32@~0.2.3: - version "0.2.13" - resolved "https://registry.yarnpkg.com/buffer-crc32/-/buffer-crc32-0.2.13.tgz#0d333e3f00eac50aa1454abd30ef8c2a5d9a7242" - integrity sha512-VO9Ht/+p3SN7SKWqcrgEzjGbRSJYTx+Q1pTQC0wrWqHx0vpJraQ6GtHx8tvcg1rlK1byhU5gccxgOgj7B0TDkQ== - -buffer@^5.6.0: - version "5.7.1" - resolved "https://registry.yarnpkg.com/buffer/-/buffer-5.7.1.tgz#ba62e7c13133053582197160851a8f648e99eed0" - integrity sha512-EHcyIPBQ4BSGlvjB16k5KgAJ27CIsHY/2JBmCRReo48y9rQ3MaUzWX3KVlBa4U7MyX02HdVj0K7C3WaB3ju7FQ== - dependencies: - base64-js "^1.3.1" - ieee754 "^1.1.13" - -builtins@^5.0.0: - version "5.0.1" - resolved "https://registry.yarnpkg.com/builtins/-/builtins-5.0.1.tgz#87f6db9ab0458be728564fa81d876d8d74552fa9" - integrity sha512-qwVpFEHNfhYJIzNRBvd2C1kyo6jz3ZSMPyyuR47OPdiKWlbYnZNyDWuyR175qDnAJLiCo5fBBqPb3RiXgWlkOQ== - dependencies: - semver "^7.0.0" - -cachedir@^2.3.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/cachedir/-/cachedir-2.3.0.tgz#0c75892a052198f0b21c7c1804d8331edfcae0e8" - integrity sha512-A+Fezp4zxnit6FanDmv9EqXNAi3vt9DWp51/71UEhXukb7QUuvtv9344h91dyAxuTLoSYJFU299qzR3tzwPAhw== - -call-bind@^1.0.0: - version "1.0.2" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.2.tgz#b1d4e89e688119c3c9a903ad30abb2f6a919be3c" - integrity sha512-7O+FbCihrB5WGbFYesctwmTKae6rOiIzmz1icreWJ+0aA7LJfuqhEso2T9ncpcFtzMQtzXf2QGGueWJGTYsqrA== - dependencies: - function-bind "^1.1.1" - get-intrinsic "^1.0.2" - -call-bind@^1.0.2, call-bind@^1.0.4, call-bind@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/call-bind/-/call-bind-1.0.5.tgz#6fa2b7845ce0ea49bf4d8b9ef64727a2c2e2e513" - integrity sha512-C3nQxfFZxFRVoJoGKKI8y3MOEo129NQ+FgQ08iye+Mk4zNZZGdjfs06bVTr+DBSlA66Q2VEcMki/cUCP4SercQ== - dependencies: - function-bind "^1.1.2" - get-intrinsic "^1.2.1" - set-function-length "^1.1.1" - -caseless@~0.12.0: - version "0.12.0" - resolved "https://registry.yarnpkg.com/caseless/-/caseless-0.12.0.tgz#1b681c21ff84033c826543090689420d187151dc" - integrity sha512-4tYFyifaFfGacoiObjJegolkwSU4xQNGbVgUiNYVUxbQ2x2lUsFvY4hVgVzGiIe6WLOPqycWXA40l+PWsxthUw== - -chalk@^4.1.0, chalk@^4.1.2: - version "4.1.2" - resolved "https://registry.yarnpkg.com/chalk/-/chalk-4.1.2.tgz#aac4e2b7734a740867aeb16bf02aad556a1e7a01" - integrity sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA== - dependencies: - ansi-styles "^4.1.0" - supports-color "^7.1.0" - -check-more-types@^2.24.0: - version "2.24.0" - resolved "https://registry.yarnpkg.com/check-more-types/-/check-more-types-2.24.0.tgz#1420ffb10fd444dcfc79b43891bbfffd32a84600" - integrity sha512-Pj779qHxV2tuapviy1bSZNEL1maXr13bPYpsvSDB68HlYcYuhlDrmGd63i0JHMCLKzc7rUSNIrpdJlhVlNwrxA== - -ci-info@^3.2.0: - version "3.8.0" - resolved "https://registry.yarnpkg.com/ci-info/-/ci-info-3.8.0.tgz#81408265a5380c929f0bc665d62256628ce9ef91" - integrity sha512-eXTggHWSooYhq49F2opQhuHWgzucfF2YgODK4e1566GQs5BIfP30B0oenwBJHfWxAs2fyPB1s7Mg949zLf61Yw== - -clean-stack@^2.0.0: - version "2.2.0" - resolved "https://registry.yarnpkg.com/clean-stack/-/clean-stack-2.2.0.tgz#ee8472dbb129e727b31e8a10a427dee9dfe4008b" - integrity sha512-4diC9HaTE+KRAMWhDhrGOECgWZxoevMc5TlkObMqNSsVU62PYzXZ/SMTjzyGAFF1YusgxGcSWTEXBhp0CPwQ1A== - -cli-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/cli-cursor/-/cli-cursor-3.1.0.tgz#264305a7ae490d1d03bf0c9ba7c925d1753af307" - integrity sha512-I/zHAwsKf9FqGoXM4WWRACob9+SNukZTd94DWF57E4toouRulbCxcUh6RKUEOQlYTHJnzkPMySvPNaaSLNfLZw== - dependencies: - restore-cursor "^3.1.0" - -cli-table3@~0.6.1: - version "0.6.3" - resolved "https://registry.yarnpkg.com/cli-table3/-/cli-table3-0.6.3.tgz#61ab765aac156b52f222954ffc607a6f01dbeeb2" - integrity sha512-w5Jac5SykAeZJKntOxJCrm63Eg5/4dhMWIcuTbo9rpE+brgaSZo0RuNJZeOyMgsUdhDeojvgyQLmjI+K50ZGyg== - dependencies: - string-width "^4.2.0" - optionalDependencies: - "@colors/colors" "1.5.0" - -cli-truncate@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/cli-truncate/-/cli-truncate-2.1.0.tgz#c39e28bf05edcde5be3b98992a22deed5a2b93c7" - integrity sha512-n8fOixwDD6b/ObinzTrp1ZKFzbgvKZvuz/TvejnLn1aQfC6r52XEx85FmuC+3HI+JM7coBRXUvNqEU2PHVrHpg== - dependencies: - slice-ansi "^3.0.0" - string-width "^4.2.0" - -clone@^1.0.2: - version "1.0.4" - resolved "https://registry.yarnpkg.com/clone/-/clone-1.0.4.tgz#da309cc263df15994c688ca902179ca3c7cd7c7e" - integrity sha512-JQHZ2QMW6l3aH/j6xCqQThY/9OH4D/9ls34cgkUBiEeocRTU04tHfKPBsUK1PqZCUQM7GiA0IIXJSuXHI64Kbg== - -color-convert@^2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/color-convert/-/color-convert-2.0.1.tgz#72d3a68d598c9bdb3af2ad1e84f21d896abd4de3" - integrity sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ== - dependencies: - color-name "~1.1.4" - -color-name@^1.1.4, color-name@~1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/color-name/-/color-name-1.1.4.tgz#c2a09a87acbde69543de6f63fa3995c826c536a2" - integrity sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA== - -colorette@^2.0.16: - version "2.0.20" - resolved "https://registry.yarnpkg.com/colorette/-/colorette-2.0.20.tgz#9eb793e6833067f7235902fcd3b09917a000a95a" - integrity sha512-IfEDxwoWIjkeXL1eXcDiow4UbKjhLdq6/EuSVR9GMN7KVH3r9gQ83e73hsz1Nd1T3ijd5xv1wcWRYO+D6kCI2w== - -combined-stream@^1.0.6, combined-stream@~1.0.6: - version "1.0.8" - resolved "https://registry.yarnpkg.com/combined-stream/-/combined-stream-1.0.8.tgz#c3d45a8b34fd730631a110a8a2520682b31d5a7f" - integrity sha512-FQN4MRfuJeHf7cBbBMJFXhKSDq+2kAArBlmRBvcvFE5BB1HZKXtSFASDhdlz9zOYwxh8lDdnvmMOe/+5cdoEdg== - dependencies: - delayed-stream "~1.0.0" - -commander@^10.0.1: - version "10.0.1" - resolved "https://registry.yarnpkg.com/commander/-/commander-10.0.1.tgz#881ee46b4f77d1c1dccc5823433aa39b022cbe06" - integrity sha512-y4Mg2tXshplEbSGzx7amzPwKKOCGuoSRP/CjEdwwk0FOGlUbq6lKuoyDZTNZkmxHdJtp54hdfY/JUrdL7Xfdug== - -commander@^5.1.0: - version "5.1.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-5.1.0.tgz#46abbd1652f8e059bddaef99bbdcb2ad9cf179ae" - integrity sha512-P0CysNDQ7rtVw4QIQtm+MRxV66vKFSvlsQvGYXZWR3qFU0jlMKHZZZgw8e+8DSah4UDKMqnknRDQz+xuQXQ/Zg== - -commander@^7.2.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/commander/-/commander-7.2.0.tgz#a36cb57d0b501ce108e4d20559a150a391d97ab7" - integrity sha512-QrWXB+ZQSVPmIWIhtEO9H+gwHaMGYiF5ChvoJ+K9ZGHG/sVsa6yiesAD1GC/x46sET00Xlwo1u49RVVVzvcSkw== - -common-tags@^1.8.0: - version "1.8.2" - resolved "https://registry.yarnpkg.com/common-tags/-/common-tags-1.8.2.tgz#94ebb3c076d26032745fd54face7f688ef5ac9c6" - integrity sha512-gk/Z852D2Wtb//0I+kRFNKKE9dIIVirjoqPoA1wJU+XePVXZfGeBpk45+A1rKO4Q43prqWBNY/MiIeRLbPWUaA== - -compute-scroll-into-view@^1.0.20: - version "1.0.20" - resolved "https://registry.yarnpkg.com/compute-scroll-into-view/-/compute-scroll-into-view-1.0.20.tgz#1768b5522d1172754f5d0c9b02de3af6be506a43" - integrity sha512-UCB0ioiyj8CRjtrvaceBLqqhZCVP+1B8+NWQhmdsm0VXOJtobBCf1dBQmebCCo34qZmUwZfIH2MZLqNHazrfjg== - -concat-map@0.0.1: - version "0.0.1" - resolved "https://registry.yarnpkg.com/concat-map/-/concat-map-0.0.1.tgz#d8a96bd77fd68df7793a73036a3ba0d5405d477b" - integrity sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg== - -console.table@^0.10.0: - version "0.10.0" - resolved "https://registry.yarnpkg.com/console.table/-/console.table-0.10.0.tgz#0917025588875befd70cf2eff4bef2c6e2d75d04" - integrity sha512-dPyZofqggxuvSf7WXvNjuRfnsOk1YazkVP8FdxH4tcH2c37wc79/Yl6Bhr7Lsu00KMgy2ql/qCMuNu8xctZM8g== - dependencies: - easy-table "1.1.0" - -core-util-is@1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/core-util-is/-/core-util-is-1.0.2.tgz#b5fd54220aa2bc5ab57aab7140c940754503c1a7" - integrity sha512-3lqz5YjWTYnW6dlDa5TLaTCcShfar1e40rmcJVwCBJC6mWlFuj0eCHIElmG1g5kyuJ/GD+8Wn4FFCcz4gJPfaQ== - -create-require@^1.1.0: - version "1.1.1" - resolved "https://registry.yarnpkg.com/create-require/-/create-require-1.1.1.tgz#c1d7e8f1e5f6cfc9ff65f9cd352d37348756c333" - integrity sha512-dcKFX3jn0MpIaXjisoRvexIJVEKzaq7z2rZKxf+MSr9TkdmHmsU4m2lcLojrj/FHl8mk5VxMmYA+ftRkP/3oKQ== - -cross-spawn@^7.0.0: - version "7.0.3" - resolved "https://registry.yarnpkg.com/cross-spawn/-/cross-spawn-7.0.3.tgz#f73a85b9d5d41d045551c177e2882d4ac85728a6" - integrity sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w== - dependencies: - path-key "^3.1.0" - shebang-command "^2.0.0" - which "^2.0.1" - -cypress-promise@^1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/cypress-promise/-/cypress-promise-1.1.0.tgz#f2d66965945fe198431aaf692d5157cea9d47b25" - integrity sha512-DhIf5PJ/a0iY+Yii6n7Rbwq+9TJxU4pupXYzf9mZd8nPG0AzQrj9i+pqINv4xbI2EV1p+PKW3maCkR7oPG4GrA== - -cypress-real-events@1.10.3: - version "1.10.3" - resolved "https://registry.yarnpkg.com/cypress-real-events/-/cypress-real-events-1.10.3.tgz#e2e949ea509cc4306df6c238de1a9982d67360e5" - integrity sha512-YN3fn+CJIAM638sE6uMvv2/n3PsWowdd0rOiN6ZoyezNAMyENfuQHvccLKZpN+apGfQZYetCml6QXLYgDid2fg== - -cypress-split@^1.17.1: - version "1.17.1" - resolved "https://registry.yarnpkg.com/cypress-split/-/cypress-split-1.17.1.tgz#4dda7799aaf2cefcfdac55c6082507ad1c8fb8e3" - integrity sha512-sE7zi/Ag5o/Ymb6u0ANKMhNqeN7XaIw2Byr3HGSNIlGUc6cACsHrS+TXXzVJNnU9gO+Odb0xy88x60lUAIBP5Q== - dependencies: - "@actions/core" "^1.10.0" - arg "^5.0.2" - console.table "^0.10.0" - debug "^4.3.4" - find-cypress-specs "1.38.1" - globby "^11.1.0" - humanize-duration "^3.28.0" - -cypress@^10.11.0: - version "10.11.0" - resolved "https://registry.yarnpkg.com/cypress/-/cypress-10.11.0.tgz#e9fbdd7638bae3d8fb7619fd75a6330d11ebb4e8" - integrity sha512-lsaE7dprw5DoXM00skni6W5ElVVLGAdRUUdZjX2dYsGjbY/QnpzWZ95Zom1mkGg0hAaO/QVTZoFVS7Jgr/GUPA== - dependencies: - "@cypress/request" "^2.88.10" - "@cypress/xvfb" "^1.2.4" - "@types/node" "^14.14.31" - "@types/sinonjs__fake-timers" "8.1.1" - "@types/sizzle" "^2.3.2" - arch "^2.2.0" - blob-util "^2.0.2" - bluebird "^3.7.2" - buffer "^5.6.0" - cachedir "^2.3.0" - chalk "^4.1.0" - check-more-types "^2.24.0" - cli-cursor "^3.1.0" - cli-table3 "~0.6.1" - commander "^5.1.0" - common-tags "^1.8.0" - dayjs "^1.10.4" - debug "^4.3.2" - enquirer "^2.3.6" - eventemitter2 "6.4.7" - execa "4.1.0" - executable "^4.1.1" - extract-zip "2.0.1" - figures "^3.2.0" - fs-extra "^9.1.0" - getos "^3.2.1" - is-ci "^3.0.0" - is-installed-globally "~0.4.0" - lazy-ass "^1.6.0" - listr2 "^3.8.3" - lodash "^4.17.21" - log-symbols "^4.0.0" - minimist "^1.2.6" - ospath "^1.2.2" - pretty-bytes "^5.6.0" - proxy-from-env "1.0.0" - request-progress "^3.0.0" - semver "^7.3.2" - supports-color "^8.1.1" - tmp "~0.2.1" - untildify "^4.0.0" - yauzl "^2.10.0" - -dashdash@^1.12.0: - version "1.14.1" - resolved "https://registry.yarnpkg.com/dashdash/-/dashdash-1.14.1.tgz#853cfa0f7cbe2fed5de20326b8dd581035f6e2f0" - integrity sha512-jRFi8UDGo6j+odZiEpjazZaWqEal3w/basFjQHQEwVtZJGDpxbH1MeYluwCS8Xq5wmLJooDlMgvVarmWfGM44g== - dependencies: - assert-plus "^1.0.0" - -dayjs@^1.10.4: - version "1.11.7" - resolved "https://registry.yarnpkg.com/dayjs/-/dayjs-1.11.7.tgz#4b296922642f70999544d1144a2c25730fce63e2" - integrity sha512-+Yw9U6YO5TQohxLcIkrXBeY73WP3ejHWVvx8XCk3gxvQDCTEmS48ZrSZCKciI7Bhl/uCMyxYtE9UqRILmFphkQ== - -debug@4.3.4, debug@^4.1.1, debug@^4.3.1, debug@^4.3.2, debug@^4.3.3, debug@^4.3.4: - version "4.3.4" - resolved "https://registry.yarnpkg.com/debug/-/debug-4.3.4.tgz#1319f6579357f2338d3337d2cdd4914bb5dcc865" - integrity sha512-PRWFHuSU3eDtQJPvnNY7Jcket1j0t5OuOsFzPPzsekD52Zl8qUfFIPEiswXqIvHWGVHOgX+7G/vCNNhehwxfkQ== - dependencies: - ms "2.1.2" - -debug@^3.1.0: - version "3.2.7" - resolved "https://registry.yarnpkg.com/debug/-/debug-3.2.7.tgz#72580b7e9145fb39b6676f9c5e5fb100b934179a" - integrity sha512-CFjzYYAi4ThfiQvizrFQevTTXHtnCqWfe7x1AhgEscTz6ZbLbfoLRLPugTQyBth6f8ZERVUSyWHFD/7Wu4t1XQ== - dependencies: - ms "^2.1.1" - -defaults@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/defaults/-/defaults-1.0.4.tgz#b0b02062c1e2aa62ff5d9528f0f98baa90978d7a" - integrity sha512-eFuaLoy/Rxalv2kr+lqMlUnrDWV+3j4pljOIJgLIhI058IQfWJ7vXhyEIHu+HtC738klGALYxOKDO0bQP3tg8A== - dependencies: - clone "^1.0.2" - -define-data-property@^1.0.1, define-data-property@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/define-data-property/-/define-data-property-1.1.1.tgz#c35f7cd0ab09883480d12ac5cb213715587800b3" - integrity sha512-E7uGkTzkk1d0ByLeSc6ZsFS79Axg+m1P/VsgYsxHgiuc3tFSj+MjMIwe90FC4lOAZzNBdY7kkO2P2wKdsQ1vgQ== - dependencies: - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -define-properties@^1.1.3, define-properties@^1.2.0, define-properties@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/define-properties/-/define-properties-1.2.1.tgz#10781cc616eb951a80a034bafcaa7377f6af2b6c" - integrity sha512-8QmQKqEASLd5nx0U1B1okLElbUuuttJ/AnYmRXbbbGDWh6uS208EjD4Xqq/I9wK7u0v6O08XhTWnt5XtEbR6Dg== - dependencies: - define-data-property "^1.0.1" - has-property-descriptors "^1.0.0" - object-keys "^1.1.1" - -delayed-stream@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/delayed-stream/-/delayed-stream-1.0.0.tgz#df3ae199acadfb7d440aaae0b29e2272b24ec619" - integrity sha512-ZySD7Nf91aLB0RxL4KGrKHBXl7Eds1DAmEdcoVawXnLD7SDhpNgtuII2aAkg7a7QS41jxPSZ17p4VdGnMHk3MQ== - -dependency-tree@^10.0.9: - version "10.0.9" - resolved "https://registry.yarnpkg.com/dependency-tree/-/dependency-tree-10.0.9.tgz#0c6c0dbeb0c5ec2cf83bf755f30e9cb12e7b4ac7" - integrity sha512-dwc59FRIsht+HfnTVM0BCjJaEWxdq2YAvEDy4/Hn6CwS3CBWMtFnL3aZGAkQn3XCYxk/YcTDE4jX2Q7bFTwCjA== - dependencies: - commander "^10.0.1" - filing-cabinet "^4.1.6" - precinct "^11.0.5" - typescript "^5.0.4" - -detective-amd@^5.0.2: - version "5.0.2" - resolved "https://registry.yarnpkg.com/detective-amd/-/detective-amd-5.0.2.tgz#579900f301c160efe037a6377ec7e937434b2793" - integrity sha512-XFd/VEQ76HSpym80zxM68ieB77unNuoMwopU2TFT/ErUk5n4KvUTwW4beafAVUugrjV48l4BmmR0rh2MglBaiA== - dependencies: - ast-module-types "^5.0.0" - escodegen "^2.0.0" - get-amd-module-type "^5.0.1" - node-source-walk "^6.0.1" - -detective-cjs@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/detective-cjs/-/detective-cjs-5.0.1.tgz#836ad51c6de4863efc7c419ec243694f760ff8b2" - integrity sha512-6nTvAZtpomyz/2pmEmGX1sXNjaqgMplhQkskq2MLrar0ZAIkHMrDhLXkRiK2mvbu9wSWr0V5/IfiTrZqAQMrmQ== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.0" - -detective-es6@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/detective-es6/-/detective-es6-4.0.1.tgz#38d5d49a6d966e992ef8f2d9bffcfe861a58a88a" - integrity sha512-k3Z5tB4LQ8UVHkuMrFOlvb3GgFWdJ9NqAa2YLUU/jTaWJIm+JJnEh4PsMc+6dfT223Y8ACKOaC0qcj7diIhBKw== - dependencies: - node-source-walk "^6.0.1" - -detective-postcss@^6.1.3: - version "6.1.3" - resolved "https://registry.yarnpkg.com/detective-postcss/-/detective-postcss-6.1.3.tgz#51a2d4419327ad85d0af071c7054c79fafca7e73" - integrity sha512-7BRVvE5pPEvk2ukUWNQ+H2XOq43xENWbH0LcdCE14mwgTBEAMoAx+Fc1rdp76SmyZ4Sp48HlV7VedUnP6GA1Tw== - dependencies: - is-url "^1.2.4" - postcss "^8.4.23" - postcss-values-parser "^6.0.2" - -detective-sass@^5.0.3: - version "5.0.3" - resolved "https://registry.yarnpkg.com/detective-sass/-/detective-sass-5.0.3.tgz#63e54bc9b32f4bdbd9d5002308f9592a3d3a508f" - integrity sha512-YsYT2WuA8YIafp2RVF5CEfGhhyIVdPzlwQgxSjK+TUm3JoHP+Tcorbk3SfG0cNZ7D7+cYWa0ZBcvOaR0O8+LlA== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -detective-scss@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/detective-scss/-/detective-scss-4.0.3.tgz#79758baa0158f72bfc4481eb7e21cc3b5f1ea6eb" - integrity sha512-VYI6cHcD0fLokwqqPFFtDQhhSnlFWvU614J42eY6G0s8c+MBhi9QAWycLwIOGxlmD8I/XvGSOUV1kIDhJ70ZPg== - dependencies: - gonzales-pe "^4.3.0" - node-source-walk "^6.0.1" - -detective-stylus@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/detective-stylus/-/detective-stylus-4.0.0.tgz#ce97b6499becdc291de7b3c11df8c352c1eee46e" - integrity sha512-TfPotjhszKLgFBzBhTOxNHDsutIxx9GTWjrL5Wh7Qx/ydxKhwUrlSFeLIn+ZaHPF+h0siVBkAQSuy6CADyTxgQ== - -detective-typescript@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/detective-typescript/-/detective-typescript-11.1.0.tgz#2deea5364cae1f0d9d3688bc596e662b049438cc" - integrity sha512-Mq8egjnW2NSCkzEb/Az15/JnBI/Ryyl6Po0Y+0mABTFvOS6DAyUGRZqz1nyhu4QJmWWe0zaGs/ITIBeWkvCkGw== - dependencies: - "@typescript-eslint/typescript-estree" "^5.59.5" - ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - typescript "^5.0.4" - -diff@^4.0.1: - version "4.0.2" - resolved "https://registry.yarnpkg.com/diff/-/diff-4.0.2.tgz#60f3aecb89d5fae520c11aa19efc2bb982aade7d" - integrity sha512-58lmxKSA4BNyLz+HHMUzlOEpg09FV+ev6ZMe3vJihgdxzgcwZ8VoEEPmALCZG9LmqfVoNMMKpttIYTVG6uDY7A== - -dir-glob@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/dir-glob/-/dir-glob-3.0.1.tgz#56dbf73d992a4a93ba1584f4534063fd2e41717f" - integrity sha512-WkrWp9GR4KXfKGYzOLmTuGVi1UWFfws377n9cc55/tb6DuqyF6pcQ5AbiHEshaDpY9v6oaSr2XCDidGmMwdzIA== - dependencies: - path-type "^4.0.0" - -direction@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/direction/-/direction-1.0.4.tgz#2b86fb686967e987088caf8b89059370d4837442" - integrity sha512-GYqKi1aH7PJXxdhTeZBFrg8vUBeKXi+cNprXsC1kpJcbcVnV9wBsrOu1cQEdG0WeQwlfHiy3XvnKfIrJ2R0NzQ== - -duplexer@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/duplexer/-/duplexer-0.1.2.tgz#3abe43aef3835f8ae077d136ddce0f276b0400e6" - integrity sha512-jtD6YG370ZCIi/9GTaJKQxWTZD045+4R4hTk/x1UyoqadyJ9x9CgSi1RlVDQF8U2sxLLSnFkCaMihqljHIWgMg== - -easy-table@1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/easy-table/-/easy-table-1.1.0.tgz#86f9ab4c102f0371b7297b92a651d5824bc8cb73" - integrity sha512-oq33hWOSSnl2Hoh00tZWaIPi1ievrD9aFG82/IgjlycAnW9hHx5PkJiXpxPsgEE+H7BsbVQXFVFST8TEXS6/pA== - optionalDependencies: - wcwidth ">=1.0.1" - -ecc-jsbn@~0.1.1: - version "0.1.2" - resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.2.tgz#3a83a904e54353287874c564b7549386849a98c9" - integrity sha512-eh9O+hwRHNbG4BLTjEl3nw044CkGm5X6LoaCf7LPp7UU8Qrt47JYNi6nPX8xjW97TKGKm1ouctg0QSpZe9qrnw== - dependencies: - jsbn "~0.1.0" - safer-buffer "^2.1.0" - -emoji-regex@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/emoji-regex/-/emoji-regex-8.0.0.tgz#e818fd69ce5ccfcb404594f842963bf53164cc37" - integrity sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A== - -end-of-stream@^1.1.0: - version "1.4.4" - resolved "https://registry.yarnpkg.com/end-of-stream/-/end-of-stream-1.4.4.tgz#5ae64a5f45057baf3626ec14da0ca5e4b2431eb0" - integrity sha512-+uw1inIHVPQoaVuHzRyXd21icM+cnt4CzD5rW+NC1wjOUSTOs+Te7FOv7AhN7vS9x/oIyhLP5PR1H+phQAHu5Q== - dependencies: - once "^1.4.0" - -enhanced-resolve@^5.14.1: - version "5.15.0" - resolved "https://registry.yarnpkg.com/enhanced-resolve/-/enhanced-resolve-5.15.0.tgz#1af946c7d93603eb88e9896cee4904dc012e9c35" - integrity sha512-LXYT42KJ7lpIKECr2mAXIaMldcNCh/7E0KBKOu4KSfkHmP+mZmSs+8V5gBAqisWBy0OO4W5Oyys0GO1Y8KtdKg== - dependencies: - graceful-fs "^4.2.4" - tapable "^2.2.0" - -enquirer@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/enquirer/-/enquirer-2.3.6.tgz#2a7fe5dd634a1e4125a975ec994ff5456dc3734d" - integrity sha512-yjNnPr315/FjS4zIsUxYguYUPP2e1NK4d7E7ZOLiyYCcbFBiTMyID+2wvm2w6+pZ/odMA7cRkjhsPbltwBOrLg== - dependencies: - ansi-colors "^4.1.1" - -es-abstract@^1.22.1: - version "1.22.3" - resolved "https://registry.yarnpkg.com/es-abstract/-/es-abstract-1.22.3.tgz#48e79f5573198de6dee3589195727f4f74bc4f32" - integrity sha512-eiiY8HQeYfYH2Con2berK+To6GrK2RxbPawDkGq4UiCQQfZHb6wX9qQqkbpPqaxQFcl8d9QzZqo0tGE0VcrdwA== - dependencies: - array-buffer-byte-length "^1.0.0" - arraybuffer.prototype.slice "^1.0.2" - available-typed-arrays "^1.0.5" - call-bind "^1.0.5" - es-set-tostringtag "^2.0.1" - es-to-primitive "^1.2.1" - function.prototype.name "^1.1.6" - get-intrinsic "^1.2.2" - get-symbol-description "^1.0.0" - globalthis "^1.0.3" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - internal-slot "^1.0.5" - is-array-buffer "^3.0.2" - is-callable "^1.2.7" - is-negative-zero "^2.0.2" - is-regex "^1.1.4" - is-shared-array-buffer "^1.0.2" - is-string "^1.0.7" - is-typed-array "^1.1.12" - is-weakref "^1.0.2" - object-inspect "^1.13.1" - object-keys "^1.1.1" - object.assign "^4.1.4" - regexp.prototype.flags "^1.5.1" - safe-array-concat "^1.0.1" - safe-regex-test "^1.0.0" - string.prototype.trim "^1.2.8" - string.prototype.trimend "^1.0.7" - string.prototype.trimstart "^1.0.7" - typed-array-buffer "^1.0.0" - typed-array-byte-length "^1.0.0" - typed-array-byte-offset "^1.0.0" - typed-array-length "^1.0.4" - unbox-primitive "^1.0.2" - which-typed-array "^1.1.13" - -es-set-tostringtag@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/es-set-tostringtag/-/es-set-tostringtag-2.0.2.tgz#11f7cc9f63376930a5f20be4915834f4bc74f9c9" - integrity sha512-BuDyupZt65P9D2D2vA/zqcI3G5xRsklm5N3xCwuiy+/vKy8i0ifdsQP1sLgO4tZDSCaQUSnmC48khknGMV3D2Q== - dependencies: - get-intrinsic "^1.2.2" - has-tostringtag "^1.0.0" - hasown "^2.0.0" - -es-to-primitive@^1.2.1: - version "1.2.1" - resolved "https://registry.yarnpkg.com/es-to-primitive/-/es-to-primitive-1.2.1.tgz#e55cd4c9cdc188bcefb03b366c736323fc5c898a" - integrity sha512-QCOllgZJtaUo9miYBcLChTUaHNjJF3PYs1VidD7AwiEj1kYxKeQTctLAezAOH5ZKRH0g2IgPn6KwB4IT8iRpvA== - dependencies: - is-callable "^1.1.4" - is-date-object "^1.0.1" - is-symbol "^1.0.2" - -escape-string-regexp@^1.0.5: - version "1.0.5" - resolved "https://registry.yarnpkg.com/escape-string-regexp/-/escape-string-regexp-1.0.5.tgz#1b61c0562190a8dff6ae3bb2cf0200ca130b86d4" - integrity sha512-vbRorB5FUQWvla16U8R/qgaFIya2qGzwDrNmCZuYKrbdSUMG6I1ZCGQRefkRVhuOkIGVne7BQ35DSfo1qvJqFg== - -escodegen@^2.0.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/escodegen/-/escodegen-2.1.0.tgz#ba93bbb7a43986d29d6041f99f5262da773e2e17" - integrity sha512-2NlIDTwUWJN0mRPQOdtQBzbUHvdGY2P1VXSyU83Q3xKxM7WHX2Ql8dKq782Q9TgQUNOLEzEYu9bzLNj1q88I5w== - dependencies: - esprima "^4.0.1" - estraverse "^5.2.0" - esutils "^2.0.2" - optionalDependencies: - source-map "~0.6.1" - -eslint-visitor-keys@^3.3.0: - version "3.4.3" - resolved "https://registry.yarnpkg.com/eslint-visitor-keys/-/eslint-visitor-keys-3.4.3.tgz#0cd72fe8550e3c2eae156a96a4dddcd1c8ac5800" - integrity sha512-wpc+LXeiyiisxPlEkUzU6svyS1frIO3Mgxj1fdy7Pm8Ygzguax2N3Fa/D/ag1WqbOprdI+uY6wMUl8/a2G+iag== - -esprima@^4.0.0, esprima@^4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/esprima/-/esprima-4.0.1.tgz#13b04cdb3e6c5d19df91ab6987a8695619b0aa71" - integrity sha512-eGuFFw7Upda+g4p+QHvnW0RyTX/SVeJBDM/gCtMARO0cLuT2HcEKnTPvhjV6aGeqrCB/sbNop0Kszm0jsaWU4A== - -estraverse@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/estraverse/-/estraverse-5.3.0.tgz#2eea5290702f26ab8fe5370370ff86c965d21123" - integrity sha512-MMdARuVEQziNTeJD8DgMqmhwR11BRQ/cBP+pLtYdSTnf3MIO8fFeiINEbX36ZdNlfU/7A9f3gUw49B3oQsvwBA== - -esutils@^2.0.2: - version "2.0.3" - resolved "https://registry.yarnpkg.com/esutils/-/esutils-2.0.3.tgz#74d2eb4de0b8da1293711910d50775b9b710ef64" - integrity sha512-kVscqXk4OCp68SZ0dkgEKVi6/8ij300KBWTJq32P/dYeWTSwK41WyTxalN1eRmA5Z9UU/LX9D7FWSmV9SAYx6g== - -event-stream@=3.3.4: - version "3.3.4" - resolved "https://registry.yarnpkg.com/event-stream/-/event-stream-3.3.4.tgz#4ab4c9a0f5a54db9338b4c34d86bfce8f4b35571" - integrity sha512-QHpkERcGsR0T7Qm3HNJSyXKEEj8AHNxkY3PK8TS2KJvQ7NiSHe3DDpwVKKtoYprL/AreyzFBeIkBIWChAqn60g== - dependencies: - duplexer "~0.1.1" - from "~0" - map-stream "~0.1.0" - pause-stream "0.0.11" - split "0.3" - stream-combiner "~0.0.4" - through "~2.3.1" - -eventemitter2@6.4.7: - version "6.4.7" - resolved "https://registry.yarnpkg.com/eventemitter2/-/eventemitter2-6.4.7.tgz#a7f6c4d7abf28a14c1ef3442f21cb306a054271d" - integrity sha512-tYUSVOGeQPKt/eC1ABfhHy5Xd96N3oIijJvN3O9+TsC28T5V9yX9oEfEK5faP0EFSNVOG97qtAS68GBrQB2hDg== - -execa@4.1.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/execa/-/execa-4.1.0.tgz#4e5491ad1572f2f17a77d388c6c857135b22847a" - integrity sha512-j5W0//W7f8UxAn8hXVnwG8tLwdiUy4FJLcSupCg6maBYZDpyBvTApK7KyuI4bKj8KOh1r2YH+6ucuYtJv1bTZA== - dependencies: - cross-spawn "^7.0.0" - get-stream "^5.0.0" - human-signals "^1.1.1" - is-stream "^2.0.0" - merge-stream "^2.0.0" - npm-run-path "^4.0.0" - onetime "^5.1.0" - signal-exit "^3.0.2" - strip-final-newline "^2.0.0" - -executable@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/executable/-/executable-4.1.1.tgz#41532bff361d3e57af4d763b70582db18f5d133c" - integrity sha512-8iA79xD3uAch729dUG8xaaBBFGaEa0wdD2VkYLFHwlqosEj/jT66AzcreRDSgV7ehnNLBW2WR5jIXwGKjVdTLg== - dependencies: - pify "^2.2.0" - -extend@~3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/extend/-/extend-3.0.2.tgz#f8b1136b4071fbd8eb140aff858b1019ec2915fa" - integrity sha512-fjquC59cD7CyW6urNXK0FBufkZcoiGG80wTuPujX590cB5Ttln20E2UB4S/WARVqhXffZl2LNgS+gQdPIIim/g== - -extract-zip@2.0.1: - version "2.0.1" - resolved "https://registry.yarnpkg.com/extract-zip/-/extract-zip-2.0.1.tgz#663dca56fe46df890d5f131ef4a06d22bb8ba13a" - integrity sha512-GDhU9ntwuKyGXdZBUgTIe+vXnWj0fppUEtMDL0+idd5Sta8TGpHssn/eusA9mrPr9qNDym6SxAYZjNvCn/9RBg== - dependencies: - debug "^4.1.1" - get-stream "^5.1.0" - yauzl "^2.10.0" - optionalDependencies: - "@types/yauzl" "^2.9.1" - -extsprintf@1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.3.0.tgz#96918440e3041a7a414f8c52e3c574eb3c3e1e05" - integrity sha512-11Ndz7Nv+mvAC1j0ktTa7fAb0vLyGGX+rMHNBYQviQDGU0Hw7lhctJANqbPhu9nV9/izT/IntTgZ7Im/9LJs9g== - -extsprintf@^1.2.0: - version "1.4.1" - resolved "https://registry.yarnpkg.com/extsprintf/-/extsprintf-1.4.1.tgz#8d172c064867f235c0c84a596806d279bf4bcc07" - integrity sha512-Wrk35e8ydCKDj/ArClo1VrPVmN8zph5V4AtHwIuHhvMXsKf73UT3BOD+azBIW+3wOJ4FhEH7zyaJCFvChjYvMA== - -fast-glob@^3.2.9: - version "3.3.2" - resolved "https://registry.yarnpkg.com/fast-glob/-/fast-glob-3.3.2.tgz#a904501e57cfdd2ffcded45e99a54fef55e46129" - integrity sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow== - dependencies: - "@nodelib/fs.stat" "^2.0.2" - "@nodelib/fs.walk" "^1.2.3" - glob-parent "^5.1.2" - merge2 "^1.3.0" - micromatch "^4.0.4" - -fastq@^1.6.0: - version "1.16.0" - resolved "https://registry.yarnpkg.com/fastq/-/fastq-1.16.0.tgz#83b9a9375692db77a822df081edb6a9cf6839320" - integrity sha512-ifCoaXsDrsdkWTtiNJX5uzHDsrck5TzfKKDcuFFTIrrc/BS076qgEIfoIy1VeZqViznfKiysPYTh/QeHtnIsYA== - dependencies: - reusify "^1.0.4" - -fd-slicer@~1.1.0: - version "1.1.0" - resolved "https://registry.yarnpkg.com/fd-slicer/-/fd-slicer-1.1.0.tgz#25c7c89cb1f9077f8891bbe61d8f390eae256f1e" - integrity sha512-cE1qsB/VwyQozZ+q1dGxR8LBYNZeofhEdUNGSMbQD3Gw2lAzX9Zb3uIU6Ebc/Fmyjo9AWWfnn0AUCHqtevs/8g== - dependencies: - pend "~1.2.0" - -figures@^3.2.0: - version "3.2.0" - resolved "https://registry.yarnpkg.com/figures/-/figures-3.2.0.tgz#625c18bd293c604dc4a8ddb2febf0c88341746af" - integrity sha512-yaduQFRKLXYOGgEn6AZau90j3ggSOyiqXU0F9JZfeXYhNa+Jk4X+s45A2zg5jns87GAFa34BBm2kXw4XpNcbdg== - dependencies: - escape-string-regexp "^1.0.5" - -filing-cabinet@^4.1.6: - version "4.1.6" - resolved "https://registry.yarnpkg.com/filing-cabinet/-/filing-cabinet-4.1.6.tgz#8d6d12cf3a84365bbd94e1cbf07d71c113420dd2" - integrity sha512-C+HZbuQTER36sKzGtUhrAPAoK6+/PrrUhYDBQEh3kBRdsyEhkLbp1ML8S0+6e6gCUrUlid+XmubxJrhvL2g/Zw== - dependencies: - app-module-path "^2.2.0" - commander "^10.0.1" - enhanced-resolve "^5.14.1" - is-relative-path "^1.0.2" - module-definition "^5.0.1" - module-lookup-amd "^8.0.5" - resolve "^1.22.3" - resolve-dependency-path "^3.0.2" - sass-lookup "^5.0.1" - stylus-lookup "^5.0.1" - tsconfig-paths "^4.2.0" - typescript "^5.0.4" - -fill-range@^7.0.1: - version "7.0.1" - resolved "https://registry.yarnpkg.com/fill-range/-/fill-range-7.0.1.tgz#1919a6a7c75fe38b2c7c77e5198535da9acdda40" - integrity sha512-qOo9F+dMUmC2Lcb4BbVvnKJxTPjCm+RRpe4gDuGrzkL7mEVl/djYSu2OdQ2Pa302N4oqkSg9ir6jaLWJ2USVpQ== - dependencies: - to-regex-range "^5.0.1" - -find-cypress-specs@1.38.1: - version "1.38.1" - resolved "https://registry.yarnpkg.com/find-cypress-specs/-/find-cypress-specs-1.38.1.tgz#7b4e7cc75f33fd819d2318e28cf92d9f880e60cb" - integrity sha512-KpEOhDXMom3hfcVhaCtwlfnTfgMlKnQW7oIF+Y+W4O7VFGyd9CT9tm3DKRclEF38xmHtz17nAH2ByLurREEmfQ== - dependencies: - "@actions/core" "^1.10.0" - arg "^5.0.1" - console.table "^0.10.0" - debug "^4.3.3" - find-test-names "1.28.14" - globby "^11.1.0" - minimatch "^3.0.4" - pluralize "^8.0.0" - require-and-forget "^1.0.1" - shelljs "^0.8.5" - spec-change "^1.7.1" - ts-node "^10.9.1" - -find-test-names@1.28.14: - version "1.28.14" - resolved "https://registry.yarnpkg.com/find-test-names/-/find-test-names-1.28.14.tgz#bd40a791362ec6e7f5bd015b65b79f939bfda9b6" - integrity sha512-ldhfZ4Vy7lpzH0ylYtkNqrT//3gtTns7JNERGIA9fQKcEBIbv8oFAtT1Z3hBgIuGMdHxV+ELLKvNItolgfuDMg== - dependencies: - "@babel/parser" "^7.23.0" - "@babel/plugin-syntax-jsx" "^7.22.5" - acorn-walk "^8.2.0" - debug "^4.3.3" - globby "^11.0.4" - simple-bin-help "^1.8.0" - -for-each@^0.3.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/for-each/-/for-each-0.3.3.tgz#69b447e88a0a5d32c3e7084f3f1710034b21376e" - integrity sha512-jqYfLp7mo9vIyQf8ykW2v7A+2N4QjeCeI5+Dz9XraiO1ign81wjiH7Fb9vSOWvQfNtmSa4H2RoQTrrXivdUZmw== - dependencies: - is-callable "^1.1.3" - -forever-agent@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/forever-agent/-/forever-agent-0.6.1.tgz#fbc71f0c41adeb37f96c577ad1ed42d8fdacca91" - integrity sha512-j0KLYPhm6zeac4lz3oJ3o65qvgQCcPubiyotZrXqEaG4hNagNYO8qdlUrX5vwqv9ohqeT/Z3j6+yW067yWWdUw== - -form-data@~2.3.2: - version "2.3.3" - resolved "https://registry.yarnpkg.com/form-data/-/form-data-2.3.3.tgz#dcce52c05f644f298c6a7ab936bd724ceffbf3a6" - integrity sha512-1lLKB2Mu3aGP1Q/2eCOx0fNbRMe7XdwktwOruhfqqd0rIJWwN4Dh+E3hrPSlDCXnSR7UtZ1N38rVXm+6+MEhJQ== - dependencies: - asynckit "^0.4.0" - combined-stream "^1.0.6" - mime-types "^2.1.12" - -from@~0: - version "0.1.7" - resolved "https://registry.yarnpkg.com/from/-/from-0.1.7.tgz#83c60afc58b9c56997007ed1a768b3ab303a44fe" - integrity sha512-twe20eF1OxVxp/ML/kq2p1uc6KvFK/+vs8WjEbeKmV2He22MKm7YF2ANIt+EOqhJ5L3K/SuuPhk0hWQDjOM23g== - -fs-extra@^9.1.0: - version "9.1.0" - resolved "https://registry.yarnpkg.com/fs-extra/-/fs-extra-9.1.0.tgz#5954460c764a8da2094ba3554bf839e6b9a7c86d" - integrity sha512-hcg3ZmepS30/7BSFqRvoo3DOMQu7IjqxO5nCDt+zM9XWjb33Wg7ziNT+Qvqbuc3+gWpzO02JubVyk2G4Zvo1OQ== - dependencies: - at-least-node "^1.0.0" - graceful-fs "^4.2.0" - jsonfile "^6.0.1" - universalify "^2.0.0" - -fs.realpath@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/fs.realpath/-/fs.realpath-1.0.0.tgz#1504ad2523158caa40db4a2787cb01411994ea4f" - integrity sha512-OO0pH2lK6a0hZnAdau5ItzHPI6pUlvI7jMVnxUQRtw4owF2wk8lOSabtGDCTP4Ggrg2MbGnWO9X8K1t4+fGMDw== - -function-bind@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.1.tgz#a56899d3ea3c9bab874bb9773b7c5ede92f4895d" - integrity sha512-yIovAzMX49sF8Yl58fSCWJ5svSLuaibPxXQJFLmBObTuCr0Mf1KiPopGM9NiFjiYBCbfaa2Fh6breQ6ANVTI0A== - -function-bind@^1.1.2: - version "1.1.2" - resolved "https://registry.yarnpkg.com/function-bind/-/function-bind-1.1.2.tgz#2c02d864d97f3ea6c8830c464cbd11ab6eab7a1c" - integrity sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA== - -function.prototype.name@^1.1.6: - version "1.1.6" - resolved "https://registry.yarnpkg.com/function.prototype.name/-/function.prototype.name-1.1.6.tgz#cdf315b7d90ee77a4c6ee216c3c3362da07533fd" - integrity sha512-Z5kx79swU5P27WEayXM1tBi5Ze/lbIyiNgU3qyXUOf9b2rgXYyF9Dy9Cx+IQv/Lc8WCG6L82zwUPpSS9hGehIg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - functions-have-names "^1.2.3" - -functions-have-names@^1.2.3: - version "1.2.3" - resolved "https://registry.yarnpkg.com/functions-have-names/-/functions-have-names-1.2.3.tgz#0404fe4ee2ba2f607f0e0ec3c80bae994133b834" - integrity sha512-xckBUXyTIqT97tq2x2AMb+g163b5JFysYk0x4qxNFwbfQkmNZoiRHb6sPzI9/QV33WeuvVYBUIiD4NzNIyqaRQ== - -get-amd-module-type@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/get-amd-module-type/-/get-amd-module-type-5.0.1.tgz#bef38ea3674e1aa1bda9c59c8b0da598582f73f2" - integrity sha512-jb65zDeHyDjFR1loOVk0HQGM5WNwoGB8aLWy3LKCieMKol0/ProHkhO2X1JxojuN10vbz1qNn09MJ7tNp7qMzw== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - -get-intrinsic@^1.0.2: - version "1.2.1" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.1.tgz#d295644fed4505fc9cde952c37ee12b477a83d82" - integrity sha512-2DcsyfABl+gVHEfCOaTrWgyt+tb6MSEGmKq+kI5HwLbIYgjgmMcV8KQ41uaKz1xxUcn9tJtgFbQUEVcEbd0FYw== - dependencies: - function-bind "^1.1.1" - has "^1.0.3" - has-proto "^1.0.1" - has-symbols "^1.0.3" - -get-intrinsic@^1.1.1, get-intrinsic@^1.1.3, get-intrinsic@^1.2.0, get-intrinsic@^1.2.1, get-intrinsic@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/get-intrinsic/-/get-intrinsic-1.2.2.tgz#281b7622971123e1ef4b3c90fd7539306da93f3b" - integrity sha512-0gSo4ml/0j98Y3lngkFEot/zhiCeWsbYIlZ+uZOVgzLyLaUw7wxUL+nCTP0XJvJg1AXulJRI3UJi8GsbDuxdGA== - dependencies: - function-bind "^1.1.2" - has-proto "^1.0.1" - has-symbols "^1.0.3" - hasown "^2.0.0" - -get-own-enumerable-property-symbols@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/get-own-enumerable-property-symbols/-/get-own-enumerable-property-symbols-3.0.2.tgz#b5fde77f22cbe35f390b4e089922c50bce6ef664" - integrity sha512-I0UBV/XOz1XkIJHEUDMZAbzCThU/H8DxmSfmdGcKPnVhu2VfFqr34jr9777IyaTYvxjedWhqVIilEDsCdP5G6g== - -get-stream@^5.0.0, get-stream@^5.1.0: - version "5.2.0" - resolved "https://registry.yarnpkg.com/get-stream/-/get-stream-5.2.0.tgz#4966a1795ee5ace65e706c4b7beb71257d6e22d3" - integrity sha512-nBF+F1rAZVCu/p7rjzgA+Yb4lfYXrpl7a6VmJrU8wF9I1CKvP/QwPNZHnOlwbTkY6dvtFIzFMSyQXbLoTQPRpA== - dependencies: - pump "^3.0.0" - -get-symbol-description@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/get-symbol-description/-/get-symbol-description-1.0.0.tgz#7fdb81c900101fbd564dd5f1a30af5aadc1e58d6" - integrity sha512-2EmdH1YvIQiZpltCNgkuiUnyukzxM/R6NDJX31Ke3BG1Nq5b0S2PhX59UKi9vZpPDQVdqn+1IcaAwnzTT5vCjw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.1" - -getos@^3.2.1: - version "3.2.1" - resolved "https://registry.yarnpkg.com/getos/-/getos-3.2.1.tgz#0134d1f4e00eb46144c5a9c0ac4dc087cbb27dc5" - integrity sha512-U56CfOK17OKgTVqozZjUKNdkfEv6jk5WISBJ8SHoagjE6L69zOwl3Z+O8myjY9MEW3i2HPWQBt/LTbCgcC973Q== - dependencies: - async "^3.2.0" - -getpass@^0.1.1: - version "0.1.7" - resolved "https://registry.yarnpkg.com/getpass/-/getpass-0.1.7.tgz#5eff8e3e684d569ae4cb2b1282604e8ba62149fa" - integrity sha512-0fzj9JxOLfJ+XGLhR8ze3unN0KZCgZwiSSDz168VERjK8Wl8kVSdcu2kspd4s4wtAa1y/qrVRiAA0WclVsu0ng== - dependencies: - assert-plus "^1.0.0" - -glob-parent@^5.1.2: - version "5.1.2" - resolved "https://registry.yarnpkg.com/glob-parent/-/glob-parent-5.1.2.tgz#869832c58034fe68a4093c17dc15e8340d8401c4" - integrity sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow== - dependencies: - is-glob "^4.0.1" - -glob@^7.0.0, glob@^7.1.3, glob@^7.1.6, glob@^7.2.3: - version "7.2.3" - resolved "https://registry.yarnpkg.com/glob/-/glob-7.2.3.tgz#b8df0fb802bbfa8e89bd1d938b4e16578ed44f2b" - integrity sha512-nFR0zLpU2YCaRxwoCJvL6UvCH2JFyFVIvwTLsIf21AuHlMskA1hhTdk+LlYJtOlYt9v6dvszD2BGRqBL+iQK9Q== - dependencies: - fs.realpath "^1.0.0" - inflight "^1.0.4" - inherits "2" - minimatch "^3.1.1" - once "^1.3.0" - path-is-absolute "^1.0.0" - -global-dirs@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/global-dirs/-/global-dirs-3.0.1.tgz#0c488971f066baceda21447aecb1a8b911d22485" - integrity sha512-NBcGGFbBA9s1VzD41QXDG+3++t9Mn5t1FpLdhESY6oKY4gYTFpX4wO3sqGUa0Srjtbfj3szX0RnemmrVRUdULA== - dependencies: - ini "2.0.0" - -globalthis@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/globalthis/-/globalthis-1.0.3.tgz#5852882a52b80dc301b0660273e1ed082f0b6ccf" - integrity sha512-sFdI5LyBiNTHjRd7cGPWapiHWMOXKyuBNX/cWJ3NfzrZQVa8GI/8cofCl74AOVqq9W5kNmguTIzJ/1s2gyI9wA== - dependencies: - define-properties "^1.1.3" - -globby@^11.0.4, globby@^11.1.0: - version "11.1.0" - resolved "https://registry.yarnpkg.com/globby/-/globby-11.1.0.tgz#bd4be98bb042f83d796f7e3811991fbe82a0d34b" - integrity sha512-jhIXaOzy1sb8IyocaruWSn1TjmnBVs8Ayhcy83rmxNJ8q2uWKCAj3CnJY+KpGSXCueAPc0i05kVvVKtP1t9S3g== - dependencies: - array-union "^2.1.0" - dir-glob "^3.0.1" - fast-glob "^3.2.9" - ignore "^5.2.0" - merge2 "^1.4.1" - slash "^3.0.0" - -gonzales-pe@^4.3.0: - version "4.3.0" - resolved "https://registry.yarnpkg.com/gonzales-pe/-/gonzales-pe-4.3.0.tgz#fe9dec5f3c557eead09ff868c65826be54d067b3" - integrity sha512-otgSPpUmdWJ43VXyiNgEYE4luzHCL2pz4wQ0OnDluC6Eg4Ko3Vexy/SrSynglw/eR+OhkzmqFCZa/OFa/RgAOQ== - dependencies: - minimist "^1.2.5" - -gopd@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/gopd/-/gopd-1.0.1.tgz#29ff76de69dac7489b7c0918a5788e56477c332c" - integrity sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA== - dependencies: - get-intrinsic "^1.1.3" - -graceful-fs@^4.1.6, graceful-fs@^4.2.0, graceful-fs@^4.2.4: - version "4.2.11" - resolved "https://registry.yarnpkg.com/graceful-fs/-/graceful-fs-4.2.11.tgz#4183e4e8bf08bb6e05bbb2f7d2e0c8f712ca40e3" - integrity sha512-RbJ5/jmFcNNCcDV5o9eTnBLJ/HszWV0P73bc+Ff4nS/rJj+YaS6IGyiOL0VoBYX+l1Wrl3k63h/KrH+nhJ0XvQ== - -has-bigints@^1.0.1, has-bigints@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/has-bigints/-/has-bigints-1.0.2.tgz#0871bd3e3d51626f6ca0966668ba35d5602d6eaa" - integrity sha512-tSvCKtBr9lkF0Ex0aQiP9N+OpV4zi2r/Nee5VkRDbaqv35RLYMzbwQfFSZZH0kR+Rd6302UJZ2p/bJCEoR3VoQ== - -has-flag@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b" - integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ== - -has-property-descriptors@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-property-descriptors/-/has-property-descriptors-1.0.1.tgz#52ba30b6c5ec87fd89fa574bc1c39125c6f65340" - integrity sha512-VsX8eaIewvas0xnvinAe9bw4WfIeODpGYikiWYLH+dma0Jw6KHYqWiWfhQlgOVK8D6PvjubK5Uc4P0iIhIcNVg== - dependencies: - get-intrinsic "^1.2.2" - -has-proto@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/has-proto/-/has-proto-1.0.1.tgz#1885c1305538958aff469fef37937c22795408e0" - integrity sha512-7qE+iP+O+bgF9clE5+UoBFzE65mlBiVj3tKCrlNQ0Ogwm0BjpT/gK4SlLYDMybDh5I3TCTKnPPa0oMG7JDYrhg== - -has-symbols@^1.0.2, has-symbols@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has-symbols/-/has-symbols-1.0.3.tgz#bb7b2c4349251dce87b125f7bdf874aa7c8b39f8" - integrity sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A== - -has-tostringtag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/has-tostringtag/-/has-tostringtag-1.0.0.tgz#7e133818a7d394734f941e73c3d3f9291e658b25" - integrity sha512-kFjcSNhnlGV1kyoGk7OXKSawH5JOb/LzUc5w9B02hOTO0dfFRjbHQKvg1d6cf3HbeUmtU9VbbV3qzZ2Teh97WQ== - dependencies: - has-symbols "^1.0.2" - -has@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/has/-/has-1.0.3.tgz#722d7cbfc1f6aa8241f16dd814e011e1f41e8796" - integrity sha512-f2dvO0VU6Oej7RkWJGrehjbzMAjFp5/VKPp5tTpWIV4JHHZK1/BxbFRtf/siA2SWTe09caDmVtYYzWEIbBS4zw== - dependencies: - function-bind "^1.1.1" - -hasown@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/hasown/-/hasown-2.0.0.tgz#f4c513d454a57b7c7e1650778de226b11700546c" - integrity sha512-vUptKVTpIJhcczKBbgnS+RtcuYMB8+oNzPK2/Hp3hanz8JmpATdmmgLgSaadVREkDm+e2giHwY3ZRkyjSIDDFA== - dependencies: - function-bind "^1.1.2" - -http-signature@~1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/http-signature/-/http-signature-1.3.6.tgz#cb6fbfdf86d1c974f343be94e87f7fc128662cf9" - integrity sha512-3adrsD6zqo4GsTqtO7FyrejHNv+NgiIfAfv68+jVlFmSr9OGy7zrxONceFRLKvnnZA5jbxQBX1u9PpB6Wi32Gw== - dependencies: - assert-plus "^1.0.0" - jsprim "^2.0.2" - sshpk "^1.14.1" - -human-signals@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/human-signals/-/human-signals-1.1.1.tgz#c5b1cd14f50aeae09ab6c59fe63ba3395fe4dfa3" - integrity sha512-SEQu7vl8KjNL2eoGBLF3+wAjpsNfA9XMlXAYj/3EdaNfAlxKthD1xjEQfGOUhllCGGJVNY34bRr6lPINhNjyZw== - -humanize-duration@^3.28.0: - version "3.31.0" - resolved "https://registry.yarnpkg.com/humanize-duration/-/humanize-duration-3.31.0.tgz#a0384d22555024cd17e6e9f8561540d37756bf4c" - integrity sha512-fRrehgBG26NNZysRlTq1S+HPtDpp3u+Jzdc/d5A4cEzOD86YLAkDaJyJg8krSdCi7CJ+s7ht3fwRj8Dl+Btd0w== - -ieee754@^1.1.13: - version "1.2.1" - resolved "https://registry.yarnpkg.com/ieee754/-/ieee754-1.2.1.tgz#8eb7a10a63fff25d15a57b001586d177d1b0d352" - integrity sha512-dcyqhDvX1C46lXZcVqCpK+FtMRQVdIMN6/Df5js2zouUsqG7I6sFxitIC+7KYK29KdXOLHdu9zL4sFnoVQnqaA== - -ignore@^5.2.0: - version "5.3.0" - resolved "https://registry.yarnpkg.com/ignore/-/ignore-5.3.0.tgz#67418ae40d34d6999c95ff56016759c718c82f78" - integrity sha512-g7dmpshy+gD7mh88OC9NwSGTKoc3kyLAZQRU1mt53Aw/vnvfXnbC+F/7F7QoYVKbV+KNvJx8wArewKy1vXMtlg== - -immer@^9.0.6: - version "9.0.21" - resolved "https://registry.yarnpkg.com/immer/-/immer-9.0.21.tgz#1e025ea31a40f24fb064f1fef23e931496330176" - integrity sha512-bc4NBHqOqSfRW7POMkHd51LvClaeMXpm8dx0e8oE2GORbq5aRK7Bxl4FyzVLdGtLmvLKL7BTDBG5ACQm4HWjTA== - -indent-string@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/indent-string/-/indent-string-4.0.0.tgz#624f8f4497d619b2d9768531d58f4122854d7251" - integrity sha512-EdDDZu4A2OyIK7Lr/2zG+w5jmbuk1DVBnEwREQvBzspBJkCEbRa8GxU1lghYcaGJCnRWibjDXlq779X1/y5xwg== - -inflight@^1.0.4: - version "1.0.6" - resolved "https://registry.yarnpkg.com/inflight/-/inflight-1.0.6.tgz#49bd6331d7d02d0c09bc910a1075ba8165b56df9" - integrity sha512-k92I/b08q4wvFscXCLvqfsHCrjrF7yiXsQuIVvVE7N82W3+aqpzuUdBbfhWcy/FZR3/4IgflMgKLOsvPDrGCJA== - dependencies: - once "^1.3.0" - wrappy "1" - -inherits@2, inherits@^2.0.3, inherits@^2.0.4: - version "2.0.4" - resolved "https://registry.yarnpkg.com/inherits/-/inherits-2.0.4.tgz#0fa2c64f932917c3433a0ded55363aae37416b7c" - integrity sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ== - -ini@2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/ini/-/ini-2.0.0.tgz#e5fd556ecdd5726be978fa1001862eacb0a94bc5" - integrity sha512-7PnF4oN3CvZF23ADhA5wRaYEQpJ8qygSkbtTXWBeXWXmEVRXK+1ITciHWwHhsjv1TmW0MgacIv6hEi5pX5NQdA== - -internal-slot@^1.0.5: - version "1.0.6" - resolved "https://registry.yarnpkg.com/internal-slot/-/internal-slot-1.0.6.tgz#37e756098c4911c5e912b8edbf71ed3aa116f930" - integrity sha512-Xj6dv+PsbtwyPpEflsejS+oIZxmMlV44zAhG479uYu89MsjcYOhCFnNyKrkJrihbsiasQyY0afoCl/9BLR65bg== - dependencies: - get-intrinsic "^1.2.2" - hasown "^2.0.0" - side-channel "^1.0.4" - -interpret@^1.0.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/interpret/-/interpret-1.4.0.tgz#665ab8bc4da27a774a40584e812e3e0fa45b1a1e" - integrity sha512-agE4QfB2Lkp9uICn7BAqoscw4SZP9kTE2hxiFI3jBPmXJfdqiahTbUuKGsMoN2GtqL9AxhYioAcVvgsb1HvRbA== - -is-array-buffer@^3.0.1, is-array-buffer@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/is-array-buffer/-/is-array-buffer-3.0.2.tgz#f2653ced8412081638ecb0ebbd0c41c6e0aecbbe" - integrity sha512-y+FyyR/w8vfIRq4eQcM1EYgSTnmHXPqaF+IgzgraytCFq5Xh8lllDVmAZolPJiZttZLeFSINPYMaEJ7/vWUa1w== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.0" - is-typed-array "^1.1.10" - -is-bigint@^1.0.1: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-bigint/-/is-bigint-1.0.4.tgz#08147a1875bc2b32005d41ccd8291dffc6691df3" - integrity sha512-zB9CruMamjym81i2JZ3UMn54PKGsQzsJeo6xvN3HJJ4CAsQNB6iRutp2To77OfCNuoxspsIhzaPoO1zyCEhFOg== - dependencies: - has-bigints "^1.0.1" - -is-boolean-object@^1.1.0: - version "1.1.2" - resolved "https://registry.yarnpkg.com/is-boolean-object/-/is-boolean-object-1.1.2.tgz#5c6dc200246dd9321ae4b885a114bb1f75f63719" - integrity sha512-gDYaKHJmnj4aWxyj6YHyXVpdQawtVLHU5cb+eztPGczf6cjuTdwve5ZIEfgXqH4e57An1D1AKf8CZ3kYrQRqYA== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-callable@^1.1.3, is-callable@^1.1.4, is-callable@^1.2.7: - version "1.2.7" - resolved "https://registry.yarnpkg.com/is-callable/-/is-callable-1.2.7.tgz#3bc2a85ea742d9e36205dcacdd72ca1fdc51b055" - integrity sha512-1BC0BVFhS/p0qtw6enp8e+8OD0UrK0oFLztSjNzhcKA3WDuJxxAPXzPuPtKkjEY9UUoEWlX/8fgKeu2S8i9JTA== - -is-ci@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/is-ci/-/is-ci-3.0.1.tgz#db6ecbed1bd659c43dac0f45661e7674103d1867" - integrity sha512-ZYvCgrefwqoQ6yTyYUbQu64HsITZ3NfKX1lzaEYdkTDcfKzzCI/wthRRYKkdjHKFVgNiXKAKm65Zo1pk2as/QQ== - dependencies: - ci-info "^3.2.0" - -is-core-module@^2.13.0: - version "2.13.1" - resolved "https://registry.yarnpkg.com/is-core-module/-/is-core-module-2.13.1.tgz#ad0d7532c6fea9da1ebdc82742d74525c6273384" - integrity sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw== - dependencies: - hasown "^2.0.0" - -is-date-object@^1.0.1: - version "1.0.5" - resolved "https://registry.yarnpkg.com/is-date-object/-/is-date-object-1.0.5.tgz#0841d5536e724c25597bf6ea62e1bd38298df31f" - integrity sha512-9YQaSxsAiSwcvS33MBk3wTCVnWK+HhF8VZR2jRxehM16QcVOdHqPn4VPHmRK4lSr38n9JriurInLcP90xsYNfQ== - dependencies: - has-tostringtag "^1.0.0" - -is-extglob@^2.1.1: - version "2.1.1" - resolved "https://registry.yarnpkg.com/is-extglob/-/is-extglob-2.1.1.tgz#a88c02535791f02ed37c76a1b9ea9773c833f8c2" - integrity sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ== - -is-fullwidth-code-point@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz#f116f8064fe90b3f7844a38997c0b75051269f1d" - integrity sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg== - -is-glob@^4.0.1, is-glob@^4.0.3: - version "4.0.3" - resolved "https://registry.yarnpkg.com/is-glob/-/is-glob-4.0.3.tgz#64f61e42cbbb2eec2071a9dac0b28ba1e65d5084" - integrity sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg== - dependencies: - is-extglob "^2.1.1" - -is-hotkey@^0.1.6: - version "0.1.8" - resolved "https://registry.yarnpkg.com/is-hotkey/-/is-hotkey-0.1.8.tgz#6b1f4b2d0e5639934e20c05ed24d623a21d36d25" - integrity sha512-qs3NZ1INIS+H+yeo7cD9pDfwYV/jqRh1JG9S9zYrNudkoUQg7OL7ziXqRKu+InFjUIDoP2o6HIkLYMh1pcWgyQ== - -is-installed-globally@~0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/is-installed-globally/-/is-installed-globally-0.4.0.tgz#9a0fd407949c30f86eb6959ef1b7994ed0b7b520" - integrity sha512-iwGqO3J21aaSkC7jWnHP/difazwS7SFeIqxv6wEtLU8Y5KlzFTjyqcSIT0d8s4+dDhKytsk9PJZ2BkS5eZwQRQ== - dependencies: - global-dirs "^3.0.0" - is-path-inside "^3.0.2" - -is-negative-zero@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/is-negative-zero/-/is-negative-zero-2.0.2.tgz#7bf6f03a28003b8b3965de3ac26f664d765f3150" - integrity sha512-dqJvarLawXsFbNDeJW7zAz8ItJ9cd28YufuuFzh0G8pNHjJMnY08Dv7sYX2uF5UpQOwieAeOExEYAWWfu7ZZUA== - -is-number-object@^1.0.4: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-number-object/-/is-number-object-1.0.7.tgz#59d50ada4c45251784e9904f5246c742f07a42fc" - integrity sha512-k1U0IRzLMo7ZlYIfzRu23Oh6MiIFasgpb9X76eqfFZAqwH44UI4KTBvBYIZ1dSL9ZzChTB9ShHfLkR4pdW5krQ== - dependencies: - has-tostringtag "^1.0.0" - -is-number@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/is-number/-/is-number-7.0.0.tgz#7535345b896734d5f80c4d06c50955527a14f12b" - integrity sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng== - -is-obj@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/is-obj/-/is-obj-1.0.1.tgz#3e4729ac1f5fde025cd7d83a896dab9f4f67db0f" - integrity sha512-l4RyHgRqGN4Y3+9JHVrNqO+tN0rV5My76uW5/nuO4K1b6vw5G8d/cmFjP9tRfEsdhZNt0IFdZuK/c2Vr4Nb+Qg== - -is-path-inside@^3.0.2: - version "3.0.3" - resolved "https://registry.yarnpkg.com/is-path-inside/-/is-path-inside-3.0.3.tgz#d231362e53a07ff2b0e0ea7fed049161ffd16283" - integrity sha512-Fd4gABb+ycGAmKou8eMftCupSir5lRxqf4aD/vd0cD2qc4HL07OjCeuHMr8Ro4CoMaeCKDB0/ECBOVWjTwUvPQ== - -is-plain-object@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/is-plain-object/-/is-plain-object-5.0.0.tgz#4427f50ab3429e9025ea7d52e9043a9ef4159344" - integrity sha512-VRSzKkbMm5jMDoKLbltAkFQ5Qr7VDiTFGXxYFXXowVj387GeGNOCsOH6Msy00SGZ3Fp84b1Naa1psqgcCIEP5Q== - -is-regex@^1.1.4: - version "1.1.4" - resolved "https://registry.yarnpkg.com/is-regex/-/is-regex-1.1.4.tgz#eef5663cd59fa4c0ae339505323df6854bb15958" - integrity sha512-kvRdxDsxZjhzUX07ZnLydzS1TU/TJlTUHHY4YLL87e37oUA49DfkLqgy+VjFocowy29cKvcSiu+kIv728jTTVg== - dependencies: - call-bind "^1.0.2" - has-tostringtag "^1.0.0" - -is-regexp@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-regexp/-/is-regexp-1.0.0.tgz#fd2d883545c46bac5a633e7b9a09e87fa2cb5069" - integrity sha512-7zjFAPO4/gwyQAAgRRmqeEeyIICSdmCqa3tsVHMdBzaXXRiqopZL4Cyghg/XulGWrtABTpbnYYzzIRffLkP4oA== - -is-relative-path@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-relative-path/-/is-relative-path-1.0.2.tgz#091b46a0d67c1ed0fe85f1f8cfdde006bb251d46" - integrity sha512-i1h+y50g+0hRbBD+dbnInl3JlJ702aar58snAeX+MxBAPvzXGej7sYoPMhlnykabt0ZzCJNBEyzMlekuQZN7fA== - -is-shared-array-buffer@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-shared-array-buffer/-/is-shared-array-buffer-1.0.2.tgz#8f259c573b60b6a32d4058a1a07430c0a7344c79" - integrity sha512-sqN2UDu1/0y6uvXyStCOzyhAjCSlHceFoMKJW8W9EU9cvic/QdsZ0kEU93HEy3IUEFZIiH/3w+AH/UQbPHNdhA== - dependencies: - call-bind "^1.0.2" - -is-stream@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/is-stream/-/is-stream-2.0.1.tgz#fac1e3d53b97ad5a9d0ae9cef2389f5810a5c077" - integrity sha512-hFoiJiTl63nn+kstHGBtewWSKnQLpyb155KHheA1l39uvtO9nWIop1p3udqPcUd/xbF1VLMO4n7OI6p7RbngDg== - -is-string@^1.0.5, is-string@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/is-string/-/is-string-1.0.7.tgz#0dd12bf2006f255bb58f695110eff7491eebc0fd" - integrity sha512-tE2UXzivje6ofPW7l23cjDOMa09gb7xlAqG6jG5ej6uPV32TlWP3NKPigtaGeHNu9fohccRYvIiZMfOOnOYUtg== - dependencies: - has-tostringtag "^1.0.0" - -is-symbol@^1.0.2, is-symbol@^1.0.3: - version "1.0.4" - resolved "https://registry.yarnpkg.com/is-symbol/-/is-symbol-1.0.4.tgz#a6dac93b635b063ca6872236de88910a57af139c" - integrity sha512-C/CPBqKWnvdcxqIARxyOh4v1UUEOCHpgDa0WYgpKDFMszcrPcffg5uhwSgPCLD2WWxmq6isisz87tzT01tuGhg== - dependencies: - has-symbols "^1.0.2" - -is-typed-array@^1.1.10, is-typed-array@^1.1.12, is-typed-array@^1.1.9: - version "1.1.12" - resolved "https://registry.yarnpkg.com/is-typed-array/-/is-typed-array-1.1.12.tgz#d0bab5686ef4a76f7a73097b95470ab199c57d4a" - integrity sha512-Z14TF2JNG8Lss5/HMqt0//T9JeHXttXy5pH/DBU4vi98ozO2btxzq9MwYDZYnKwU8nRsz/+GVFVRDq3DkVuSPg== - dependencies: - which-typed-array "^1.1.11" - -is-typedarray@~1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/is-typedarray/-/is-typedarray-1.0.0.tgz#e479c80858df0c1b11ddda6940f96011fcda4a9a" - integrity sha512-cyA56iCMHAh5CdzjJIa4aohJyeO1YbwLi3Jc35MmRU6poroFjIGZzUzupGiRPOjgHg9TLu43xbpwXk523fMxKA== - -is-unicode-supported@^0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/is-unicode-supported/-/is-unicode-supported-0.1.0.tgz#3f26c76a809593b52bfa2ecb5710ed2779b522a7" - integrity sha512-knxG2q4UC3u8stRGyAVJCOdxFmv5DZiRcdlIaAQXAbSfJya+OhopNotLQrstBhququ4ZpuKbDc/8S6mgXgPFPw== - -is-url-superb@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/is-url-superb/-/is-url-superb-4.0.0.tgz#b54d1d2499bb16792748ac967aa3ecb41a33a8c2" - integrity sha512-GI+WjezhPPcbM+tqE9LnmsY5qqjwHzTvjJ36wxYX5ujNXefSUJ/T17r5bqDV8yLhcgB59KTPNOc9O9cmHTPWsA== - -is-url@^1.2.4: - version "1.2.4" - resolved "https://registry.yarnpkg.com/is-url/-/is-url-1.2.4.tgz#04a4df46d28c4cff3d73d01ff06abeb318a1aa52" - integrity sha512-ITvGim8FhRiYe4IQ5uHSkj7pVaPDrCTkNd3yq3cV7iZAcJdHTUMPMEHcqSOy9xZ9qFenQCvi+2wjH9a1nXqHww== - -is-uuid@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-uuid/-/is-uuid-1.0.2.tgz#ad1898ddf154947c25c8e54966f48604e9caecc4" - integrity sha512-tCByphFcJgf2qmiMo5hMCgNAquNSagOetVetDvBXswGkNfoyEMvGH1yDlF8cbZbKnbVBr4Y5/rlpMz9umxyBkQ== - -is-weakref@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/is-weakref/-/is-weakref-1.0.2.tgz#9529f383a9338205e89765e0392efc2f100f06f2" - integrity sha512-qctsuLZmIQ0+vSSMfoVvyFe2+GSEvnmZ2ezTup1SBse9+twCCeial6EEi3Nc2KFcf6+qz2FBPnjXsk8xhKSaPQ== - dependencies: - call-bind "^1.0.2" - -isarray@^2.0.5: - version "2.0.5" - resolved "https://registry.yarnpkg.com/isarray/-/isarray-2.0.5.tgz#8af1e4c1221244cc62459faf38940d4e644a5723" - integrity sha512-xHjhDr3cNBK0BzdUJSPXZntQUx/mwMS5Rw4A7lPJ90XGAO6ISP/ePDNuo0vhqOZU+UD5JoodwCAAoZQd3FeAKw== - -isexe@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/isexe/-/isexe-2.0.0.tgz#e8fbf374dc556ff8947a10dcb0572d633f2cfa10" - integrity sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw== - -isomorphic-unfetch@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/isomorphic-unfetch/-/isomorphic-unfetch-3.1.0.tgz#87341d5f4f7b63843d468438128cb087b7c3e98f" - integrity sha512-geDJjpoZ8N0kWexiwkX8F9NkTsXhetLPVbZFQ+JTW239QNOwvB0gniuR1Wc6f0AMTn7/mFGyXvHTifrCp/GH8Q== - dependencies: - node-fetch "^2.6.1" - unfetch "^4.2.0" - -isstream@~0.1.2: - version "0.1.2" - resolved "https://registry.yarnpkg.com/isstream/-/isstream-0.1.2.tgz#47e63f7af55afa6f92e1500e690eb8b8529c099a" - integrity sha512-Yljz7ffyPbrLpLngrMtZ7NduUgVvi6wG9RJ9IUcyCd59YQ911PBJphODUcbOVbqYfxe1wuYf/LJ8PauMRwsM/g== - -jsbn@~0.1.0: - version "0.1.1" - resolved "https://registry.yarnpkg.com/jsbn/-/jsbn-0.1.1.tgz#a5e654c2e5a2deb5f201d96cefbca80c0ef2f513" - integrity sha512-UVU9dibq2JcFWxQPA6KCqj5O42VOmAY3zQUfEKxU0KpTGXwNoCjkX1e13eHNvw/xPynt6pU0rZ1htjWTNTSXsg== - -json-schema@0.4.0: - version "0.4.0" - resolved "https://registry.yarnpkg.com/json-schema/-/json-schema-0.4.0.tgz#f7de4cf6efab838ebaeb3236474cbba5a1930ab5" - integrity sha512-es94M3nTIfsEPisRafak+HDLfHXnKBhV3vU5eqPcS3flIWqcxJWgXHXiey3YrpaNsanY5ei1VoYEbOzijuq9BA== - -json-stringify-safe@~5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/json-stringify-safe/-/json-stringify-safe-5.0.1.tgz#1296a2d58fd45f19a0f6ce01d65701e2c735b6eb" - integrity sha512-ZClg6AaYvamvYEE82d3Iyd3vSSIjQ+odgjaTzRuO3s7toCdFKczob2i0zCh7JE8kWn17yvAWhUVxvqGwUalsRA== - -json5@^2.2.2: - version "2.2.3" - resolved "https://registry.yarnpkg.com/json5/-/json5-2.2.3.tgz#78cd6f1a19bdc12b73db5ad0c61efd66c1e29283" - integrity sha512-XmOWe7eyHYH14cLdVPoyg+GOH3rYX++KpzrylJwSW98t3Nk+U8XOl8FWKOgwtzdb8lXGf6zYwDUzeHMWfxasyg== - -jsonata@^1.8.6: - version "1.8.6" - resolved "https://registry.yarnpkg.com/jsonata/-/jsonata-1.8.6.tgz#e5f0e6ace870a34bac881a182ca2b31227122791" - integrity sha512-ZH2TPYdNP2JecOl/HvrH47Xc+9imibEMQ4YqKy/F/FrM+2a6vfbGxeCX23dB9Fr6uvGwv+ghf1KxWB3iZk09wA== - -jsonfile@^6.0.1: - version "6.1.0" - resolved "https://registry.yarnpkg.com/jsonfile/-/jsonfile-6.1.0.tgz#bc55b2634793c679ec6403094eb13698a6ec0aae" - integrity sha512-5dgndWOriYSm5cnYaJNhalLNDKOqFwyDB/rr1E9ZsGciGvKPs8R2xYGCacuf3z6K1YKDz182fd+fY3cn3pMqXQ== - dependencies: - universalify "^2.0.0" - optionalDependencies: - graceful-fs "^4.1.6" - -jsprim@^2.0.2: - version "2.0.2" - resolved "https://registry.yarnpkg.com/jsprim/-/jsprim-2.0.2.tgz#77ca23dbcd4135cd364800d22ff82c2185803d4d" - integrity sha512-gqXddjPqQ6G40VdnI6T6yObEC+pDNvyP95wdQhkWkg7crHH3km5qP1FsOXEkzEQwnz6gz5qGTn1c2Y52wP3OyQ== - dependencies: - assert-plus "1.0.0" - extsprintf "1.3.0" - json-schema "0.4.0" - verror "1.10.0" - -lazy-ass@^1.6.0: - version "1.6.0" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-1.6.0.tgz#7999655e8646c17f089fdd187d150d3324d54513" - integrity sha512-cc8oEVoctTvsFZ/Oje/kGnHbpWHYBe8IAJe4C0QNc3t8uM/0Y8+erSz/7Y1ALuXTEZTMvxXwO6YbX1ey3ujiZw== - -lazy-ass@^2.0.3: - version "2.0.3" - resolved "https://registry.yarnpkg.com/lazy-ass/-/lazy-ass-2.0.3.tgz#1e8451729f2bebdff1218bb18921566a08f81b36" - integrity sha512-/O3/DoQmI1XAhklDvF1dAjFf/epE8u3lzOZegQfLZ8G7Ud5bTRSZiFOpukHCu6jODrCA4gtIdwUCC7htxcDACA== - -listr2@^3.8.3: - version "3.14.0" - resolved "https://registry.yarnpkg.com/listr2/-/listr2-3.14.0.tgz#23101cc62e1375fd5836b248276d1d2b51fdbe9e" - integrity sha512-TyWI8G99GX9GjE54cJ+RrNMcIFBfwMPxc3XTFiAYGN4s10hWROGtOg7+O6u6LE3mNkyld7RSLE6nrKBvTfcs3g== - dependencies: - cli-truncate "^2.1.0" - colorette "^2.0.16" - log-update "^4.0.0" - p-map "^4.0.0" - rfdc "^1.3.0" - rxjs "^7.5.1" - through "^2.3.8" - wrap-ansi "^7.0.0" - -lodash.once@^4.1.1: - version "4.1.1" - resolved "https://registry.yarnpkg.com/lodash.once/-/lodash.once-4.1.1.tgz#0dd3971213c7c56df880977d504c88fb471a97ac" - integrity sha512-Sb487aTOCr9drQVL8pIxOzVhafOjZN9UU54hiN8PU3uAiSV7lx1yYNpbNmex2PK6dSJoNTSJUUswT651yww3Mg== - -lodash@^4.17.21, lodash@^4.17.4: - version "4.17.21" - resolved "https://registry.yarnpkg.com/lodash/-/lodash-4.17.21.tgz#679591c564c3bffaae8454cf0b3df370c3d6911c" - integrity sha512-v2kDEe57lecTulaDIuNTPy3Ry4gLGJ6Z1O3vE1krgXZNrsQ+LFTGHVxVjcXPs17LhbZVGedAJv8XZ1tvj5FvSg== - -log-symbols@^4.0.0: - version "4.1.0" - resolved "https://registry.yarnpkg.com/log-symbols/-/log-symbols-4.1.0.tgz#3fbdbb95b4683ac9fc785111e792e558d4abd503" - integrity sha512-8XPvpAA8uyhfteu8pIvQxpJZ7SYYdpUivZpGy6sFsBuKRY/7rQGavedeB8aK+Zkyq6upMFVL/9AW6vOYzfRyLg== - dependencies: - chalk "^4.1.0" - is-unicode-supported "^0.1.0" - -log-update@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/log-update/-/log-update-4.0.0.tgz#589ecd352471f2a1c0c570287543a64dfd20e0a1" - integrity sha512-9fkkDevMefjg0mmzWFBW8YkFP91OrizzkW3diF7CpG+S2EYdy4+TVfGwz1zeF8x7hCx1ovSPTOE9Ngib74qqUg== - dependencies: - ansi-escapes "^4.3.0" - cli-cursor "^3.1.0" - slice-ansi "^4.0.0" - wrap-ansi "^6.2.0" - -lru-cache@^6.0.0: - version "6.0.0" - resolved "https://registry.yarnpkg.com/lru-cache/-/lru-cache-6.0.0.tgz#6d6fe6570ebd96aaf90fcad1dafa3b2566db3a94" - integrity sha512-Jo6dJ04CmSjuznwJSS3pUeWmd/H0ffTlkXXgwZi+eq1UCmqQwCh+eLsYOYCwY991i2Fah4h1BEMCx4qThGbsiA== - dependencies: - yallist "^4.0.0" - -make-error@^1.1.1, make-error@^1.3.6: - version "1.3.6" - resolved "https://registry.yarnpkg.com/make-error/-/make-error-1.3.6.tgz#2eb2e37ea9b67c4891f684a1394799af484cf7a2" - integrity sha512-s8UhlNe7vPKomQhC1qFelMokr/Sc3AgNbso3n74mVPA5LTZwkB9NlXf4XPamLxJE8h0gh73rM94xvwRT2CVInw== - -map-stream@~0.1.0: - version "0.1.0" - resolved "https://registry.yarnpkg.com/map-stream/-/map-stream-0.1.0.tgz#e56aa94c4c8055a16404a0674b78f215f7c8e194" - integrity sha512-CkYQrPYZfWnu/DAmVCpTSX/xHpKZ80eKh2lAkyA6AJTef6bW+6JpbQZN5rofum7da+SyN1bi5ctTm+lTfcCW3g== - -merge-stream@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/merge-stream/-/merge-stream-2.0.0.tgz#52823629a14dd00c9770fb6ad47dc6310f2c1f60" - integrity sha512-abv/qOcuPfk3URPfDzmZU1LKmuw8kT+0nIHvKrKgFrwifol/doWcdA4ZqsWQ8ENrFKkd67Mfpo/LovbIUsbt3w== - -merge2@^1.3.0, merge2@^1.4.1: - version "1.4.1" - resolved "https://registry.yarnpkg.com/merge2/-/merge2-1.4.1.tgz#4368892f885e907455a6fd7dc55c0c9d404990ae" - integrity sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg== - -micromatch@^4.0.4: - version "4.0.5" - resolved "https://registry.yarnpkg.com/micromatch/-/micromatch-4.0.5.tgz#bc8999a7cbbf77cdc89f132f6e467051b49090c6" - integrity sha512-DMy+ERcEW2q8Z2Po+WNXuw3c5YaUSFjAO5GsJqfEl7UjvtIuFKO6ZrKvcItdy98dwFI2N1tg3zNIdKaQT+aNdA== - dependencies: - braces "^3.0.2" - picomatch "^2.3.1" - -mime-db@1.52.0: - version "1.52.0" - resolved "https://registry.yarnpkg.com/mime-db/-/mime-db-1.52.0.tgz#bbabcdc02859f4987301c856e3387ce5ec43bf70" - integrity sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg== - -mime-types@^2.1.12, mime-types@~2.1.19: - version "2.1.35" - resolved "https://registry.yarnpkg.com/mime-types/-/mime-types-2.1.35.tgz#381a871b62a734450660ae3deee44813f70d959a" - integrity sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw== - dependencies: - mime-db "1.52.0" - -mimic-fn@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/mimic-fn/-/mimic-fn-2.1.0.tgz#7ed2c2ccccaf84d3ffcb7a69b57711fc2083401b" - integrity sha512-OqbOk5oEQeAZ8WXWydlu9HJjz9WVdEIvamMCcXmuqUYjTknH/sqsWvhQ3vgwKFRR1HpjvNBKQ37nbJgYzGqGcg== - -minimatch@^3.0.4, minimatch@^3.1.1: - version "3.1.2" - resolved "https://registry.yarnpkg.com/minimatch/-/minimatch-3.1.2.tgz#19cd194bfd3e428f049a70817c038d89ab4be35b" - integrity sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw== - dependencies: - brace-expansion "^1.1.7" - -minimist@^1.2.5, minimist@^1.2.6: - version "1.2.8" - resolved "https://registry.yarnpkg.com/minimist/-/minimist-1.2.8.tgz#c1a464e7693302e082a075cee0c057741ac4772c" - integrity sha512-2yyAR8qBkN3YuheJanUpWC5U3bb5osDywNB8RzDVlDwDHbocAJveqqj1u8+SVD7jkWT4yvsHCpWqqWqAxb0zCA== - -module-definition@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/module-definition/-/module-definition-5.0.1.tgz#62d1194e5d5ea6176b7dc7730f818f466aefa32f" - integrity sha512-kvw3B4G19IXk+BOXnYq/D/VeO9qfHaapMeuS7w7sNUqmGaA6hywdFHMi+VWeR9wUScXM7XjoryTffCZ5B0/8IA== - dependencies: - ast-module-types "^5.0.0" - node-source-walk "^6.0.1" - -module-lookup-amd@^8.0.5: - version "8.0.5" - resolved "https://registry.yarnpkg.com/module-lookup-amd/-/module-lookup-amd-8.0.5.tgz#aaeea41979105b49339380ca3f7d573db78c32a5" - integrity sha512-vc3rYLjDo5Frjox8NZpiyLXsNWJ5BWshztc/5KSOMzpg9k5cHH652YsJ7VKKmtM4SvaxuE9RkrYGhiSjH3Ehow== - dependencies: - commander "^10.0.1" - glob "^7.2.3" - requirejs "^2.3.6" - requirejs-config-file "^4.0.0" - -ms@2.1.2: - version "2.1.2" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.2.tgz#d09d1f357b443f493382a8eb3ccd183872ae6009" - integrity sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w== - -ms@^2.1.1: - version "2.1.3" - resolved "https://registry.yarnpkg.com/ms/-/ms-2.1.3.tgz#574c8138ce1d2b5861f0b44579dbadd60c6615b2" - integrity sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA== - -nanoid@^3.3.7: - version "3.3.7" - resolved "https://registry.yarnpkg.com/nanoid/-/nanoid-3.3.7.tgz#d0c301a691bc8d54efa0a2226ccf3fe2fd656bd8" - integrity sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g== - -node-fetch@^2.6.1, node-fetch@^2.6.7, node-fetch@^2.6.8: - version "2.7.0" - resolved "https://registry.yarnpkg.com/node-fetch/-/node-fetch-2.7.0.tgz#d0f0fa6e3e2dc1d27efcd8ad99d550bda94d187d" - integrity sha512-c4FRfUm/dbcWZ7U+1Wq0AwCyFL+3nt2bEw05wfxSz+DWpWsitgmSgYmy2dQdWyKC1694ELPqMs/YzUSNozLt8A== - dependencies: - whatwg-url "^5.0.0" - -node-source-walk@^6.0.0, node-source-walk@^6.0.1, node-source-walk@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/node-source-walk/-/node-source-walk-6.0.2.tgz#ba81bc4bc0f6f05559b084bea10be84c3f87f211" - integrity sha512-jn9vOIK/nfqoFCcpK89/VCVaLg1IHE6UVfDOzvqmANaJ/rWCTEdH8RZ1V278nv2jr36BJdyQXIAavBLXpzdlag== - dependencies: - "@babel/parser" "^7.21.8" - -npm-run-path@^4.0.0: - version "4.0.1" - resolved "https://registry.yarnpkg.com/npm-run-path/-/npm-run-path-4.0.1.tgz#b7ecd1e5ed53da8e37a55e1c2269e0b97ed748ea" - integrity sha512-S48WzZW777zhNIrn7gxOlISNAqi9ZC/uQFnRdbeIHhZhCA6UqpkOT8T1G7BvfdgP4Er8gF4sUbaS0i7QvIfCWw== - dependencies: - path-key "^3.0.0" - -object-inspect@^1.13.1: - version "1.13.1" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.13.1.tgz#b96c6109324ccfef6b12216a956ca4dc2ff94bc2" - integrity sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ== - -object-inspect@^1.9.0: - version "1.12.3" - resolved "https://registry.yarnpkg.com/object-inspect/-/object-inspect-1.12.3.tgz#ba62dffd67ee256c8c086dfae69e016cd1f198b9" - integrity sha512-geUvdk7c+eizMNUDkRpW1wJwgfOiOeHbxBR/hLXK1aT6zmVSO0jsQcs7fj6MGw89jC/cjGfLcNOrtMYtGqm81g== - -object-keys@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/object-keys/-/object-keys-1.1.1.tgz#1c47f272df277f3b1daf061677d9c82e2322c60e" - integrity sha512-NuAESUOUMrlIXOfHKzD6bpPu3tYt3xvjNdRIQ+FeT0lNb4K8WR70CaDxhuNguS2XG+GjkyMwOzsN5ZktImfhLA== - -object.assign@^4.1.4: - version "4.1.5" - resolved "https://registry.yarnpkg.com/object.assign/-/object.assign-4.1.5.tgz#3a833f9ab7fdb80fc9e8d2300c803d216d8fdbb0" - integrity sha512-byy+U7gp+FVwmyzKPYhW2h5l3crpmGsxl7X2s8y43IgxvG4g3QZ6CffDtsNQy1WsmZpQbO+ybo0AlW7TY6DcBQ== - dependencies: - call-bind "^1.0.5" - define-properties "^1.2.1" - has-symbols "^1.0.3" - object-keys "^1.1.1" - -once@^1.3.0, once@^1.3.1, once@^1.4.0: - version "1.4.0" - resolved "https://registry.yarnpkg.com/once/-/once-1.4.0.tgz#583b1aa775961d4b113ac17d9c50baef9dd76bd1" - integrity sha512-lNaJgI+2Q5URQBkccEKHTQOPaXdUxnZZElQTZY0MFUAuaEqe1E+Nyvgdz/aIyNi6Z9MzO5dv1H8n58/GELp3+w== - dependencies: - wrappy "1" - -onetime@^5.1.0: - version "5.1.2" - resolved "https://registry.yarnpkg.com/onetime/-/onetime-5.1.2.tgz#d0e96ebb56b07476df1dd9c4806e5237985ca45e" - integrity sha512-kbpaSSGJTWdAY5KPVeMOKXSrPtr8C8C7wodJbcsd51jRnmD+GZu8Y0VoU6Dm5Z4vWr0Ig/1NKuWRKf7j5aaYSg== - dependencies: - mimic-fn "^2.1.0" - -ospath@^1.2.2: - version "1.2.2" - resolved "https://registry.yarnpkg.com/ospath/-/ospath-1.2.2.tgz#1276639774a3f8ef2572f7fe4280e0ea4550c07b" - integrity sha512-o6E5qJV5zkAbIDNhGSIlyOhScKXgQrSRMilfph0clDfM0nEnBOlKlH4sWDmG95BW/CvwNz0vmm7dJVtU2KlMiA== - -p-map@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/p-map/-/p-map-4.0.0.tgz#bb2f95a5eda2ec168ec9274e06a747c3e2904d2b" - integrity sha512-/bjOqmgETBYB5BoEeGVea8dmvHb2m9GLy1E9W43yeyfP6QQCZGFNa+XRceJEuDB6zqr+gKpIAmlLebMpykw/MQ== - dependencies: - aggregate-error "^3.0.0" - -path-is-absolute@^1.0.0: - version "1.0.1" - resolved "https://registry.yarnpkg.com/path-is-absolute/-/path-is-absolute-1.0.1.tgz#174b9268735534ffbc7ace6bf53a5a9e1b5c5f5f" - integrity sha512-AVbw3UJ2e9bq64vSaS9Am0fje1Pa8pbGqTTsmXfaIiMpnr5DlDhfJOuLj9Sf95ZPVDAUerDfEk88MPmPe7UCQg== - -path-key@^3.0.0, path-key@^3.1.0: - version "3.1.1" - resolved "https://registry.yarnpkg.com/path-key/-/path-key-3.1.1.tgz#581f6ade658cbba65a0d3380de7753295054f375" - integrity sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q== - -path-parse@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/path-parse/-/path-parse-1.0.7.tgz#fbc114b60ca42b30d9daf5858e4bd68bbedb6735" - integrity sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw== - -path-type@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/path-type/-/path-type-4.0.0.tgz#84ed01c0a7ba380afe09d90a8c180dcd9d03043b" - integrity sha512-gDKb8aZMDeD/tZWs9P6+q0J9Mwkdl6xMV8TjnGP3qJVJ06bdMgkbBlLU8IdfOsIsFz2BW1rNVT3XuNEl8zPAvw== - -pause-stream@0.0.11: - version "0.0.11" - resolved "https://registry.yarnpkg.com/pause-stream/-/pause-stream-0.0.11.tgz#fe5a34b0cbce12b5aa6a2b403ee2e73b602f1445" - integrity sha512-e3FBlXLmN/D1S+zHzanP4E/4Z60oFAa3O051qt1pxa7DEJWKAyil6upYVXCWadEnuoqa4Pkc9oUx9zsxYeRv8A== - dependencies: - through "~2.3" - -pend@~1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/pend/-/pend-1.2.0.tgz#7a57eb550a6783f9115331fcf4663d5c8e007a50" - integrity sha512-F3asv42UuXchdzt+xXqfW1OGlVBe+mxa2mqI0pg5yAHZPvFmY3Y6drSf/GQ1A86WgWEN9Kzh/WrgKa6iGcHXLg== - -performance-now@^2.1.0: - version "2.1.0" - resolved "https://registry.yarnpkg.com/performance-now/-/performance-now-2.1.0.tgz#6309f4e0e5fa913ec1c69307ae364b4b377c9e7b" - integrity sha512-7EAHlyLHI56VEIdK57uwHdHKIaAGbnXPiw0yWbarQZOKaKpvUIgW0jWRVLiatnM+XXlSwsanIBH/hzGMJulMow== - -picocolors@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/picocolors/-/picocolors-1.0.0.tgz#cb5bdc74ff3f51892236eaf79d68bc44564ab81c" - integrity sha512-1fygroTLlHu66zi26VoTDv8yRgm0Fccecssto+MhsZ0D/DGW2sm8E8AjW7NU5VVTRt5GxbeZ5qBuJr+HyLYkjQ== - -picomatch@^2.3.1: - version "2.3.1" - resolved "https://registry.yarnpkg.com/picomatch/-/picomatch-2.3.1.tgz#3ba3833733646d9d3e4995946c1365a67fb07a42" - integrity sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA== - -pify@^2.2.0: - version "2.3.0" - resolved "https://registry.yarnpkg.com/pify/-/pify-2.3.0.tgz#ed141a6ac043a849ea588498e7dca8b15330e90c" - integrity sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog== - -pluralize@^8.0.0: - version "8.0.0" - resolved "https://registry.yarnpkg.com/pluralize/-/pluralize-8.0.0.tgz#1a6fa16a38d12a1901e0320fa017051c539ce3b1" - integrity sha512-Nc3IT5yHzflTfbjgqWcCPpo7DaKy4FnpB0l/zCAW0Tc7jxAiuqSxHasntB3D7887LSrA93kDJ9IXovxJYxyLCA== - -postcss-values-parser@^6.0.2: - version "6.0.2" - resolved "https://registry.yarnpkg.com/postcss-values-parser/-/postcss-values-parser-6.0.2.tgz#636edc5b86c953896f1bb0d7a7a6615df00fb76f" - integrity sha512-YLJpK0N1brcNJrs9WatuJFtHaV9q5aAOj+S4DI5S7jgHlRfm0PIbDCAFRYMQD5SHq7Fy6xsDhyutgS0QOAs0qw== - dependencies: - color-name "^1.1.4" - is-url-superb "^4.0.0" - quote-unquote "^1.0.0" - -postcss@^8.4.23: - version "8.4.32" - resolved "https://registry.yarnpkg.com/postcss/-/postcss-8.4.32.tgz#1dac6ac51ab19adb21b8b34fd2d93a86440ef6c9" - integrity sha512-D/kj5JNu6oo2EIy+XL/26JEDTlIbB8hw85G8StOE6L74RQAVVP5rej6wxCNqyMbR4RkPfqvezVbPw81Ngd6Kcw== - dependencies: - nanoid "^3.3.7" - picocolors "^1.0.0" - source-map-js "^1.0.2" - -precinct@^11.0.5: - version "11.0.5" - resolved "https://registry.yarnpkg.com/precinct/-/precinct-11.0.5.tgz#3e15b3486670806f18addb54b8533e23596399ff" - integrity sha512-oHSWLC8cL/0znFhvln26D14KfCQFFn4KOLSw6hmLhd+LQ2SKt9Ljm89but76Pc7flM9Ty1TnXyrA2u16MfRV3w== - dependencies: - "@dependents/detective-less" "^4.1.0" - commander "^10.0.1" - detective-amd "^5.0.2" - detective-cjs "^5.0.1" - detective-es6 "^4.0.1" - detective-postcss "^6.1.3" - detective-sass "^5.0.3" - detective-scss "^4.0.3" - detective-stylus "^4.0.0" - detective-typescript "^11.1.0" - module-definition "^5.0.1" - node-source-walk "^6.0.2" - -pretty-bytes@^5.6.0: - version "5.6.0" - resolved "https://registry.yarnpkg.com/pretty-bytes/-/pretty-bytes-5.6.0.tgz#356256f643804773c82f64723fe78c92c62beaeb" - integrity sha512-FFw039TmrBqFK8ma/7OL3sDz/VytdtJr044/QUJtH0wK9lb9jLq9tJyIxUwtQJHwar2BqtiA4iCWSwo9JLkzFg== - -proxy-from-env@1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/proxy-from-env/-/proxy-from-env-1.0.0.tgz#33c50398f70ea7eb96d21f7b817630a55791c7ee" - integrity sha512-F2JHgJQ1iqwnHDcQjVBsq3n/uoaFL+iPW/eAeL7kVxy/2RrWaN4WroKjjvbsoRtv0ftelNyC01bjRhn/bhcf4A== - -ps-tree@^1.2.0: - version "1.2.0" - resolved "https://registry.yarnpkg.com/ps-tree/-/ps-tree-1.2.0.tgz#5e7425b89508736cdd4f2224d028f7bb3f722ebd" - integrity sha512-0VnamPPYHl4uaU/nSFeZZpR21QAWRz+sRv4iW9+v/GS/J5U5iZB5BNN6J0RMoOvdx2gWM2+ZFMIm58q24e4UYA== - dependencies: - event-stream "=3.3.4" - -psl@^1.1.28: - version "1.9.0" - resolved "https://registry.yarnpkg.com/psl/-/psl-1.9.0.tgz#d0df2a137f00794565fcaf3b2c00cd09f8d5a5a7" - integrity sha512-E/ZsdU4HLs/68gYzgGTkMicWTLPdAftJLfJFlLUAAKZGkStNU72sZjT66SnMDVOfOWY/YAoiD7Jxa9iHvngcag== - -pump@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/pump/-/pump-3.0.0.tgz#b4a2116815bde2f4e1ea602354e8c75565107a64" - integrity sha512-LwZy+p3SFs1Pytd/jYct4wpv49HiYCqd9Rlc5ZVdk0V+8Yzv6jR5Blk3TRmPL1ft69TxP0IMZGJ+WPFU2BFhww== - dependencies: - end-of-stream "^1.1.0" - once "^1.3.1" - -punycode@^2.1.1: - version "2.3.0" - resolved "https://registry.yarnpkg.com/punycode/-/punycode-2.3.0.tgz#f67fa67c94da8f4d0cfff981aee4118064199b8f" - integrity sha512-rRV+zQD8tVFys26lAGR9WUuS4iUAngJScM+ZRSKtvl5tKeZ2t5bvdNFdNHBW9FWR4guGHlgmsZ1G7BSm2wTbuA== - -qs@~6.10.3: - version "6.10.5" - resolved "https://registry.yarnpkg.com/qs/-/qs-6.10.5.tgz#974715920a80ff6a262264acd2c7e6c2a53282b4" - integrity sha512-O5RlPh0VFtR78y79rgcgKK4wbAI0C5zGVLztOIdpWX6ep368q5Hv6XRxDvXuZ9q3C6v+e3n8UfZZJw7IIG27eQ== - dependencies: - side-channel "^1.0.4" - -query-registry@^2.6.0: - version "2.6.0" - resolved "https://registry.yarnpkg.com/query-registry/-/query-registry-2.6.0.tgz#fb678ac2d8d46468ff55a02fb88f136e5d63da21" - integrity sha512-Z5oNq7qH0g96qBTx2jAvS0X71hKP4tETtSJKEl6BdihzYqh9QKiJQBMT7qIQuzxR9lxfiso+aXCFhZ+EcAoppQ== - dependencies: - isomorphic-unfetch "^3.1.0" - make-error "^1.3.6" - tiny-lru "^8.0.2" - url-join "4.0.1" - validate-npm-package-name "^4.0.0" - -queue-microtask@^1.2.2: - version "1.2.3" - resolved "https://registry.yarnpkg.com/queue-microtask/-/queue-microtask-1.2.3.tgz#4929228bbc724dfac43e0efb058caf7b6cfb6243" - integrity sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A== - -quote-unquote@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/quote-unquote/-/quote-unquote-1.0.0.tgz#67a9a77148effeaf81a4d428404a710baaac8a0b" - integrity sha512-twwRO/ilhlG/FIgYeKGFqyHhoEhqgnKVkcmqMKi2r524gz3ZbDTcyFt38E9xjJI2vT+KbRNHVbnJ/e0I25Azwg== - -"readable-stream@2 || 3": - version "3.6.2" - resolved "https://registry.yarnpkg.com/readable-stream/-/readable-stream-3.6.2.tgz#56a9b36ea965c00c5a93ef31eb111a0f11056967" - integrity sha512-9u/sniCrY3D5WdsERHzHE4G2YCXqoG5FTHUiCC4SIbr6XcLZBY05ya9EKjYek9O5xOAwjGq+1JdGBAS7Q9ScoA== - dependencies: - inherits "^2.0.3" - string_decoder "^1.1.1" - util-deprecate "^1.0.1" - -rechoir@^0.6.2: - version "0.6.2" - resolved "https://registry.yarnpkg.com/rechoir/-/rechoir-0.6.2.tgz#85204b54dba82d5742e28c96756ef43af50e3384" - integrity sha512-HFM8rkZ+i3zrV+4LQjwQ0W+ez98pApMGM3HUrN04j3CqzPOzl9nmP15Y8YXNm8QHGv/eacOVEjqhmWpkRV0NAw== - dependencies: - resolve "^1.1.6" - -regexp.prototype.flags@^1.5.0, regexp.prototype.flags@^1.5.1: - version "1.5.1" - resolved "https://registry.yarnpkg.com/regexp.prototype.flags/-/regexp.prototype.flags-1.5.1.tgz#90ce989138db209f81492edd734183ce99f9677e" - integrity sha512-sy6TXMN+hnP/wMy+ISxg3krXx7BAtWVO4UouuCN/ziM9UEne0euamVNafDfvC83bRNr95y0V5iijeDQFUNpvrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - set-function-name "^2.0.0" - -request-progress@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/request-progress/-/request-progress-3.0.0.tgz#4ca754081c7fec63f505e4faa825aa06cd669dbe" - integrity sha512-MnWzEHHaxHO2iWiQuHrUPBi/1WeBf5PkxQqNyNvLl9VAYSdXkP8tQ3pBSeCPD+yw0v0Aq1zosWLz0BdeXpWwZg== - dependencies: - throttleit "^1.0.0" - -require-and-forget@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/require-and-forget/-/require-and-forget-1.0.1.tgz#b535a1b8f0f0dd6a48ab05b0ab15d26135d61142" - integrity sha512-Sea861D/seGo3cptxc857a34Df0oEijXit8Q3IDodiwZMzVmyXrRI9EgQQa3hjkhoEjNzCBvv0t/0fMgebmWLg== - dependencies: - debug "4.3.4" - -requirejs-config-file@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/requirejs-config-file/-/requirejs-config-file-4.0.0.tgz#4244da5dd1f59874038cc1091d078d620abb6ebc" - integrity sha512-jnIre8cbWOyvr8a5F2KuqBnY+SDA4NXr/hzEZJG79Mxm2WiFQz2dzhC8ibtPJS7zkmBEl1mxSwp5HhC1W4qpxw== - dependencies: - esprima "^4.0.0" - stringify-object "^3.2.1" - -requirejs@^2.3.6: - version "2.3.6" - resolved "https://registry.yarnpkg.com/requirejs/-/requirejs-2.3.6.tgz#e5093d9601c2829251258c0b9445d4d19fa9e7c9" - integrity sha512-ipEzlWQe6RK3jkzikgCupiTbTvm4S0/CAU5GlgptkN5SO6F3u0UD0K18wy6ErDqiCyP4J4YYe1HuAShvsxePLg== - -resolve-dependency-path@^3.0.2: - version "3.0.2" - resolved "https://registry.yarnpkg.com/resolve-dependency-path/-/resolve-dependency-path-3.0.2.tgz#012816717bcbe8b846835da11af9d2beb5acef50" - integrity sha512-Tz7zfjhLfsvR39ADOSk9us4421J/1ztVBo4rWUkF38hgHK5m0OCZ3NxFVpqHRkjctnwVa15igEUHFJp8MCS7vA== - -resolve@^1.1.6, resolve@^1.22.3: - version "1.22.8" - resolved "https://registry.yarnpkg.com/resolve/-/resolve-1.22.8.tgz#b6c87a9f2aa06dfab52e3d70ac8cde321fa5a48d" - integrity sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw== - dependencies: - is-core-module "^2.13.0" - path-parse "^1.0.7" - supports-preserve-symlinks-flag "^1.0.0" - -restore-cursor@^3.1.0: - version "3.1.0" - resolved "https://registry.yarnpkg.com/restore-cursor/-/restore-cursor-3.1.0.tgz#39f67c54b3a7a58cea5236d95cf0034239631f7e" - integrity sha512-l+sSefzHpj5qimhFSE5a8nufZYAM3sBSVMAPtYkmC+4EH2anSGaEMXSD0izRQbu9nfyQ9y5JrVmp7E8oZrUjvA== - dependencies: - onetime "^5.1.0" - signal-exit "^3.0.2" - -reusify@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/reusify/-/reusify-1.0.4.tgz#90da382b1e126efc02146e90845a88db12925d76" - integrity sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw== - -rfdc@^1.3.0: - version "1.3.0" - resolved "https://registry.yarnpkg.com/rfdc/-/rfdc-1.3.0.tgz#d0b7c441ab2720d05dc4cf26e01c89631d9da08b" - integrity sha512-V2hovdzFbOi77/WajaSMXk2OLm+xNIeQdMMuB7icj7bk6zi2F8GGAxigcnDFpJHbNyNcgyJDiP+8nOrY5cZGrA== - -rimraf@^3.0.0: - version "3.0.2" - resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-3.0.2.tgz#f1a5402ba6220ad52cc1282bac1ae3aa49fd061a" - integrity sha512-JZkJMZkAGFFPP2YqXZXPbMlMBgsxzE8ILs4lMIX/2o0L9UBw9O/Y3o6wFw/i9YLapcUJWwqbi3kdxIPdC62TIA== - dependencies: - glob "^7.1.3" - -run-parallel@^1.1.9: - version "1.2.0" - resolved "https://registry.yarnpkg.com/run-parallel/-/run-parallel-1.2.0.tgz#66d1368da7bdf921eb9d95bd1a9229e7f21a43ee" - integrity sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA== - dependencies: - queue-microtask "^1.2.2" - -rxjs@^7.5.1: - version "7.8.1" - resolved "https://registry.yarnpkg.com/rxjs/-/rxjs-7.8.1.tgz#6f6f3d99ea8044291efd92e7c7fcf562c4057543" - integrity sha512-AA3TVj+0A2iuIoQkWEK/tqFjBq2j+6PO6Y0zJcvzLAFhEFIO3HL0vls9hWLncZbAAbK0mar7oZ4V079I/qPMxg== - dependencies: - tslib "^2.1.0" - -safe-array-concat@^1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/safe-array-concat/-/safe-array-concat-1.0.1.tgz#91686a63ce3adbea14d61b14c99572a8ff84754c" - integrity sha512-6XbUAseYE2KtOuGueyeobCySj9L4+66Tn6KQMOPQJrAJEowYKW/YR/MGJZl7FdydUdaFu4LYyDZjxf4/Nmo23Q== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - isarray "^2.0.5" - -safe-buffer@^5.0.1, safe-buffer@^5.1.2, safe-buffer@~5.2.0: - version "5.2.1" - resolved "https://registry.yarnpkg.com/safe-buffer/-/safe-buffer-5.2.1.tgz#1eaf9fa9bdb1fdd4ec75f58f9cdb4e6b7827eec6" - integrity sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ== - -safe-regex-test@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/safe-regex-test/-/safe-regex-test-1.0.0.tgz#793b874d524eb3640d1873aad03596db2d4f2295" - integrity sha512-JBUUzyOgEwXQY1NuPtvcj/qcBDbDmEvWufhlnXZIm75DEHp+afM1r1ujJpJsV/gSM4t59tpDyPi1sd6ZaPFfsA== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.1.3" - is-regex "^1.1.4" - -safer-buffer@^2.0.2, safer-buffer@^2.1.0, safer-buffer@~2.1.0: - version "2.1.2" - resolved "https://registry.yarnpkg.com/safer-buffer/-/safer-buffer-2.1.2.tgz#44fa161b0187b9549dd84bb91802f9bd8385cd6a" - integrity sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg== - -sass-lookup@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/sass-lookup/-/sass-lookup-5.0.1.tgz#1f01d7ff21e09d8c9dcf8d05b3fca28f2f96e6ed" - integrity sha512-t0X5PaizPc2H4+rCwszAqHZRtr4bugo4pgiCvrBFvIX0XFxnr29g77LJcpyj9A0DcKf7gXMLcgvRjsonYI6x4g== - dependencies: - commander "^10.0.1" - -scroll-into-view-if-needed@^2.2.20: - version "2.2.31" - resolved "https://registry.yarnpkg.com/scroll-into-view-if-needed/-/scroll-into-view-if-needed-2.2.31.tgz#d3c482959dc483e37962d1521254e3295d0d1587" - integrity sha512-dGCXy99wZQivjmjIqihaBQNjryrz5rueJY7eHfTdyWEiR4ttYpsajb14rn9s5d4DY4EcY6+4+U/maARBXJedkA== - dependencies: - compute-scroll-into-view "^1.0.20" - -semver@^7.0.0, semver@^7.3.7, semver@^7.5.2, semver@^7.5.4: - version "7.5.4" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.4.tgz#483986ec4ed38e1c6c48c34894a9182dbff68a6e" - integrity sha512-1bCSESV6Pv+i21Hvpxp3Dx+pSD8lIPt8uVjRrxAUt/nbswYc+tK6Y2btiULjd4+fnq15PX+nqQDC7Oft7WkwcA== - dependencies: - lru-cache "^6.0.0" - -semver@^7.3.2: - version "7.5.1" - resolved "https://registry.yarnpkg.com/semver/-/semver-7.5.1.tgz#c90c4d631cf74720e46b21c1d37ea07edfab91ec" - integrity sha512-Wvss5ivl8TMRZXXESstBA4uR5iXgEN/VC5/sOcuXdVLzcdkz4HWetIoRfG5gb5X+ij/G9rw9YoGn3QoQ8OCSpw== - dependencies: - lru-cache "^6.0.0" - -set-function-length@^1.1.1: - version "1.1.1" - resolved "https://registry.yarnpkg.com/set-function-length/-/set-function-length-1.1.1.tgz#4bc39fafb0307224a33e106a7d35ca1218d659ed" - integrity sha512-VoaqjbBJKiWtg4yRcKBQ7g7wnGnLV3M8oLvVWwOk2PdYY6PEFegR1vezXR0tw6fZGF9csVakIRjrJiy2veSBFQ== - dependencies: - define-data-property "^1.1.1" - get-intrinsic "^1.2.1" - gopd "^1.0.1" - has-property-descriptors "^1.0.0" - -set-function-name@^2.0.0: - version "2.0.1" - resolved "https://registry.yarnpkg.com/set-function-name/-/set-function-name-2.0.1.tgz#12ce38b7954310b9f61faa12701620a0c882793a" - integrity sha512-tMNCiqYVkXIZgc2Hnoy2IvC/f8ezc5koaRFkCjrpWzGpCd3qbZXPzVy9MAZzK1ch/X0jvSkojys3oqJN0qCmdA== - dependencies: - define-data-property "^1.0.1" - functions-have-names "^1.2.3" - has-property-descriptors "^1.0.0" - -shebang-command@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/shebang-command/-/shebang-command-2.0.0.tgz#ccd0af4f8835fbdc265b82461aaf0c36663f34ea" - integrity sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA== - dependencies: - shebang-regex "^3.0.0" - -shebang-regex@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/shebang-regex/-/shebang-regex-3.0.0.tgz#ae16f1644d873ecad843b0307b143362d4c42172" - integrity sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A== - -shelljs@^0.8.5: - version "0.8.5" - resolved "https://registry.yarnpkg.com/shelljs/-/shelljs-0.8.5.tgz#de055408d8361bed66c669d2f000538ced8ee20c" - integrity sha512-TiwcRcrkhHvbrZbnRcFYMLl30Dfov3HKqzp5tO5b4pt6G/SezKcYhmDg15zXVBswHmctSAQKznqNW2LO5tTDow== - dependencies: - glob "^7.0.0" - interpret "^1.0.0" - rechoir "^0.6.2" - -side-channel@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/side-channel/-/side-channel-1.0.4.tgz#efce5c8fdc104ee751b25c58d4290011fa5ea2cf" - integrity sha512-q5XPytqFEIKHkGdiMIrY10mvLRvnQh42/+GoBlFW3b2LXLE2xxJpZFdm94we0BaoV3RwJyGqg5wS7epxTv0Zvw== - dependencies: - call-bind "^1.0.0" - get-intrinsic "^1.0.2" - object-inspect "^1.9.0" - -signal-exit@^3.0.2: - version "3.0.7" - resolved "https://registry.yarnpkg.com/signal-exit/-/signal-exit-3.0.7.tgz#a9a1767f8af84155114eaabd73f99273c8f59ad9" - integrity sha512-wnD2ZE+l+SPC/uoS0vXeE9L1+0wuaMqKlfz9AMUo38JsyLSBWSFcHR1Rri62LZc12vLr1gb3jl7iwQhgwpAbGQ== - -simple-bin-help@^1.8.0: - version "1.8.0" - resolved "https://registry.yarnpkg.com/simple-bin-help/-/simple-bin-help-1.8.0.tgz#21bb82c6bccd9fa8678f9c0fadf2956b54e2160a" - integrity sha512-0LxHn+P1lF5r2WwVB/za3hLRIsYoLaNq1CXqjbrs3ZvLuvlWnRKrUjEWzV7umZL7hpQ7xULiQMV+0iXdRa5iFg== - -slash@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slash/-/slash-3.0.0.tgz#6539be870c165adbd5240220dbe361f1bc4d4634" - integrity sha512-g9Q1haeby36OSStwb4ntCGGGaKsaVSjQ68fBxoQcutl5fS1vuY18H3wSt3jFyFtrkx+Kz0V1G85A4MyAdDMi2Q== - -slate-history@0.93.0: - version "0.93.0" - resolved "https://registry.yarnpkg.com/slate-history/-/slate-history-0.93.0.tgz#d2fad47e4e8b262ab7c86b653f5dd6d9b6d85277" - integrity sha512-Gr1GMGPipRuxIz41jD2/rbvzPj8eyar56TVMyJBvBeIpQSSjNISssvGNDYfJlSWM8eaRqf6DAcxMKzsLCYeX6g== - dependencies: - is-plain-object "^5.0.0" - -slate-react@0.97.1: - version "0.97.1" - resolved "https://registry.yarnpkg.com/slate-react/-/slate-react-0.97.1.tgz#688b06ea7a26b8d94d8e29a7b8106087f17c8428" - integrity sha512-+1LMIVusBwduzBOsoX0u6ah7qgpOIlVOdbVpUrowSc5uZTXViBvAQnvSD6edOjtRUI62IFtPSvDAoHRm+E55+g== - dependencies: - "@juggle/resize-observer" "^3.4.0" - "@types/is-hotkey" "^0.1.1" - "@types/lodash" "^4.14.149" - direction "^1.0.3" - is-hotkey "^0.1.6" - is-plain-object "^5.0.0" - lodash "^4.17.4" - scroll-into-view-if-needed "^2.2.20" - tiny-invariant "1.0.6" - -slate@0.94.1: - version "0.94.1" - resolved "https://registry.yarnpkg.com/slate/-/slate-0.94.1.tgz#13b0ba7d0a7eeb0ec89a87598e9111cbbd685696" - integrity sha512-GH/yizXr1ceBoZ9P9uebIaHe3dC/g6Plpf9nlUwnvoyf6V1UOYrRwkabtOCd3ZfIGxomY4P7lfgLr7FPH8/BKA== - dependencies: - immer "^9.0.6" - is-plain-object "^5.0.0" - tiny-warning "^1.0.3" - -slice-ansi@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-3.0.0.tgz#31ddc10930a1b7e0b67b08c96c2f49b77a789787" - integrity sha512-pSyv7bSTC7ig9Dcgbw9AuRNUb5k5V6oDudjZoMBSr13qpLBG7tB+zgCkARjq7xIUgdz5P1Qe8u+rSGdouOOIyQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -slice-ansi@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/slice-ansi/-/slice-ansi-4.0.0.tgz#500e8dd0fd55b05815086255b3195adf2a45fe6b" - integrity sha512-qMCMfhY040cVHT43K9BFygqYbUPFZKHOg7K73mtTWJRb8pyP3fzf4Ixd5SzdEJQ6MRUg/WBnOLxghZtKKurENQ== - dependencies: - ansi-styles "^4.0.0" - astral-regex "^2.0.0" - is-fullwidth-code-point "^3.0.0" - -source-map-js@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/source-map-js/-/source-map-js-1.0.2.tgz#adbc361d9c62df380125e7f161f71c826f1e490c" - integrity sha512-R0XvVJ9WusLiqTCEiGCmICCMplcCkIwwR11mOSD9CR5u+IXYdiseeEuXCVAjS54zqwkLcPNnmU4OeJ6tUrWhDw== - -source-map@~0.6.1: - version "0.6.1" - resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263" - integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g== - -spec-change@^1.7.1: - version "1.7.1" - resolved "https://registry.yarnpkg.com/spec-change/-/spec-change-1.7.1.tgz#3c56185c887a15482f1fbb3362916fc97c8fdb9f" - integrity sha512-bZmtSmS5w6M6Snae+AGp+y89MZ7QG2SZW1v3Au83+YWcZzCu0YtH2hXruJWXg6VdYUpQ3n+m9bRrWmwLaPkFjQ== - dependencies: - arg "^5.0.2" - debug "^4.3.4" - dependency-tree "^10.0.9" - globby "^11.1.0" - lazy-ass "^2.0.3" - -split@0.3: - version "0.3.3" - resolved "https://registry.yarnpkg.com/split/-/split-0.3.3.tgz#cd0eea5e63a211dfff7eb0f091c4133e2d0dd28f" - integrity sha512-wD2AeVmxXRBoX44wAycgjVpMhvbwdI2aZjCkvfNcH1YqHQvJVa1duWc73OyVGJUc05fhFaTZeQ/PYsrmyH0JVA== - dependencies: - through "2" - -sshpk@^1.14.1: - version "1.17.0" - resolved "https://registry.yarnpkg.com/sshpk/-/sshpk-1.17.0.tgz#578082d92d4fe612b13007496e543fa0fbcbe4c5" - integrity sha512-/9HIEs1ZXGhSPE8X6Ccm7Nam1z8KcoCqPdI7ecm1N33EzAetWahvQWVqLZtaZQ+IDKX4IyA2o0gBzqIMkAagHQ== - dependencies: - asn1 "~0.2.3" - assert-plus "^1.0.0" - bcrypt-pbkdf "^1.0.0" - dashdash "^1.12.0" - ecc-jsbn "~0.1.1" - getpass "^0.1.1" - jsbn "~0.1.0" - safer-buffer "^2.0.2" - tweetnacl "~0.14.0" - -stream-combiner@~0.0.4: - version "0.0.4" - resolved "https://registry.yarnpkg.com/stream-combiner/-/stream-combiner-0.0.4.tgz#4d5e433c185261dde623ca3f44c586bcf5c4ad14" - integrity sha512-rT00SPnTVyRsaSz5zgSPma/aHSOic5U1prhYdRy5HS2kTZviFpmDgzilbtsJsxiroqACmayynDN/9VzIbX5DOw== - dependencies: - duplexer "~0.1.1" - -string-width@^4.1.0, string-width@^4.2.0: - version "4.2.3" - resolved "https://registry.yarnpkg.com/string-width/-/string-width-4.2.3.tgz#269c7117d27b05ad2e536830a8ec895ef9c6d010" - integrity sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g== - dependencies: - emoji-regex "^8.0.0" - is-fullwidth-code-point "^3.0.0" - strip-ansi "^6.0.1" - -string.prototype.matchall@^4.0.5: - version "4.0.10" - resolved "https://registry.yarnpkg.com/string.prototype.matchall/-/string.prototype.matchall-4.0.10.tgz#a1553eb532221d4180c51581d6072cd65d1ee100" - integrity sha512-rGXbGmOEosIQi6Qva94HUjgPs9vKW+dkG7Y8Q5O2OYkWL6wFaTRZO8zM4mhP94uX55wgyrXzfS2aGtGzUL7EJQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - get-intrinsic "^1.2.1" - has-symbols "^1.0.3" - internal-slot "^1.0.5" - regexp.prototype.flags "^1.5.0" - set-function-name "^2.0.0" - side-channel "^1.0.4" - -string.prototype.trim@^1.2.8: - version "1.2.8" - resolved "https://registry.yarnpkg.com/string.prototype.trim/-/string.prototype.trim-1.2.8.tgz#f9ac6f8af4bd55ddfa8895e6aea92a96395393bd" - integrity sha512-lfjY4HcixfQXOfaqCvcBuOIapyaroTXhbkfJN3gcB1OtyupngWK4sEET9Knd0cXd28kTUqu/kHoV4HKSJdnjiQ== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimend@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimend/-/string.prototype.trimend-1.0.7.tgz#1bb3afc5008661d73e2dc015cd4853732d6c471e" - integrity sha512-Ni79DqeB72ZFq1uH/L6zJ+DKZTkOtPIHovb3YZHQViE+HDouuU4mBrLOLDn5Dde3RF8qw5qVETEjhu9locMLvA== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string.prototype.trimstart@^1.0.7: - version "1.0.7" - resolved "https://registry.yarnpkg.com/string.prototype.trimstart/-/string.prototype.trimstart-1.0.7.tgz#d4cdb44b83a4737ffbac2d406e405d43d0184298" - integrity sha512-NGhtDFu3jCEm7B4Fy0DpLewdJQOZcQ0rGbwQ/+stjnrp2i+rlKeCvos9hOIeCmqwratM47OBxY7uFZzjxHXmrg== - dependencies: - call-bind "^1.0.2" - define-properties "^1.2.0" - es-abstract "^1.22.1" - -string_decoder@^1.1.1: - version "1.3.0" - resolved "https://registry.yarnpkg.com/string_decoder/-/string_decoder-1.3.0.tgz#42f114594a46cf1a8e30b0a84f56c78c3edac21e" - integrity sha512-hkRX8U1WjJFd8LsDJ2yQ/wWWxaopEsABU1XfkM8A+j0+85JAGppt16cr1Whg6KIbb4okU6Mql6BOj+uup/wKeA== - dependencies: - safe-buffer "~5.2.0" - -stringify-object@^3.2.1: - version "3.3.0" - resolved "https://registry.yarnpkg.com/stringify-object/-/stringify-object-3.3.0.tgz#703065aefca19300d3ce88af4f5b3956d7556629" - integrity sha512-rHqiFh1elqCQ9WPLIC8I0Q/g/wj5J1eMkyoiD6eoQApWHP0FtlK7rqnhmabL5VUY9JQCcqwwvlOaSuutekgyrw== - dependencies: - get-own-enumerable-property-symbols "^3.0.0" - is-obj "^1.0.1" - is-regexp "^1.0.0" - -strip-ansi@^6.0.0, strip-ansi@^6.0.1: - version "6.0.1" - resolved "https://registry.yarnpkg.com/strip-ansi/-/strip-ansi-6.0.1.tgz#9e26c63d30f53443e9489495b2105d37b67a85d9" - integrity sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A== - dependencies: - ansi-regex "^5.0.1" - -strip-bom@^3.0.0: - version "3.0.0" - resolved "https://registry.yarnpkg.com/strip-bom/-/strip-bom-3.0.0.tgz#2334c18e9c759f7bdd56fdef7e9ae3d588e68ed3" - integrity sha512-vavAMRXOgBVNF6nyEEmL3DBK19iRpDcoIwW+swQ+CbGiu7lju6t+JklA1MHweoWtadgt4ISVUsXLyDq34ddcwA== - -strip-final-newline@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/strip-final-newline/-/strip-final-newline-2.0.0.tgz#89b852fb2fcbe936f6f4b3187afb0a12c1ab58ad" - integrity sha512-BrpvfNAE3dcvq7ll3xVumzjKjZQ5tI1sEUIKr3Uoks0XUl45St3FlatVqef9prk4jRDzhW6WZg+3bk93y6pLjA== - -stylus-lookup@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/stylus-lookup/-/stylus-lookup-5.0.1.tgz#3c4d116c3b1e8e1a8169c0d9cd20e608595560f4" - integrity sha512-tLtJEd5AGvnVy4f9UHQMw4bkJJtaAcmo54N+ovQBjDY3DuWyK9Eltxzr5+KG0q4ew6v2EHyuWWNnHeiw/Eo7rQ== - dependencies: - commander "^10.0.1" - -superstruct@^0.15.4: - version "0.15.5" - resolved "https://registry.yarnpkg.com/superstruct/-/superstruct-0.15.5.tgz#0f0a8d3ce31313f0d84c6096cd4fa1bfdedc9dab" - integrity sha512-4AOeU+P5UuE/4nOUkmcQdW5y7i9ndt1cQd/3iUe+LTz3RxESf/W/5lg4B74HbDMMv8PHnPnGCQFH45kBcrQYoQ== - -supports-color@^7.1.0: - version "7.2.0" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-7.2.0.tgz#1b7dcdcb32b8138801b3e478ba6a51caa89648da" - integrity sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw== - dependencies: - has-flag "^4.0.0" - -supports-color@^8.1.1: - version "8.1.1" - resolved "https://registry.yarnpkg.com/supports-color/-/supports-color-8.1.1.tgz#cd6fc17e28500cff56c1b86c0a7fd4a54a73005c" - integrity sha512-MpUEN2OodtUzxvKQl72cUF7RQ5EiHsGvSsVG0ia9c5RbWGL2CI4C7EpPS8UTBIplnlzZiNuV56w+FuNxy3ty2Q== - dependencies: - has-flag "^4.0.0" - -supports-preserve-symlinks-flag@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz#6eda4bd344a3c94aea376d4cc31bc77311039e09" - integrity sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w== - -tapable@^2.2.0: - version "2.2.1" - resolved "https://registry.yarnpkg.com/tapable/-/tapable-2.2.1.tgz#1967a73ef4060a82f12ab96af86d52fdb76eeca0" - integrity sha512-GNzQvQTOIP6RyTfE2Qxb8ZVlNmw0n88vp1szwWRimP02mnTsx3Wtn5qRdqY9w2XduFNUgvOwhNnQsjwCp+kqaQ== - -terminate@^2.6.1: - version "2.6.1" - resolved "https://registry.yarnpkg.com/terminate/-/terminate-2.6.1.tgz#99a4eb1647011b95f47401f6beb9f23e0362fbc0" - integrity sha512-0kdr49oam98yvjkVY+gfUaT3SMaJI6Sc+yijJjU+qhat+0NQKQn60OsIZZeKyVgTO0/33nRa3HowRbpw3A7u9A== - dependencies: - ps-tree "^1.2.0" - -text-table@^0.2.0: - version "0.2.0" - resolved "https://registry.yarnpkg.com/text-table/-/text-table-0.2.0.tgz#7f5ee823ae805207c00af2df4a84ec3fcfa570b4" - integrity sha512-N+8UisAXDGk8PFXP4HAzVR9nbfmVJ3zYLAWiTIoqC5v5isinhr+r5uaO8+7r3BMfuNIufIsA7RdpVgacC2cSpw== - -throttleit@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/throttleit/-/throttleit-1.0.0.tgz#9e785836daf46743145a5984b6268d828528ac6c" - integrity sha512-rkTVqu6IjfQ/6+uNuuc3sZek4CEYxTJom3IktzgdSxcZqdARuebbA/f4QmAxMQIxqq9ZLEUkSYqvuk1I6VKq4g== - -through2@^3.0.1: - version "3.0.2" - resolved "https://registry.yarnpkg.com/through2/-/through2-3.0.2.tgz#99f88931cfc761ec7678b41d5d7336b5b6a07bf4" - integrity sha512-enaDQ4MUyP2W6ZyT6EsMzqBPZaM/avg8iuo+l2d3QCs0J+6RaqkHV/2/lOwDTueBHeJ/2LG9lrLW3d5rWPucuQ== - dependencies: - inherits "^2.0.4" - readable-stream "2 || 3" - -through@2, through@^2.3.8, through@~2.3, through@~2.3.1: - version "2.3.8" - resolved "https://registry.yarnpkg.com/through/-/through-2.3.8.tgz#0dd4c9ffaabc357960b1b724115d7e0e86a2e1f5" - integrity sha512-w89qg7PI8wAdvX60bMDP+bFoD5Dvhm9oLheFp5O4a2QF0cSBGsBX4qZmadPMvVqlLJBBci+WqGGOAPvcDeNSVg== - -tiny-invariant@1.0.6: - version "1.0.6" - resolved "https://registry.yarnpkg.com/tiny-invariant/-/tiny-invariant-1.0.6.tgz#b3f9b38835e36a41c843a3b0907a5a7b3755de73" - integrity sha512-FOyLWWVjG+aC0UqG76V53yAWdXfH8bO6FNmyZOuUrzDzK8DI3/JRY25UD7+g49JWM1LXwymsKERB+DzI0dTEQA== - -tiny-lru@^8.0.2: - version "8.0.2" - resolved "https://registry.yarnpkg.com/tiny-lru/-/tiny-lru-8.0.2.tgz#812fccbe6e622ded552e3ff8a4c3b5ff34a85e4c" - integrity sha512-ApGvZ6vVvTNdsmt676grvCkUCGwzG9IqXma5Z07xJgiC5L7akUMof5U8G2JTI9Rz/ovtVhJBlY6mNhEvtjzOIg== - -tiny-warning@^1.0.3: - version "1.0.3" - resolved "https://registry.yarnpkg.com/tiny-warning/-/tiny-warning-1.0.3.tgz#94a30db453df4c643d0fd566060d60a875d84754" - integrity sha512-lBN9zLN/oAf68o3zNXYrdCt1kP8WsiGW8Oo2ka41b2IM5JL/S1CTyX1rW0mb/zSuJun0ZUrDxx4sqvYS2FWzPA== - -tmp@~0.2.1: - version "0.2.1" - resolved "https://registry.yarnpkg.com/tmp/-/tmp-0.2.1.tgz#8457fc3037dcf4719c251367a1af6500ee1ccf14" - integrity sha512-76SUhtfqR2Ijn+xllcI5P1oyannHNHByD80W1q447gU3mp9G9PSpGdWmjUOHRDPiHYacIk66W7ubDTuPF3BEtQ== - dependencies: - rimraf "^3.0.0" - -to-regex-range@^5.0.1: - version "5.0.1" - resolved "https://registry.yarnpkg.com/to-regex-range/-/to-regex-range-5.0.1.tgz#1648c44aae7c8d988a326018ed72f5b4dd0392e4" - integrity sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ== - dependencies: - is-number "^7.0.0" - -tough-cookie@~2.5.0: - version "2.5.0" - resolved "https://registry.yarnpkg.com/tough-cookie/-/tough-cookie-2.5.0.tgz#cd9fb2a0aa1d5a12b473bd9fb96fa3dcff65ade2" - integrity sha512-nlLsUzgm1kfLXSXfRZMc1KLAugd4hqJHDTvc2hDIwS3mZAfMEuMbc03SujMF+GEcpaX/qboeycw6iO8JwVv2+g== - dependencies: - psl "^1.1.28" - punycode "^2.1.1" - -tr46@~0.0.3: - version "0.0.3" - resolved "https://registry.yarnpkg.com/tr46/-/tr46-0.0.3.tgz#8184fd347dac9cdc185992f3a6622e14b9d9ab6a" - integrity sha512-N3WMsuqV66lT30CrXNbEjx4GEwlow3v6rr4mCcv6prnfwhS01rkgyFdjPNBYd9br7LpXV1+Emh01fHnq2Gdgrw== - -ts-node@^10.9.1: - version "10.9.2" - resolved "https://registry.yarnpkg.com/ts-node/-/ts-node-10.9.2.tgz#70f021c9e185bccdca820e26dc413805c101c71f" - integrity sha512-f0FFpIdcHgn8zcPSbf1dRevwt047YMnaiJM3u2w2RewrB+fob/zePZcrOyQoLMMO7aBIddLcQIEK5dYjkLnGrQ== - dependencies: - "@cspotcode/source-map-support" "^0.8.0" - "@tsconfig/node10" "^1.0.7" - "@tsconfig/node12" "^1.0.7" - "@tsconfig/node14" "^1.0.0" - "@tsconfig/node16" "^1.0.2" - acorn "^8.4.1" - acorn-walk "^8.1.1" - arg "^4.1.0" - create-require "^1.1.0" - diff "^4.0.1" - make-error "^1.1.1" - v8-compile-cache-lib "^3.0.1" - yn "3.1.1" - -tsconfig-paths@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/tsconfig-paths/-/tsconfig-paths-4.2.0.tgz#ef78e19039133446d244beac0fd6a1632e2d107c" - integrity sha512-NoZ4roiN7LnbKn9QqE1amc9DJfzvZXxF4xDavcOWt1BPkdx+m+0gJuPM+S0vCe7zTJMYUP0R8pO2XMr+Y8oLIg== - dependencies: - json5 "^2.2.2" - minimist "^1.2.6" - strip-bom "^3.0.0" - -tslib@^1.8.1: - version "1.14.1" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-1.14.1.tgz#cf2d38bdc34a134bcaf1091c41f6619e2f672d00" - integrity sha512-Xni35NKzjgMrwevysHTCArtLDpPvye8zV/0E4EyYn43P7/7qvQwPh9BGkHewbMulVntbigmcT7rdX3BNo9wRJg== - -tslib@^2.1.0: - version "2.5.2" - resolved "https://registry.yarnpkg.com/tslib/-/tslib-2.5.2.tgz#1b6f07185c881557b0ffa84b111a0106989e8338" - integrity sha512-5svOrSA2w3iGFDs1HibEVBGbDrAY82bFQ3HZ3ixB+88nsbsWQoKqDRb5UBYAUPEzbBn6dAp5gRNXglySbx1MlA== - -tsutils@^3.21.0: - version "3.21.0" - resolved "https://registry.yarnpkg.com/tsutils/-/tsutils-3.21.0.tgz#b48717d394cea6c1e096983eed58e9d61715b623" - integrity sha512-mHKK3iUXL+3UF6xL5k0PEhKRUBKPBCv/+RkEOpjRWxxx27KKRBmmA60A9pgOUvMi8GKhRMPEmjBRPzs2W7O1OA== - dependencies: - tslib "^1.8.1" - -tunnel-agent@^0.6.0: - version "0.6.0" - resolved "https://registry.yarnpkg.com/tunnel-agent/-/tunnel-agent-0.6.0.tgz#27a5dea06b36b04a0a9966774b290868f0fc40fd" - integrity sha512-McnNiV1l8RYeY8tBgEpuodCC1mLUdbSN+CYBL7kJsJNInOP8UjDDEwdk6Mw60vdLLrr5NHKZhMAOSrR2NZuQ+w== - dependencies: - safe-buffer "^5.0.1" - -tunnel@^0.0.6: - version "0.0.6" - resolved "https://registry.yarnpkg.com/tunnel/-/tunnel-0.0.6.tgz#72f1314b34a5b192db012324df2cc587ca47f92c" - integrity sha512-1h/Lnq9yajKY2PEbBadPXj3VxsDDu844OnaAo52UVmIzIvwwtBPIuNvkjuzBlTWpfJyUbG3ez0KSBibQkj4ojg== - -tweetnacl@^0.14.3, tweetnacl@~0.14.0: - version "0.14.5" - resolved "https://registry.yarnpkg.com/tweetnacl/-/tweetnacl-0.14.5.tgz#5ae68177f192d4456269d108afa93ff8743f4f64" - integrity sha512-KXXFFdAbFXY4geFIwoyNK+f5Z1b7swfXABfL7HXCmoIWMKU3dmS26672A4EeQtDzLKy7SXmfBu51JolvEKwtGA== - -txml@^3.2.5: - version "3.2.5" - resolved "https://registry.yarnpkg.com/txml/-/txml-3.2.5.tgz#607eeef7e021dba8c6dd173b3971b12443deb9ec" - integrity sha512-AtN8AgJLiDanttIXJaQlxH8/R0NOCNwto8kcO7BaxdLgsN9b7itM9lnTD7c2O3TadP+hHB9j7ra5XGFRPNnk/g== - dependencies: - through2 "^3.0.1" - -type-fest@^0.21.3: - version "0.21.3" - resolved "https://registry.yarnpkg.com/type-fest/-/type-fest-0.21.3.tgz#d260a24b0198436e133fa26a524a6d65fa3b2e37" - integrity sha512-t0rzBq87m3fVcduHDUFhKmyyX+9eo6WQjZvf51Ea/M0Q7+T374Jp1aUiyUl0GKxp8M/OETVHSDvmkyPgvX+X2w== - -typed-array-buffer@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-buffer/-/typed-array-buffer-1.0.0.tgz#18de3e7ed7974b0a729d3feecb94338d1472cd60" - integrity sha512-Y8KTSIglk9OZEr8zywiIHG/kmQ7KWyjseXs1CbSo8vC42w7hg2HgYTxSWwP0+is7bWDc1H+Fo026CpHFwm8tkw== - dependencies: - call-bind "^1.0.2" - get-intrinsic "^1.2.1" - is-typed-array "^1.1.10" - -typed-array-byte-length@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-length/-/typed-array-byte-length-1.0.0.tgz#d787a24a995711611fb2b87a4052799517b230d0" - integrity sha512-Or/+kvLxNpeQ9DtSydonMxCx+9ZXOswtwJn17SNLvhptaXYDJvkFFP5zbfU/uLmvnBJlI4yrnXRxpdWH/M5tNA== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-byte-offset@^1.0.0: - version "1.0.0" - resolved "https://registry.yarnpkg.com/typed-array-byte-offset/-/typed-array-byte-offset-1.0.0.tgz#cbbe89b51fdef9cd6aaf07ad4707340abbc4ea0b" - integrity sha512-RD97prjEt9EL8YgAgpOkf3O4IF9lhJFr9g0htQkm0rchFp/Vx7LW5Q8fSXXub7BXAODyUQohRMyOc3faCPd0hg== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.2" - for-each "^0.3.3" - has-proto "^1.0.1" - is-typed-array "^1.1.10" - -typed-array-length@^1.0.4: - version "1.0.4" - resolved "https://registry.yarnpkg.com/typed-array-length/-/typed-array-length-1.0.4.tgz#89d83785e5c4098bec72e08b319651f0eac9c1bb" - integrity sha512-KjZypGq+I/H7HI5HlOoGHkWUUGq+Q0TPhQurLbyrVrvnKTBgzLhIJ7j6J/XTQOi0d1RjyZ0wdas8bKs2p0x3Ng== - dependencies: - call-bind "^1.0.2" - for-each "^0.3.3" - is-typed-array "^1.1.9" - -typescript@^4.8.4: - version "4.9.5" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-4.9.5.tgz#095979f9bcc0d09da324d58d03ce8f8374cbe65a" - integrity sha512-1FXk9E2Hm+QzZQ7z+McJiHL4NW1F2EzMu9Nq9i3zAaGqibafqYwCVU6WyWAuyQRRzOlxou8xZSyXLEN8oKj24g== - -typescript@^5.0.4: - version "5.3.3" - resolved "https://registry.yarnpkg.com/typescript/-/typescript-5.3.3.tgz#b3ce6ba258e72e6305ba66f5c9b452aaee3ffe37" - integrity sha512-pXWcraxM0uxAS+tN0AG/BF2TyqmHO014Z070UsJ+pFvYuRSq8KH8DmWpnbXe0pEPDHXZV3FcAbJkijJ5oNEnWw== - -unbox-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/unbox-primitive/-/unbox-primitive-1.0.2.tgz#29032021057d5e6cdbd08c5129c226dff8ed6f9e" - integrity sha512-61pPlCD9h51VoreyJ0BReideM3MDKMKnh6+V9L08331ipq6Q8OFXZYiqP6n/tbHx4s5I9uRhcye6BrbkizkBDw== - dependencies: - call-bind "^1.0.2" - has-bigints "^1.0.2" - has-symbols "^1.0.3" - which-boxed-primitive "^1.0.2" - -undici@^5.25.4: - version "5.28.2" - resolved "https://registry.yarnpkg.com/undici/-/undici-5.28.2.tgz#fea200eac65fc7ecaff80a023d1a0543423b4c91" - integrity sha512-wh1pHJHnUeQV5Xa8/kyQhO7WFa8M34l026L5P/+2TYiakvGy5Rdc8jWZVyG7ieht/0WgJLEd3kcU5gKx+6GC8w== - dependencies: - "@fastify/busboy" "^2.0.0" - -unfetch@^4.2.0: - version "4.2.0" - resolved "https://registry.yarnpkg.com/unfetch/-/unfetch-4.2.0.tgz#7e21b0ef7d363d8d9af0fb929a5555f6ef97a3be" - integrity sha512-F9p7yYCn6cIW9El1zi0HI6vqpeIvBsr3dSuRO6Xuppb1u5rXpCPmMvLSyECLhybr9isec8Ohl0hPekMVrEinDA== - -universalify@^2.0.0: - version "2.0.0" - resolved "https://registry.yarnpkg.com/universalify/-/universalify-2.0.0.tgz#75a4984efedc4b08975c5aeb73f530d02df25717" - integrity sha512-hAZsKq7Yy11Zu1DE0OzWjw7nnLZmJZYTDZZyEFHZdUhV8FkH5MCfoU1XMaxXovpyW5nq5scPqq0ZDP9Zyl04oQ== - -untildify@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/untildify/-/untildify-4.0.0.tgz#2bc947b953652487e4600949fb091e3ae8cd919b" - integrity sha512-KK8xQ1mkzZeg9inewmFVDNkg3l5LUhoq9kN6iWYB/CC9YMG8HA+c1Q8HwDe6dEX7kErrEVNVBO3fWsVq5iDgtw== - -url-join@4.0.1: - version "4.0.1" - resolved "https://registry.yarnpkg.com/url-join/-/url-join-4.0.1.tgz#b642e21a2646808ffa178c4c5fda39844e12cde7" - integrity sha512-jk1+QP6ZJqyOiuEI9AEWQfju/nB2Pw466kbA0LEZljHwKeMgd9WrAEgEGxjPDD2+TNbbb37rTyhEfrCXfuKXnA== - -util-deprecate@^1.0.1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/util-deprecate/-/util-deprecate-1.0.2.tgz#450d4dc9fa70de732762fbd2d4a28981419a0ccf" - integrity sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw== - -uuid@^8.3.2: - version "8.3.2" - resolved "https://registry.yarnpkg.com/uuid/-/uuid-8.3.2.tgz#80d5b5ced271bb9af6c445f21a1a04c606cefbe2" - integrity sha512-+NYs2QeMWy+GWFOEm9xnn6HCDp0l7QBD7ml8zLUmJ+93Q5NF0NocErnwkTkXVFNiX3/fpC6afS8Dhb/gz7R7eg== - -v8-compile-cache-lib@^3.0.1: - version "3.0.1" - resolved "https://registry.yarnpkg.com/v8-compile-cache-lib/-/v8-compile-cache-lib-3.0.1.tgz#6336e8d71965cb3d35a1bbb7868445a7c05264bf" - integrity sha512-wa7YjyUGfNZngI/vtK0UHAN+lgDCxBPCylVXGp0zu59Fz5aiGtNXaq3DhIov063MorB+VfufLh3JlF2KdTK3xg== - -validate-npm-package-name@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/validate-npm-package-name/-/validate-npm-package-name-4.0.0.tgz#fe8f1c50ac20afdb86f177da85b3600f0ac0d747" - integrity sha512-mzR0L8ZDktZjpX4OB46KT+56MAhl4EIazWP/+G/HPGuvfdaqg4YsCdtOm6U9+LOFyYDoh4dpnpxZRB9MQQns5Q== - dependencies: - builtins "^5.0.0" - -verror@1.10.0: - version "1.10.0" - resolved "https://registry.yarnpkg.com/verror/-/verror-1.10.0.tgz#3a105ca17053af55d6e270c1f8288682e18da400" - integrity sha512-ZZKSmDAEFOijERBLkmYfJ+vmk3w+7hOLYDNkRCuRuMJGEmqYNCNLyBBFwWKVMhfwaEF3WOd0Zlw86U/WC/+nYw== - dependencies: - assert-plus "^1.0.0" - core-util-is "1.0.2" - extsprintf "^1.2.0" - -wcwidth@>=1.0.1: - version "1.0.1" - resolved "https://registry.yarnpkg.com/wcwidth/-/wcwidth-1.0.1.tgz#f0b0dcf915bc5ff1528afadb2c0e17b532da2fe8" - integrity sha512-XHPEwS0q6TaxcvG85+8EYkbiCux2XtWG2mkc47Ng2A77BQu9+DqIOJldST4HgPkuea7dvKSj5VgX3P1d4rW8Tg== - dependencies: - defaults "^1.0.3" - -webidl-conversions@^3.0.0: - version "3.0.1" - resolved "https://registry.yarnpkg.com/webidl-conversions/-/webidl-conversions-3.0.1.tgz#24534275e2a7bc6be7bc86611cc16ae0a5654871" - integrity sha512-2JAn3z8AR6rjK8Sm8orRC0h/bcl/DqL7tRPdGZ4I1CjdF+EaMLmYxBHyXuKL849eucPFhvBoxMsflfOb8kxaeQ== - -whatwg-url@^5.0.0: - version "5.0.0" - resolved "https://registry.yarnpkg.com/whatwg-url/-/whatwg-url-5.0.0.tgz#966454e8765462e37644d3626f6742ce8b70965d" - integrity sha512-saE57nupxk6v3HY35+jzBwYa0rKSy0XR8JSxZPwgLr7ys0IBzhGviA1/TUGJLmSVqs8pb9AnvICXEuOHLprYTw== - dependencies: - tr46 "~0.0.3" - webidl-conversions "^3.0.0" - -which-boxed-primitive@^1.0.2: - version "1.0.2" - resolved "https://registry.yarnpkg.com/which-boxed-primitive/-/which-boxed-primitive-1.0.2.tgz#13757bc89b209b049fe5d86430e21cf40a89a8e6" - integrity sha512-bwZdv0AKLpplFY2KZRX6TvyuN7ojjr7lwkg6ml0roIy9YeuSr7JS372qlNW18UQYzgYK9ziGcerWqZOmEn9VNg== - dependencies: - is-bigint "^1.0.1" - is-boolean-object "^1.1.0" - is-number-object "^1.0.4" - is-string "^1.0.5" - is-symbol "^1.0.3" - -which-typed-array@^1.1.11, which-typed-array@^1.1.13: - version "1.1.13" - resolved "https://registry.yarnpkg.com/which-typed-array/-/which-typed-array-1.1.13.tgz#870cd5be06ddb616f504e7b039c4c24898184d36" - integrity sha512-P5Nra0qjSncduVPEAr7xhoF5guty49ArDTwzJ/yNuPIbZppyRxFQsRCWrocxIY+CnMVG+qfbU2FmDKyvSGClow== - dependencies: - available-typed-arrays "^1.0.5" - call-bind "^1.0.4" - for-each "^0.3.3" - gopd "^1.0.1" - has-tostringtag "^1.0.0" - -which@^2.0.1: - version "2.0.2" - resolved "https://registry.yarnpkg.com/which/-/which-2.0.2.tgz#7c6a8dd0a636a0327e10b59c9286eee93f3f51b1" - integrity sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA== - dependencies: - isexe "^2.0.0" - -wrap-ansi@^6.2.0: - version "6.2.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-6.2.0.tgz#e9393ba07102e6c91a3b221478f0257cd2856e53" - integrity sha512-r6lPcBGxZXlIcymEu7InxDMhdW0KDxpLgoFLcguasxCaJ/SOIZwINatK9KY/tf+ZrlywOKU0UDj3ATXUBfxJXA== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrap-ansi@^7.0.0: - version "7.0.0" - resolved "https://registry.yarnpkg.com/wrap-ansi/-/wrap-ansi-7.0.0.tgz#67e145cff510a6a6984bdf1152911d69d2eb9e43" - integrity sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q== - dependencies: - ansi-styles "^4.0.0" - string-width "^4.1.0" - strip-ansi "^6.0.0" - -wrappy@1: - version "1.0.2" - resolved "https://registry.yarnpkg.com/wrappy/-/wrappy-1.0.2.tgz#b5243d8f3ec1aa35f1364605bc0d1036e30ab69f" - integrity sha512-l4Sp/DRseor9wL6EvV2+TuQn63dMkPjZ/sp9XkghTEbV9KlPS1xUsZ3u7/IQO4wxtcFB4bgpQPRcR3QCvezPcQ== - -ws@^7.5.0: - version "7.5.9" - resolved "https://registry.yarnpkg.com/ws/-/ws-7.5.9.tgz#54fa7db29f4c7cec68b1ddd3a89de099942bb591" - integrity sha512-F+P9Jil7UiSKSkppIiD94dN07AwvFixvLIj1Og1Rl9GGMuNipJnV9JzjD6XuqmAeiswGvUmNLjr5cFuXwNS77Q== - -ws@^8.14.2: - version "8.15.1" - resolved "https://registry.yarnpkg.com/ws/-/ws-8.15.1.tgz#271ba33a45ca0cc477940f7f200cd7fba7ee1997" - integrity sha512-W5OZiCjXEmk0yZ66ZN82beM5Sz7l7coYxpRkzS+p9PP+ToQry8szKh+61eNktr7EA9DOwvFGhfC605jDHbP6QQ== - -yallist@^4.0.0: - version "4.0.0" - resolved "https://registry.yarnpkg.com/yallist/-/yallist-4.0.0.tgz#9bb92790d9c0effec63be73519e11a35019a3a72" - integrity sha512-3wdGidZyq5PB084XLES5TpOSRA3wjXAlIWMhum2kRcv/41Sn2emQ0dycQW4uZXLejwKvg6EsvbdlVL+FYEct7A== - -yauzl@^2.10.0: - version "2.10.0" - resolved "https://registry.yarnpkg.com/yauzl/-/yauzl-2.10.0.tgz#c7eb17c93e112cb1086fa6d8e51fb0667b79a5f9" - integrity sha512-p4a9I6X6nu6IhoGmBqAcbJy1mlC4j27vEPZX9F4L4/vZT3Lyq1VkFHw/V/PUcB9Buo+DG3iHkT0x3Qya58zc3g== - dependencies: - buffer-crc32 "~0.2.3" - fd-slicer "~1.1.0" - -yn@3.1.1: - version "3.1.1" - resolved "https://registry.yarnpkg.com/yn/-/yn-3.1.1.tgz#1e87401a09d767c1d5eab26a6e4c185182d2eb50" - integrity sha512-Ux4ygGWsu2c7isFWe8Yu1YluJmqVhxqK2cLXNQA5AcC3QfbGNpM7fu0Y8b/z16pXLnFxZYvWhd3fhBY9DLmC6Q== diff --git a/mypy_weave_plugin.py b/mypy_weave_plugin.py deleted file mode 100644 index f2a8b3700d8..00000000000 --- a/mypy_weave_plugin.py +++ /dev/null @@ -1,34 +0,0 @@ -"""Weave plugin for mypy. - -@weave.type() is a decorator that behaves like Python's @dataclasess.dataclass(). -This tells mypy to treat it as such. -""" - -from typing import Callable, Optional - -from mypy.plugin import ClassDefContext, Plugin - - -class WeavePlugin(Plugin): - def get_class_decorator_hook( - self, fullname: str - ) -> Optional[Callable[[ClassDefContext], None]]: - from mypy.plugins import dataclasses - - if fullname in ["weave.decorator_type.type"]: - return dataclasses.dataclass_tag_callback - return None - - def get_class_decorator_hook_2( - self, fullname: str - ) -> Optional[Callable[[ClassDefContext], bool]]: - from mypy.plugins import dataclasses - - if fullname in ["weave.decorator_type.type"]: - return dataclasses.dataclass_class_maker_callback - return None - - -def plugin(version: str): - # ignore version argument if the plugin works with all mypy versions. - return WeavePlugin diff --git a/pyproject.toml b/pyproject.toml index 108cf7835bd..e97bb8ba1ba 100644 --- a/pyproject.toml +++ b/pyproject.toml @@ -94,6 +94,7 @@ exclude = [ "weave/__init__.py", "weave/legacy/**/*.py", "examples", + "weave_query", ] [tool.ruff.lint.isort] @@ -112,8 +113,34 @@ exclude = [ "weave/__init__.py", "weave/legacy/**/*.py", "examples", + "weave_query", ] +[tool.mypy] +warn_unused_configs = true +exclude = [ + ".*pyi$", + "weave_query", + "weave/tests", + "weave/trace_server/tests", + "weave/conftest.py", + "weave/trace/tests", + "integration_test", + "weave/trace_server/tests", + "examples", + "weave/docker", +] +ignore_missing_imports = true + +[[tool.mypy.overrides]] +module = "weave.*" +disallow_untyped_defs = true +disallow_untyped_calls = true + +[[tool.mypy.overrides]] +module = "weave_query.*" +ignore_errors = true + [tool.bumpversion] current_version = "0.51.11-dev0" parse = """(?x) diff --git a/setup.py b/setup.py index be4f4f733c5..2948f4082a1 100644 --- a/setup.py +++ b/setup.py @@ -14,7 +14,9 @@ ROOT = Path(__file__).resolve().parent SKIP_BUILD = os.environ.get("WEAVE_SKIP_BUILD", False) -IS_BUILT = (ROOT / "weave" / "frontend" / "assets").is_dir() or SKIP_BUILD +IS_BUILT = ( + ROOT / "weave_query" / "weave_query" / "frontend" / "assets" +).is_dir() or SKIP_BUILD FORCE_BUILD = os.environ.get("WEAVE_FORCE_BUILD", False) @@ -40,7 +42,7 @@ def check_build_deps() -> bool: def build_frontend() -> None: check_build_deps() try: - build_script = str(Path("weave", "frontend", "build.sh")) + build_script = str(Path("weave_query", "weave_query", "frontend", "build.sh")) subprocess.run(["bash", build_script], cwd=ROOT) except OSError: raise RuntimeError("Failed to build frontend.") @@ -71,10 +73,16 @@ def download_and_extract_tarball( def download_frontend() -> None: - sha = open(ROOT / "weave" / "frontend" / "sha1.txt").read().strip() + sha = ( + open(ROOT / "weave_query" / "weave_query" / "frontend" / "sha1.txt") + .read() + .strip() + ) url = f"https://storage.googleapis.com/wandb-cdn-prod/weave/{sha}.tar.gz" try: - download_and_extract_tarball(url, extract_path=ROOT / "weave") + download_and_extract_tarball( + url, extract_path=ROOT / "weave_query" / "weave_query" + ) except HTTPError: print(f"Warning: Failed to download frontend for sha {sha}") diff --git a/weave/__init__.py b/weave/__init__.py index 26cef40707d..1cd10716131 100644 --- a/weave/__init__.py +++ b/weave/__init__.py @@ -1,34 +1,8 @@ """The top-level functions and classes for working with Weave.""" -import sys - -# We track what modules were loaded before importing weave, so we can ensure -# that someone doesn't introduce auto-importing loading weave.legacy.weave.ops or weave.legacy.weave.panels -# (because they are slow to import and have more dependencies, and they are part of -# the engine and UI layers which should be kept separate from the core layer). -pre_init_modules = set(sys.modules.keys()) - -from weave.legacy.weave import context_state as _context_state - -_loading_builtins_token = _context_state.set_loading_built_ins() - -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import storage -from weave.legacy.weave.api import * -from weave.legacy.weave.errors import * -from weave.legacy.weave import mappers_python_def -from weave.legacy.weave import wandb_api as _wandb_api -from weave.legacy.weave import context as _context - from weave import version -_wandb_api.init() - -# Ensure there is a client available for eager mode - - from weave.trace.api import * -_context_state.clear_loading_built_ins(_loading_builtins_token) __version__ = version.VERSION @@ -39,24 +13,6 @@ from weave.flow.agent import Agent, AgentState from weave.trace.util import ThreadPoolExecutor, Thread -# See the comment above pre_init_modules above. This is check to ensure we don't accidentally -# introduce loading weave.legacy.weave.ops or weave.legacy.weave.panels when importing weave. -newly_added_modules = set(sys.modules.keys()) - pre_init_modules -ops_modules = [] -panels_modules = [] -for module_name in newly_added_modules: - if module_name.startswith("weave.legacy.weave.ops"): - ops_modules.append(module_name) - if module_name.startswith("weave.legacy.weave.panels"): - panels_modules.append(module_name) -if ops_modules or panels_modules: - all_invalid_modules = ops_modules + panels_modules - invalid_submodules = set([".".join(m.split(".")[:2]) for m in all_invalid_modules]) - raise errors.WeaveInternalError( - "importing weave should not import weave.legacy.weave.ops or weave.legacy.weave.panels, but the following modules were imported: " - + ", ".join(invalid_submodules) - ) - # Special object informing doc generation tooling which symbols # to document & to associate with this module. __docspec__ = [ diff --git a/weave/clear_cache.py b/weave/clear_cache.py index b5a43e32a9e..10d12148acc 100644 --- a/weave/clear_cache.py +++ b/weave/clear_cache.py @@ -6,7 +6,7 @@ import os import time -from weave.legacy.weave import cache +from weave_query import cache # type: ignore # Script to run to delete expired caches if __name__ == "__main__": diff --git a/weave/conftest.py b/weave/conftest.py index 3ba07d3c809..3523e076c03 100644 --- a/weave/conftest.py +++ b/weave/conftest.py @@ -1,10 +1,6 @@ import logging import os -import random -import shutil -import tempfile -import numpy as np import pytest from fastapi import FastAPI from fastapi.testclient import TestClient @@ -19,7 +15,6 @@ from weave.trace_server import trace_server_interface as tsi from weave.trace_server_bindings import remote_http_trace_server -from .tests import fixture_fakewandb from .tests.trace.trace_server_clickhouse_conftest import * from .tests.wandb_system_tests_conftest import * from .trace import autopatch @@ -28,35 +23,6 @@ os.environ["WANDB_ERROR_REPORTING"] = "false" -class FakeTracer: - def trace(*args, **kwargs): - pass - - -def make_fake_tracer(): - return FakeTracer() - - -### End disable datadog engine tracing -### disable internet access - - -def guard(*args, **kwargs): - raise Exception("I told you not to use the Internet!") - - -### End disable internet access - -# Uncomment these two lines to disable internet access entirely. -# engine_trace.tracer = make_fake_tracer -# socket.socket = guard - - -@pytest.fixture() -def test_artifact_dir(): - return "/tmp/weave/pytest/%s" % os.environ.get("PYTEST_CURRENT_TEST") - - def pytest_sessionfinish(session, exitstatus): if exitstatus == pytest.ExitCode.NO_TESTS_COLLECTED: print("No tests were selected. Exiting gracefully.") @@ -69,20 +35,6 @@ def pytest_collection_modifyitems(config, items): if "client" in item.fixturenames: item.add_marker(pytest.mark.weave_client) - # Get the job number from environment variable (0 for even tests, 1 for odd tests) - job_num = config.getoption("--job-num", default=None) - if job_num is None: - return - - job_num = int(job_num) - - selected_items = [] - for index, item in enumerate(items): - if index % 2 == job_num: - selected_items.append(item) - - items[:] = selected_items - PYTEST_CURRENT_TEST_ENV_VAR = "PYTEST_CURRENT_TEST" @@ -149,73 +101,6 @@ def logging_error_check(request, log_collector): ) -@pytest.fixture(autouse=True) -def throw_on_error(): - os.environ["WEAVE_VALUE_OR_ERROR_DEBUG"] = "true" - yield - del os.environ["WEAVE_VALUE_OR_ERROR_DEBUG"] - - -@pytest.fixture() -def cache_mode_minimal(): - os.environ["WEAVE_NO_CACHE"] = "true" - yield - del os.environ["WEAVE_NO_CACHE"] - - -@pytest.fixture() -def cereal_csv(): - with tempfile.TemporaryDirectory() as d: - cereal_path = os.path.join(d, "cereal.csv") - shutil.copy("testdata/cereal.csv", cereal_path) - yield cereal_path - - -@pytest.fixture() -def fake_wandb(): - setup_response = fixture_fakewandb.setup() - yield setup_response - fixture_fakewandb.teardown(setup_response) - - -@pytest.fixture() -def fixed_random_seed(): - random.seed(8675309) - np.random.seed(8675309) - yield - random.seed(None) - np.random.seed(None) - - -@pytest.fixture() -def app(): - from . import weave_server - - app = weave_server.make_app() - app.config.update( - { - "TESTING": True, - } - ) - - yield app - - -@pytest.fixture() -def enable_touch_on_read(): - os.environ["WEAVE_ENABLE_TOUCH_ON_READ"] = "1" - yield - del os.environ["WEAVE_ENABLE_TOUCH_ON_READ"] - - -@pytest.fixture() -def consistent_table_col_ids(): - from weave.legacy.weave.panels import table_state - - with table_state.use_consistent_col_ids(): - yield - - @pytest.fixture() def strict_op_saving(): with context_state.strict_op_saving(True): diff --git a/weave/deploy/modal/__init__.py b/weave/deploy/modal/__init__.py index 6972f32ce7f..eb41bc95b1b 100644 --- a/weave/deploy/modal/__init__.py +++ b/weave/deploy/modal/__init__.py @@ -5,9 +5,9 @@ import typing from pathlib import Path -from weave.legacy.weave import artifact_wandb as artifact_wandb -from weave.legacy.weave import environment from weave.trace.refs import ObjectRef, parse_uri +from weave_query import artifact_wandb as artifact_wandb # type: ignore +from weave_query import environment # type: ignore try: from modal.cli.import_refs import import_stub diff --git a/weave/deploy/modal/stub.py b/weave/deploy/modal/stub.py index 29242192fde..efed9768115 100644 --- a/weave/deploy/modal/stub.py +++ b/weave/deploy/modal/stub.py @@ -4,8 +4,8 @@ from modal import Image, Secret, Stub, asgi_app from weave.deploy.util import safe_name -from weave.legacy.weave.uris import WeaveURI from weave.trace.refs import ObjectRef, parse_uri +from weave_query.uris import WeaveURI image = ( Image.debian_slim() diff --git a/weave/legacy/notebooks/Eval Board.ipynb b/weave/legacy/notebooks/Eval Board.ipynb deleted file mode 100644 index 1cf4b810b8a..00000000000 --- a/weave/legacy/notebooks/Eval Board.ipynb +++ /dev/null @@ -1,163 +0,0 @@ -{ - "cells": [ - { - "cell_type": "code", - "execution_count": 61, - "id": "314bb6b4", - "metadata": {}, - "outputs": [], - "source": [ - "import typing\n", - "\n", - "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "\n", - "weave.use_frontend_devmode()\n", - "from weave.legacy.weave import ops_domain\n", - "from weave.legacy.weave.panels import panel_board" - ] - }, - { - "cell_type": "code", - "execution_count": 62, - "id": "550daef6", - "metadata": {}, - "outputs": [], - "source": [ - "@weave.type()\n", - "class Dataset:\n", - " rows: list[typing.Any]" - ] - }, - { - "cell_type": "code", - "execution_count": 64, - "id": "e8065ad6", - "metadata": {}, - "outputs": [ - { - "data": { - "text/html": [ - "\n", - " \n", - " " - ], - "text/plain": [ - "" - ] - }, - "metadata": {}, - "output_type": "display_data" - } - ], - "source": [ - "varbar = panel_board.varbar()\n", - "\n", - "entity_name_val = varbar.add(\"entity_name_val\", \"shawn\", hidden=True)\n", - "entity = ops_domain.entity(entity_name_val)\n", - "entity_name = varbar.add(\n", - " \"entity_name\",\n", - " weave.legacy.weave.panels.Dropdown(\n", - " entity_name_val, choices=ops_domain.viewer().entities().name()\n", - " ),\n", - ")\n", - "\n", - "project_name_val = varbar.add(\"project_name_val\", \"weave-flow1\", hidden=True)\n", - "project = ops_domain.project(entity_name_val, project_name_val)\n", - "project_name = varbar.add(\n", - " \"project_name\",\n", - " weave.legacy.weave.panels.Dropdown(\n", - " project_name_val, choices=entity.projects().name()\n", - " ),\n", - ")\n", - "\n", - "dataset_name_val = varbar.add(\"dataset_name_val\", \"my_dataset1\", hidden=True)\n", - "dataset = varbar.add(\n", - " \"dataset\",\n", - " weave.legacy.weave.ops.get(\n", - " weave_internal.const(\"wandb-artifact:///\")\n", - " + entity_name_val\n", - " + \"/\"\n", - " + project_name_val\n", - " + \"/\"\n", - " + dataset_name_val\n", - " + \":latest/obj\"\n", - " ),\n", - " hidden=True,\n", - ")\n", - "dataset_ref = varbar.add(\n", - " \"dataset_ref\",\n", - " weave.legacy.weave.ops.ref(\n", - " weave_internal.const(\"wandb-artifact:///\")\n", - " + entity_name_val\n", - " + \"/\"\n", - " + project_name_val\n", - " + \"/\"\n", - " + dataset_name_val\n", - " + \":latest/obj\"\n", - " ),\n", - ")\n", - "dataset_name = varbar.add(\n", - " \"dataset_name\",\n", - " weave.legacy.weave.panels.Dropdown(\n", - " dataset_name_val, choices=project.artifactType(\"Dataset\").artifacts().name()\n", - " ),\n", - ")\n", - "\n", - "# Now here I want to pick model A and model B\n", - "# I need to a way to get to artifact from an object, like get_ref.artifact ?\n", - "# like dataset_ref.artifact().usedBy().filter(lambda row: row.jobName() == 'eval')\n", - "# then from there find consuming runs of a given job_type (\"eval\")\n", - "# let the user pick two of those\n", - "\n", - "# want a really nice data grid of the table metric comparsion per row\n", - "\n", - "main = weave.legacy.weave.panels.Group(\n", - " layoutMode=\"grid\",\n", - " showExpressions=True,\n", - " enableAddPanel=True,\n", - ")\n", - "\n", - "main.add(\"ename\", entity_name_val)\n", - "main.add(\"pname\", project_name_val)\n", - "main.add(\"dsrows\", weave.legacy.weave.ops.obj_getattr(dataset, \"rows\"))\n", - "# main.add(\"artifact\", dataset_ref.artifact())\n", - "\n", - "# I Need a programmable Table. One that's columns are defined by Nodes\n", - "# Same for panels, I want to be able to generate a bunch of panels\n", - "# Can I do this with Weaveify?\n", - "# Like I can pass a function in in the Board that returns the panel I want maybe?\n", - "\n", - "weave.legacy.weave.panels.Board(vars=varbar, panels=main)" - ] - } - ], - "metadata": { - "kernelspec": { - "display_name": "Python 3 (ipykernel)", - "language": "python", - "name": "python3" - }, - "language_info": { - "codemirror_mode": { - "name": "ipython", - "version": 3 - }, - "file_extension": ".py", - "mimetype": "text/x-python", - "name": "python", - "nbconvert_exporter": "python", - "pygments_lexer": "ipython3", - "version": "3.9.7" - } - }, - "nbformat": 4, - "nbformat_minor": 5 -} diff --git a/weave/legacy/tests/test_monitoring.py b/weave/legacy/tests/test_monitoring.py deleted file mode 100644 index d86a32260fe..00000000000 --- a/weave/legacy/tests/test_monitoring.py +++ /dev/null @@ -1,155 +0,0 @@ -import contextlib -import os -import time - -import pytest - -import weave -from weave.legacy.weave.monitoring import monitor - -### Skipping some tests here. They are for features that no longer exist. Since we're -# iterating on the API, I'm not removing them yet. - - -@contextlib.contextmanager -def async_disabled(): - current = os.environ.get("WEAVE_DISABLE_ASYNC_FILE_STREAM") - os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] = "true" - try: - yield - finally: - if current is None: - del os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] - else: - os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] = current - - -@pytest.mark.skip() -def test_monitoring_basic(user_by_api_key_in_env): - with async_disabled(): - mon = monitor.new_monitor( - "%s/%s/test_monitoring" % (user_by_api_key_in_env.username, "test") - ) - - @mon.trace() - def example(a, b): - return a + b - - rows = [] - results = [] - for i in range(10): - for j in range(10): - example(i, j) - rows.append({"a": i, "b": j}) - results.append(i + j) - - # These underscore accesses are not public API. This is just for testing. - mon._streamtable.finish() - node = mon.rows() - inputs_node = node["inputs"] - output_node = node["output"] - input_results, output_results = weave.use([inputs_node, output_node]) - - assert input_results.to_pylist_tagged() == rows - assert output_results.to_pylist_tagged() == results - - -@pytest.mark.skip("Feature removed") -def test_monitoring_auto_false(user_by_api_key_in_env): - with async_disabled(): - # @monitoring.monitor( - # entity_name=user_by_api_key_in_env.username, - # project_name="test", - # auto_log=False, - # ) - def example(a, b): - return a + b - - rows = [] - results = [] - for i in range(10): - for j in range(10): - res = example(i, j) - res.add_data({"c": i + j}) - results.append(res) - rows.append(i + j) - - for res in results[::-1]: - # Do the finishing in reverse order - res.finalize() - - # These underscore accesses are not public API. This is just for testing. - example._stream_table.finish() - node = example.rows()["c"] - - assert weave.use(node).to_pylist_tagged() == rows[::-1] - - -@pytest.mark.skip("Feature removed") -def test_monitoring_capture_errors(user_by_api_key_in_env): - with async_disabled(): - # @monitoring.monitor( - # entity_name=user_by_api_key_in_env.username, - # project_name="test", - # raise_on_error=False, - # ) - def example(a, b): - if b == 5: - raise ValueError("5 is bad") - return a + b - - rows = [] - results = [] - exceptions = [] - for i in range(10): - for j in range(10): - example(i, j) - rows.append({"a": i, "b": j}) - if j == 5: - results.append(None) - exceptions.append("ValueError: 5 is bad") - else: - results.append(i + j) - exceptions.append(None) - - # These underscore accesses are not public API. This is just for testing. - example._stream_table.finish() - node = example.rows() - - input_results, output_results, exception_results = weave.use( - [node["inputs"], node["output"], node["exception"]] - ) - - assert input_results.to_pylist_tagged() == rows - assert output_results.to_pylist_tagged() == results - assert exception_results.to_pylist_tagged() == exceptions - - -@pytest.mark.skip("Feature removed") -def test_monitoring_processors(user_by_api_key_in_env): - with async_disabled(): - # @monitoring.monitor( - # entity_name=user_by_api_key_in_env.username, - # project_name="test", - # input_preprocessor=lambda a, b: {"val": f"{a} + {b}"}, - # output_postprocessor=lambda res: {"val": res}, - # ) - def example(a, b): - return a + b - - rows = [] - results = [] - for i in range(10): - for j in range(10): - example(i, j) - rows.append({"val": f"{i} + {j}"}) - results.append({"val": i + j}) - - # These underscore accesses are not public API. This is just for testing. - example._stream_table.finish() - node = example.rows() - - input_results, output_results = weave.use([node["inputs"], node["output"]]) - - assert input_results.to_pylist_tagged() == rows - assert output_results.to_pylist_tagged() == results diff --git a/weave/legacy/tests/test_monitoring_openai.py b/weave/legacy/tests/test_monitoring_openai.py deleted file mode 100644 index cc45d23e76f..00000000000 --- a/weave/legacy/tests/test_monitoring_openai.py +++ /dev/null @@ -1,548 +0,0 @@ -import contextlib -import os -from unittest.mock import Mock - -import openai -import pytest -import pytest_asyncio -from openai import AsyncStream, Stream -from openai.types.chat.chat_completion import ChatCompletion, Choice -from openai.types.chat.chat_completion_chunk import ChatCompletionChunk, ChoiceDelta -from openai.types.chat.chat_completion_chunk import Choice as ChunkChoice -from openai.types.completion_usage import CompletionUsage - -import weave -from weave.legacy.weave.monitoring import init_monitor -from weave.legacy.weave.monitoring.openai import util -from weave.legacy.weave.monitoring.openai.models import * -from weave.legacy.weave.monitoring.openai.models import Context -from weave.legacy.weave.monitoring.openai.openai import patch, unpatch -from weave.legacy.weave.monitoring.openai.util import Context -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable - - -@pytest.fixture -def chat_completion_request_message(): - return [ - ChatCompletionRequestMessage( - content="Tell me a joke", role="system", function_call=None, tool_calls=None - ) - ] - - -@pytest.fixture -def streaming_chat_completion_messages(): - return [ - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="", - function_call=None, - role="assistant", - tool_calls=None, - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="Why", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" don", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="'t", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" scientists", - function_call=None, - role=None, - tool_calls=None, - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" trust", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" atoms", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="?\n\n", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="Because", - function_call=None, - role=None, - tool_calls=None, - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" they", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" make", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" up", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=" everything", - function_call=None, - role=None, - tool_calls=None, - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content="!", function_call=None, role=None, tool_calls=None - ), - finish_reason=None, - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ChatCompletionChunk( - id="chatcmpl-blank", - choices=[ - ChunkChoice( - delta=ChoiceDelta( - content=None, function_call=None, role=None, tool_calls=None - ), - finish_reason="stop", - index=0, - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion.chunk", - ), - ] - - -class MockAsyncResponse: - """This emulates an SSE response""" - - def __init__(self, chunks: List): - self._chunks = iter(chunks) - - async def aiter_lines(self): - i = 0 - for chunk in self._chunks: - i += 1 - yield f"data: {chunk.model_dump_json()}\n" - yield "\n" - yield "data: [DONE]\n" - yield "\n" - - async def aiter_bytes(self): - async for line in self.aiter_lines(): - yield line.encode("utf-8") - - -class MockAsyncStream(AsyncStream): - def __init__(self, chunks: List): - self._chunks = iter(chunks) - - def process_response_data(*, data: object, **kwargs): - return ChatCompletionChunk.model_validate(data) - - def make_sse_decoder(): - from openai._streaming import SSEDecoder - - return SSEDecoder() - - super().__init__( - cast_to=ChatCompletionChunk, - client=Mock( - _process_response_data=process_response_data, - _make_sse_decoder=make_sse_decoder, - ), - response=MockAsyncResponse(chunks), - ) - - -@pytest.fixture -def async_streaming_chat_completion_messages(streaming_chat_completion_messages): - return MockAsyncStream(streaming_chat_completion_messages) - - -@pytest.fixture -def reassembled_chat_completion_message(): - return ChatCompletion( - id="chatcmpl-blank", - choices=[ - Choice( - # logprobs included here because latest versions of pydantic - # require optional fields without default values to be included - # in the constructor - logprobs=None, - finish_reason="stop", - index=0, - message=ChatCompletionMessage( - content="Why don't scientists trust atoms?\n\nBecause they make up everything!", - role="assistant", - tool_calls=None, - ), - ) - ], - created=1700686161, - model="gpt-3.5-turbo-0613", - object="chat.completion", - usage=CompletionUsage(completion_tokens=19, prompt_tokens=10, total_tokens=29), - ) - - -@pytest.fixture -def openai_client(): - c = Mock(spec=openai.OpenAI) - c.chat = Mock() - c.chat.completions = Mock() - c.chat.completions.create = Mock() - return c - - -@pytest.fixture -def streaming_client(openai_client, streaming_chat_completion_messages): - openai_client.chat.completions.create.return_value = iter( - streaming_chat_completion_messages - ) - return openai_client - - -@pytest.fixture -def teardown(): - yield - unpatch() - - -class MockSyncResponse: - """This emulates a synchronous SSE response""" - - def __init__(self, chunks: List): - self._chunks = iter(chunks) - - def iter_lines(self): - i = 0 - for chunk in self._chunks: - i += 1 - yield f"data: {chunk.model_dump_json()}\n" - yield "\n" - yield "data: [DONE]\n" - yield "\n" - - def iter_bytes(self): - for line in self.iter_lines(): - yield line.encode("utf-8") - - -class MockStream(Stream): - def __init__(self, chunks: List): - self._chunks = iter(chunks) - - def process_response_data(*, data: object, **kwargs): - return ChatCompletionChunk.model_validate(data) - - def make_sse_decoder(): - from openai._streaming import SSEDecoder - - return SSEDecoder() - - super().__init__( - cast_to=ChatCompletionChunk, - client=Mock( - _process_response_data=process_response_data, - _make_sse_decoder=make_sse_decoder, - ), - response=MockSyncResponse(chunks), - ) - - -@pytest.fixture -def mocked_streaming_create(streaming_chat_completion_messages): - # Mock the base create method - return Mock(return_value=MockStream(streaming_chat_completion_messages)) - - -@pytest_asyncio.fixture -async def mocked_async_streaming_create(async_streaming_chat_completion_messages): - async def mocked_create(*args, **kwargs): - return async_streaming_chat_completion_messages - - return mocked_create - - -@pytest.fixture -def mocked_create(reassembled_chat_completion_message): - # Mock the base create method - return Mock(return_value=reassembled_chat_completion_message) - - -def make_stream_table(*args, **kwargs): - # Unit test backend does not support async logging - return StreamTable(*args, **kwargs, _disable_async_file_stream=True) - - -########## - - -# def test_log_to_span_basic( -# user_by_api_key_in_env, -# mocked_create, -# teardown, -# reassembled_chat_completion_message, -# client, -# ): -# stream_name = "monitoring" -# project = "openai" -# entity = user_by_api_key_in_env.username - -# streamtable = make_stream_table( -# stream_name, project_name=project, entity_name=entity -# ) -# chat_completions = weave.legacy.weave.monitoring.openai.openai.ChatCompletions( -# mocked_create -# ) -# create_input = dict( -# model="gpt-3.5-turbo", -# messages=[{"role": "system", "content": "Tell me a joke"}], -# ) -# result = chat_completions.create(**create_input) -# streamtable.finish() - -# call = client.get_calls()[0] -# inputs = {k: v for k, v in call.inputs.items() if not k.startswith("_")} -# outputs = {k: v for k, v in call.output.items() if not k.startswith("_")} - -# inputs_expected = create_input -# assert inputs == inputs_expected - -# outputs_expected = reassembled_chat_completion_message.dict(exclude_unset=True) -# assert outputs == outputs_expected - - -# def test_log_to_span_streaming( -# user_by_api_key_in_env, -# mocked_streaming_create, -# teardown, -# reassembled_chat_completion_message, -# client, -# ): -# chat_completions = weave.legacy.weave.monitoring.openai.openai.ChatCompletions( -# mocked_streaming_create -# ) -# create_input = dict( -# model="gpt-3.5-turbo", -# messages=[{"role": "system", "content": "Tell me a joke"}], -# stream=True, -# ) -# stream = chat_completions.create(**create_input) -# for x in stream: -# ... - -# call = client.get_calls()[0] -# inputs = {k: v for k, v in call.inputs.items() if not k.startswith("_")} -# outputs = {k: v for k, v in call.output.items() if not k.startswith("_")} - -# inputs_expected = create_input -# assert inputs == inputs_expected - -# outputs_expected = reassembled_chat_completion_message.dict(exclude_unset=True) -# assert outputs == outputs_expected - - -# @pytest.mark.asyncio -# async def test_log_to_span_async_streaming( -# user_by_api_key_in_env, -# mocked_async_streaming_create, -# teardown, -# reassembled_chat_completion_message, -# client, -# ): -# chat_completions = weave.legacy.weave.monitoring.openai.openai.AsyncChatCompletions( -# mocked_async_streaming_create -# ) -# create_input = dict( -# model="gpt-3.5-turbo", -# messages=[{"role": "system", "content": "Tell me a joke"}], -# stream=True, -# ) -# stream = await chat_completions.create(**create_input) -# async for x in stream: -# ... - -# call = client.get_calls()[0] -# inputs = {k: v for k, v in call.inputs.items() if not k.startswith("_")} -# outputs = {k: v for k, v in call.output.items() if not k.startswith("_")} - -# inputs_expected = create_input -# assert inputs == inputs_expected - -# outputs_expected = reassembled_chat_completion_message.dict(exclude_unset=True) -# assert outputs == outputs_expected - - -@contextlib.contextmanager -def async_disabled(): - current = os.environ.get("WEAVE_DISABLE_ASYNC_FILE_STREAM") - os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] = "true" - try: - yield - finally: - if current is None: - del os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] - else: - os.environ["WEAVE_DISABLE_ASYNC_FILE_STREAM"] = current diff --git a/weave/legacy/tests/test_weave_api.py b/weave/legacy/tests/test_weave_api.py deleted file mode 100644 index f62a2881910..00000000000 --- a/weave/legacy/tests/test_weave_api.py +++ /dev/null @@ -1,34 +0,0 @@ -import os - -import pytest - -import weave -import weave.legacy.weave.context_state -import weave.legacy.weave.wandb_api - - -def test_create_list_rename_delete(): - os.environ["WEAVE_CACHE_MODE"] = "minimal" - - # create - art_node = weave.legacy.weave.ops.get("local-artifact:///my-data:latest/obj") - art_node.set("foo") - assert weave.use(art_node) == "foo" - - # list - arts = weave.use(weave.legacy.weave.ops.local_artifacts()) - assert len(arts) == 1 - assert arts[0].name == "my-data" - - # rename - weave.legacy.weave.ops.rename_artifact(art_node, "my-data2") - arts = weave.use(weave.legacy.weave.ops.local_artifacts()) - assert len(arts) == 1 - assert arts[0].name == "my-data2" - - # delete - art_node = weave.legacy.weave.ops.get("local-artifact:///my-data2:latest/obj") - weave.legacy.weave.ops.delete_artifact(art_node) - arts = weave.use(weave.legacy.weave.ops.local_artifacts()) - assert len(arts) == 0 - diff --git a/weave/legacy/weave/core_types/__init__.py b/weave/legacy/weave/core_types/__init__.py deleted file mode 100644 index 0cee69ecdca..00000000000 --- a/weave/legacy/weave/core_types/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.core_types.stream_table_type import StreamTableType diff --git a/weave/legacy/weave/ecosystem/__init__.py b/weave/legacy/weave/ecosystem/__init__.py deleted file mode 100644 index 2ba3a1f0da9..00000000000 --- a/weave/legacy/weave/ecosystem/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.root import * diff --git a/weave/legacy/weave/ecosystem/bertviz/__init__.py b/weave/legacy/weave/ecosystem/bertviz/__init__.py deleted file mode 100644 index e220f65bfaf..00000000000 --- a/weave/legacy/weave/ecosystem/bertviz/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.bertviz.panels import * diff --git a/weave/legacy/weave/ecosystem/craiyon/__init__.py b/weave/legacy/weave/ecosystem/craiyon/__init__.py deleted file mode 100644 index dbcad02cfd5..00000000000 --- a/weave/legacy/weave/ecosystem/craiyon/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.craiyon.ops import * diff --git a/weave/legacy/weave/ecosystem/huggingface/__init__.py b/weave/legacy/weave/ecosystem/huggingface/__init__.py deleted file mode 100644 index 8e6bc2c2ae7..00000000000 --- a/weave/legacy/weave/ecosystem/huggingface/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from weave.legacy.weave import context_state as _context - -_loading_builtins_token = _context.set_loading_built_ins() - -from weave.legacy.weave.ecosystem.huggingface.hfmodel import ModelOutputAttention -from weave.legacy.weave.ecosystem.huggingface.huggingface_datasets import * -from weave.legacy.weave.ecosystem.huggingface.huggingface_models import * -from weave.legacy.weave.ecosystem.huggingface.model_textclassification import ( - FullTextClassificationPipelineOutput, -) - -_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/lens/__init__.py b/weave/legacy/weave/ecosystem/lens/__init__.py deleted file mode 100644 index 4c04886f8c2..00000000000 --- a/weave/legacy/weave/ecosystem/lens/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.lens.lens import * diff --git a/weave/legacy/weave/ecosystem/py/__init__.py b/weave/legacy/weave/ecosystem/py/__init__.py deleted file mode 100644 index e535e18a474..00000000000 --- a/weave/legacy/weave/ecosystem/py/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.py import pydoc diff --git a/weave/legacy/weave/ecosystem/pytorch/__init__.py b/weave/legacy/weave/ecosystem/pytorch/__init__.py deleted file mode 100644 index 3b5a12f7690..00000000000 --- a/weave/legacy/weave/ecosystem/pytorch/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.pytorch.model import * diff --git a/weave/legacy/weave/ecosystem/shawn/__init__.py b/weave/legacy/weave/ecosystem/shawn/__init__.py deleted file mode 100644 index 53e96633366..00000000000 --- a/weave/legacy/weave/ecosystem/shawn/__init__.py +++ /dev/null @@ -1,7 +0,0 @@ -from weave.legacy.weave import context_state as _context - -_loading_builtins_token = _context.set_loading_built_ins() - -from weave.legacy.weave.ecosystem.shawn import petdataset, scratch - -_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/sklearn/__init__.py b/weave/legacy/weave/ecosystem/sklearn/__init__.py deleted file mode 100644 index 08e6e889266..00000000000 --- a/weave/legacy/weave/ecosystem/sklearn/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.sklearn.datasets import * diff --git a/weave/legacy/weave/ecosystem/slack/__init__.py b/weave/legacy/weave/ecosystem/slack/__init__.py deleted file mode 100644 index a5018fce230..00000000000 --- a/weave/legacy/weave/ecosystem/slack/__init__.py +++ /dev/null @@ -1,2 +0,0 @@ -from weave.legacy.weave.ecosystem.slack.panels import * -from weave.legacy.weave.ecosystem.slack.slack import * diff --git a/weave/legacy/weave/ecosystem/slurm/__init__.py b/weave/legacy/weave/ecosystem/slurm/__init__.py deleted file mode 100644 index e9bd4eae0cd..00000000000 --- a/weave/legacy/weave/ecosystem/slurm/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.slurm.ops import * diff --git a/weave/legacy/weave/ecosystem/torchvision/__init__.py b/weave/legacy/weave/ecosystem/torchvision/__init__.py deleted file mode 100644 index b003b9b82da..00000000000 --- a/weave/legacy/weave/ecosystem/torchvision/__init__.py +++ /dev/null @@ -1 +0,0 @@ -from weave.legacy.weave.ecosystem.torchvision.datasets import * diff --git a/weave/legacy/weave/ecosystem/wandb/__init__.py b/weave/legacy/weave/ecosystem/wandb/__init__.py deleted file mode 100644 index 9786a4f2489..00000000000 --- a/weave/legacy/weave/ecosystem/wandb/__init__.py +++ /dev/null @@ -1,13 +0,0 @@ -from weave.legacy.weave import context_state as _context - -_loading_builtins_token = _context.set_loading_built_ins() - -from weave.legacy.weave.ecosystem.wandb import wandb_objs -from weave.legacy.weave.ecosystem.wandb.panel_distribution import * -from weave.legacy.weave.ecosystem.wandb.panel_geo import * -from weave.legacy.weave.ecosystem.wandb.panel_scatter import * -from weave.legacy.weave.ecosystem.wandb.panel_time_series import * -from weave.legacy.weave.ecosystem.wandb.run_chain import * -from weave.legacy.weave.ecosystem.wandb.weave_plotly import * - -_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/language_features/tagging/__init__.py b/weave/legacy/weave/language_features/tagging/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/weave/legacy/weave/ops_arrow/__init__.py b/weave/legacy/weave/ops_arrow/__init__.py deleted file mode 100644 index 980f2fd2ce6..00000000000 --- a/weave/legacy/weave/ops_arrow/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -from weave.legacy.weave import context_state as _context_state - -_loading_builtins_token = _context_state.set_loading_built_ins() - -from weave.legacy.weave.arrow.arrow import * -from weave.legacy.weave.arrow.convert import * -from weave.legacy.weave.arrow.list_ import * -from weave.legacy.weave.ops_arrow import ops -from weave.legacy.weave.ops_arrow.list_range import range -from weave.legacy.weave.ops_arrow.vectorize import vectorize - -_context_state.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ops_arrow/ops.py b/weave/legacy/weave/ops_arrow/ops.py deleted file mode 100644 index 452bebd2a93..00000000000 --- a/weave/legacy/weave/ops_arrow/ops.py +++ /dev/null @@ -1,11 +0,0 @@ -from weave.legacy.weave.ops_arrow.arraylist_ops import * -from weave.legacy.weave.ops_arrow.boolean import * -from weave.legacy.weave.ops_arrow.convert_ops import * -from weave.legacy.weave.ops_arrow.date import * -from weave.legacy.weave.ops_arrow.dict import * -from weave.legacy.weave.ops_arrow.list_join import * -from weave.legacy.weave.ops_arrow.list_ops import * # type: ignore -from weave.legacy.weave.ops_arrow.number import * -from weave.legacy.weave.ops_arrow.obj import * -from weave.legacy.weave.ops_arrow.ref_ops import * -from weave.legacy.weave.ops_arrow.string import * diff --git a/weave/legacy/weave/ops_domain/run_history/__init__.py b/weave/legacy/weave/ops_domain/run_history/__init__.py deleted file mode 100644 index e69de29bb2d..00000000000 diff --git a/weave/legacy/weave/ops_primitives/test_file.py b/weave/legacy/weave/ops_primitives/test_file.py deleted file mode 100644 index 247beb744f5..00000000000 --- a/weave/legacy/weave/ops_primitives/test_file.py +++ /dev/null @@ -1,8 +0,0 @@ -import weave -from weave.legacy.weave.ops_primitives import file_local - - -def test_file_browsing(): - test_dir = weave.legacy.weave.ops.local_path("./testdata/").path("test_dir") - assert test_dir.type == file_local.LocalDirType() - assert weave.use(test_dir.path("b.txt").contents()) == "howdy\n" diff --git a/weave/legacy/weave/ops_primitives/test_list_range.py b/weave/legacy/weave/ops_primitives/test_list_range.py deleted file mode 100644 index d821293f33d..00000000000 --- a/weave/legacy/weave/ops_primitives/test_list_range.py +++ /dev/null @@ -1,7 +0,0 @@ -import pytest - -import weave - - -def test_range(): - assert weave.use(weave.legacy.weave.ops.range(0, 3, 1)).to_pylist_tagged() == [0, 1, 2] diff --git a/weave/legacy/weave/panels/__init__.py b/weave/legacy/weave/panels/__init__.py deleted file mode 100644 index 1ba950300b7..00000000000 --- a/weave/legacy/weave/panels/__init__.py +++ /dev/null @@ -1,70 +0,0 @@ -from weave.legacy.weave import context_state as _context_state - -_loading_builtins_token = _context_state.set_loading_built_ins() - -from weave.legacy.weave.panels.panel_auto import * - -# basic -from weave.legacy.weave.panels.panel_basic import * - -# top level board -from weave.legacy.weave.panels.panel_board import Board, BoardPanel, BoardPanelLayout -from weave.legacy.weave.panels.panel_card import Card, CardTab -from weave.legacy.weave.panels.panel_color import Color -from weave.legacy.weave.panels.panel_daterange import DateRange - -# domain -from weave.legacy.weave.panels.panel_domain import * -from weave.legacy.weave.panels.panel_dropdown import Dropdown, DropdownConfig -from weave.legacy.weave.panels.panel_each import Each -from weave.legacy.weave.panels.panel_each_column import EachColumn - -# special -from weave.legacy.weave.panels.panel_expression import * -from weave.legacy.weave.panels.panel_facet import Facet -from weave.legacy.weave.panels.panel_facet_tabs import FacetTabs -from weave.legacy.weave.panels.panel_filter_editor import FilterEditor -from weave.legacy.weave.panels.panel_function_editor import ( - FunctionEditor, - FunctionEditorConfig, -) -from weave.legacy.weave.panels.panel_group import ( - Group, - GroupLayoutFlow, - GroupPanel, - GroupPanelLayout, -) -from weave.legacy.weave.panels.panel_grouping_editor import GroupingEditor - -# Incomplete -from weave.legacy.weave.panels.panel_histogram import * -from weave.legacy.weave.panels.panel_html import PanelHtml - -# layout -from weave.legacy.weave.panels.panel_labeled_item import LabeledItem - -# legacy -from weave.legacy.weave.panels.panel_legacy import * -from weave.legacy.weave.panels.panel_markdown import PanelMarkdown - -# Non-standard editor (todo: update) -from weave.legacy.weave.panels.panel_object_picker import ObjectPicker, ObjectPickerConfig -from weave.legacy.weave.panels.panel_plot import Plot, PlotConstants, Series - -# sidebar specific -from weave.legacy.weave.panels.panel_query import Query, QueryCondition, QueryConfig -from weave.legacy.weave.panels.panel_sections import Sections -from weave.legacy.weave.panels.panel_select import SelectEditor, SelectEditorConfig - -# editors -from weave.legacy.weave.panels.panel_slider import Slider, SliderConfig -from weave.legacy.weave.panels.panel_string import PanelString -from weave.legacy.weave.panels.panel_string_editor import StringEditor -from weave.legacy.weave.panels.panel_table import ColumnDef, Table, TableColumn -from weave.legacy.weave.panels.panel_trace import Trace - -# navigation -from weave.legacy.weave.panels.panel_weavelink import WeaveLink -from weave.legacy.weave.panel import Panel - -_context_state.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/panels/panel_expression.py b/weave/legacy/weave/panels/panel_expression.py deleted file mode 100644 index 0610f093107..00000000000 --- a/weave/legacy/weave/panels/panel_expression.py +++ /dev/null @@ -1,7 +0,0 @@ -import weave -from weave.legacy.weave import panel - - -@weave.type() -class Expression(panel.Panel): - id = "Expression" diff --git a/weave/tests/trace/test_weave_client.py b/weave/tests/trace/test_weave_client.py index b4bf3f45e27..8108e51ea6d 100644 --- a/weave/tests/trace/test_weave_client.py +++ b/weave/tests/trace/test_weave_client.py @@ -1101,6 +1101,7 @@ def models(text): ] +@pytest.mark.skip("skipping since it depends on query service deps atm") def test_weave_server(client): class MyModel(weave.Model): prompt: str diff --git a/weave/tests/wandb_system_tests_conftest.py b/weave/tests/wandb_system_tests_conftest.py index a67debe9871..e0b18358315 100644 --- a/weave/tests/wandb_system_tests_conftest.py +++ b/weave/tests/wandb_system_tests_conftest.py @@ -15,11 +15,7 @@ import requests import wandb -from weave.legacy.weave.wandb_api import ( - WandbApiContext, - from_environment, - wandb_api_context, -) +from weave.wandb_interface.wandb_api import from_environment # The following code snippet was copied from: @@ -40,7 +36,7 @@ def lock(tmp_path_factory): @pytest.fixture() def serial(lock): - with lock.acquire(poll_intervall=0.1): + with lock.acquire(poll_interval=0.1): yield @@ -87,27 +83,6 @@ def bootstrap_user( ) -@pytest.fixture(scope=determine_scope) -def user_by_api_key_in_context( - bootstrap_user: LocalBackendFixturePayload, -) -> Generator[LocalBackendFixturePayload, None, None]: - with wandb_api_context(WandbApiContext(api_key=bootstrap_user.api_key)): - yield bootstrap_user - - -@pytest.fixture(scope=determine_scope) -def user_by_http_headers_in_context( - bootstrap_user: LocalBackendFixturePayload, -) -> Generator[LocalBackendFixturePayload, None, None]: - headers = { - "use-admin-privileges": "true", - "cookie": f"wandb={bootstrap_user.cookie};", - } - cookies = {"wandb": bootstrap_user.cookie} - with wandb_api_context(WandbApiContext(headers=headers, cookies=cookies)): - yield bootstrap_user - - @pytest.fixture(scope=determine_scope) def user_by_api_key_in_env( bootstrap_user: LocalBackendFixturePayload, serial diff --git a/weave/trace/op.py b/weave/trace/op.py index bf9acec6d69..ad83f83e222 100644 --- a/weave/trace/op.py +++ b/weave/trace/op.py @@ -431,13 +431,6 @@ async def extract(): await extract() # calls the function and tracks the call in the Weave UI ``` """ - # TODO: (AT): Remove - from weave.legacy.weave import context_state - - if context_state.get_loading_built_ins(): - from weave.legacy.weave.decorator_op import op as legacy_op - - return legacy_op(*args, **kwargs) # type: ignore def op_deco(func: Callable) -> Op: # Check function type diff --git a/weave/trace/serve_fastapi.py b/weave/trace/serve_fastapi.py index d9b7a68bfb6..89d647751d5 100644 --- a/weave/trace/serve_fastapi.py +++ b/weave/trace/serve_fastapi.py @@ -6,11 +6,11 @@ from fastapi import Depends, FastAPI, Header, HTTPException from fastapi.security import HTTPBasic, HTTPBasicCredentials -from weave.legacy.weave import cache, op_args, pyfunc_type_util, weave_pydantic from weave.trace import errors from weave.trace.op import Op, is_op from weave.trace.refs import ObjectRef from weave.wandb_interface.wandb_api import WandbApiAsync +from weave_query import cache, op_args, pyfunc_type_util, weave_pydantic # type: ignore key_cache: cache.LruTimeWindowCache[str, typing.Optional[bool]] = ( cache.LruTimeWindowCache(datetime.timedelta(minutes=5)) diff --git a/weave/trace/weave_init.py b/weave/trace/weave_init.py index 7b6ba602bce..69cc8793965 100644 --- a/weave/trace/weave_init.py +++ b/weave/trace/weave_init.py @@ -76,7 +76,7 @@ def init_weave( else: _current_inited_client.reset() - from weave.legacy.weave import wandb_api + from weave_query import wandb_api # type: ignore # Must init to read ensure we've read auth from the environment, in # case we're on a new thread. diff --git a/weave/legacy/.devcontainer/devcontainer.json b/weave_query/.devcontainer/devcontainer.json similarity index 100% rename from weave/legacy/.devcontainer/devcontainer.json rename to weave_query/.devcontainer/devcontainer.json diff --git a/weave/legacy/.devcontainer/postCreateCommand.sh b/weave_query/.devcontainer/postCreateCommand.sh similarity index 100% rename from weave/legacy/.devcontainer/postCreateCommand.sh rename to weave_query/.devcontainer/postCreateCommand.sh diff --git a/weave/legacy/.dockerignore b/weave_query/.dockerignore similarity index 100% rename from weave/legacy/.dockerignore rename to weave_query/.dockerignore diff --git a/weave/legacy/.github/workflows/mutations-perf.yaml b/weave_query/.github/workflows/mutations-perf.yaml similarity index 100% rename from weave/legacy/.github/workflows/mutations-perf.yaml rename to weave_query/.github/workflows/mutations-perf.yaml diff --git a/weave_query/.graphqlrc b/weave_query/.graphqlrc new file mode 100644 index 00000000000..d8ad47177c0 --- /dev/null +++ b/weave_query/.graphqlrc @@ -0,0 +1 @@ +schema: "./wb_schema.gql" diff --git a/weave/legacy/.vscode/settings.json b/weave_query/.vscode/settings.json similarity index 100% rename from weave/legacy/.vscode/settings.json rename to weave_query/.vscode/settings.json diff --git a/weave/legacy/Dockerfile b/weave_query/Dockerfile similarity index 97% rename from weave/legacy/Dockerfile rename to weave_query/Dockerfile index e5476d1ca7f..63d80cafa9c 100644 --- a/weave/legacy/Dockerfile +++ b/weave_query/Dockerfile @@ -48,4 +48,4 @@ RUN mkdir /local-artifacts EXPOSE 9239 ENTRYPOINT [ "tini", "-g", "--" ] -CMD ["gunicorn", "weave.legacy.weave.weave_server:app"] +CMD ["gunicorn", "weave_query.weave_server:app"] diff --git a/weave/legacy/Dockerfile.ci.test b/weave_query/Dockerfile.ci.test similarity index 91% rename from weave/legacy/Dockerfile.ci.test rename to weave_query/Dockerfile.ci.test index 71a63d3c77d..19eebe5b6dc 100644 --- a/weave/legacy/Dockerfile.ci.test +++ b/weave_query/Dockerfile.ci.test @@ -4,7 +4,7 @@ FROM python:3.9.11 as builder RUN apt update RUN apt -y install python3-venv python3-dev gcc g++ xz-utils RUN rm /bin/sh && ln -s /bin/bash /bin/sh -COPY requirements.* /root/ +COPY weave_query/requirements.* /root/ WORKDIR /root RUN python3 -m venv venv RUN --mount=type=cache,target=/root/.cache /bin/bash -c \ diff --git a/weave/legacy/Makefile b/weave_query/Makefile similarity index 100% rename from weave/legacy/Makefile rename to weave_query/Makefile diff --git a/weave/legacy/conftest.py b/weave_query/conftest.py similarity index 55% rename from weave/legacy/conftest.py rename to weave_query/conftest.py index ab1563af9e6..8446f7680cb 100644 --- a/weave/legacy/conftest.py +++ b/weave_query/conftest.py @@ -1,21 +1,29 @@ import logging import os import pathlib +import random import shutil +import tempfile import typing +import numpy as np import pytest from flask.testing import FlaskClient -from weave.legacy.weave import client as client_legacy -from weave.legacy.weave import context_state, environment, io_service, serialize -from weave.legacy.weave.language_features.tagging.tag_store import ( +from tests import fixture_fakewandb +from tests.wandb_system_tests_conftest import * +from weave_query import client as client_legacy +from weave_query import ( + context_state, + environment, + io_service, + logs, + serialize, +) +from weave_query.language_features.tagging.tag_store import ( isolated_tagging_context, ) -from weave.legacy.weave import logs -# from .tests.wandb_system_tests_conftest import * - logs.configure_logger() # Lazy mode was the default for a long time. Eager is now the default for the user API. @@ -23,11 +31,125 @@ # tests. context_state._eager_mode.set(False) -# A lot of tests rely on weave.legacy.weave.ops.* being in scope. Importing this here +# A lot of tests rely on weave_query.ops.* being in scope. Importing this here # makes that work... + +def pytest_collection_modifyitems(config, items): + # Get the job number from environment variable (0 for even tests, 1 for odd tests) + job_num = config.getoption("--job-num", default=None) + if job_num is None: + return + + job_num = int(job_num) + + selected_items = [] + for index, item in enumerate(items): + if index % 2 == job_num: + selected_items.append(item) + + items[:] = selected_items + + +@pytest.fixture(autouse=True) +def throw_on_error(): + os.environ["WEAVE_VALUE_OR_ERROR_DEBUG"] = "true" + yield + del os.environ["WEAVE_VALUE_OR_ERROR_DEBUG"] + + ### Disable datadog engine tracing + +class FakeTracer: + def trace(*args, **kwargs): + pass + + +def make_fake_tracer(): + return FakeTracer() + + +### End disable datadog engine tracing +### disable internet access + + +def guard(*args, **kwargs): + raise Exception("I told you not to use the Internet!") + + +### End disable internet access + +# Uncomment these two lines to disable internet access entirely. +# engine_trace.tracer = make_fake_tracer +# socket.socket = guard + + +@pytest.fixture() +def fixed_random_seed(): + random.seed(8675309) + np.random.seed(8675309) + yield + random.seed(None) + np.random.seed(None) + + +@pytest.fixture() +def app(): + from weave_query import weave_server + + app = weave_server.make_app() + app.config.update( + { + "TESTING": True, + } + ) + + yield app + + +@pytest.fixture() +def test_artifact_dir(): + return "/tmp/weave/pytest/%s" % os.environ.get("PYTEST_CURRENT_TEST") + + +@pytest.fixture() +def fake_wandb(): + setup_response = fixture_fakewandb.setup() + yield setup_response + fixture_fakewandb.teardown(setup_response) + + +@pytest.fixture() +def consistent_table_col_ids(): + from weave_query.panels import table_state + + with table_state.use_consistent_col_ids(): + yield + + +@pytest.fixture() +def enable_touch_on_read(): + os.environ["WEAVE_ENABLE_TOUCH_ON_READ"] = "1" + yield + del os.environ["WEAVE_ENABLE_TOUCH_ON_READ"] + + +@pytest.fixture() +def cache_mode_minimal(): + os.environ["WEAVE_NO_CACHE"] = "true" + yield + del os.environ["WEAVE_NO_CACHE"] + + +@pytest.fixture() +def cereal_csv(): + with tempfile.TemporaryDirectory() as d: + cereal_path = os.path.join(d, "cereal.csv") + shutil.copy("testdata/cereal.csv", cereal_path) + yield cereal_path + + def pytest_sessionstart(session): context_state.disable_analytics() @@ -40,7 +162,7 @@ def pre_post_each_test(test_artifact_dir, caplog): # Tests rely on full cache mode right now. os.environ["WEAVE_CACHE_MODE"] = "full" os.environ["WEAVE_GQL_SCHEMA_PATH"] = str( - pathlib.Path(__file__).parent.parent.parent / "wb_schema.gql" + pathlib.Path(__file__).parent.parent / "wb_schema.gql" ) try: shutil.rmtree(test_artifact_dir) @@ -52,8 +174,6 @@ def pre_post_each_test(test_artifact_dir, caplog): del os.environ["WEAVE_LOCAL_ARTIFACT_DIR"] - - @pytest.fixture() def fresh_server_logfile(): def _clearlog(): @@ -66,6 +186,7 @@ def _clearlog(): yield _clearlog() + @pytest.fixture() def eager_mode(): with context_state.eager_execution(): @@ -132,7 +253,7 @@ def factory(process=False): @pytest.fixture() def http_server_test_client(app): - from .. import weave_server + from weave_query import weave_server app = weave_server.make_app() flask_client = app.test_client() @@ -144,11 +265,7 @@ def weave_test_client(http_server_test_client): return client_legacy.Client(http_server_test_client) - - @pytest.fixture() def ref_tracking(): with context_state.ref_tracking(True): yield - - diff --git a/weave/legacy/docs/dispatching_and_resolution.md b/weave_query/docs/dispatching_and_resolution.md similarity index 100% rename from weave/legacy/docs/dispatching_and_resolution.md rename to weave_query/docs/dispatching_and_resolution.md diff --git a/weave/legacy/examples/apps/explore_embeddings.ipynb b/weave_query/examples/apps/explore_embeddings.ipynb similarity index 99% rename from weave/legacy/examples/apps/explore_embeddings.ipynb rename to weave_query/examples/apps/explore_embeddings.ipynb index a5e820dc9d7..baffd1e8b76 100644 --- a/weave/legacy/examples/apps/explore_embeddings.ipynb +++ b/weave_query/examples/apps/explore_embeddings.ipynb @@ -48,9 +48,9 @@ "source": [ "import pandas\n", "import weave\n", - "from weave.legacy.weave.ecosystem import openai\n", - "from weave.legacy.weave.ecosystem import umap\n", - "from weave.legacy.weave.ecosystem import hdbscan" + "from weave_query.ecosystem import openai\n", + "from weave_query.ecosystem import umap\n", + "from weave_query.ecosystem import hdbscan" ] }, { @@ -103,7 +103,7 @@ "outputs": [], "source": [ "raw_data = pandas.read_json('./pokemon.json')\n", - "data = weave.save(weave.legacy.weave.ops.dataframe_to_arrow(raw_data), 'pokemon_data')" + "data = weave.save(weave_query.ops.dataframe_to_arrow(raw_data), 'pokemon_data')" ] }, { @@ -320,7 +320,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " 'data': data,\n", " 'limit': 1005,\n", @@ -340,19 +340,19 @@ " 'projection': lambda embeddings: umap.umap_project(embeddings, {})\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda limited_data, projection, clusters: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda limited_data, projection, clusters: weave_query.panels.Plot(\n", " limited_data,\n", " x=lambda row, index: projection[index][0],\n", " y=lambda row, index: projection[index][1],\n", " label=lambda row, index: clusters[index],\n", " ),\n", " id='projection_plot',\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda projection_plot: projection_plot.selected_data(),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/AutoBoard.ipynb b/weave_query/examples/experimental/AutoBoard.ipynb similarity index 81% rename from weave/legacy/examples/experimental/AutoBoard.ipynb rename to weave_query/examples/experimental/AutoBoard.ipynb index 264a035b27e..e24a5dff4f4 100644 --- a/weave/legacy/examples/experimental/AutoBoard.ipynb +++ b/weave_query/examples/experimental/AutoBoard.ipynb @@ -8,9 +8,9 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.scripts import syndata\n", - "from weave.legacy.scripts import syndata_mon\n", - "from weave.legacy.weave.panels_py import panel_autoboard" + "from weave_query.scripts import syndata\n", + "from weave_query.scripts import syndata_mon\n", + "from weave_query.panels_py import panel_autoboard" ] }, { @@ -32,7 +32,7 @@ "outputs": [], "source": [ "panel_autoboard.auto_panels(predictions)\n", - "#weave.legacy.weave.ops.project('shawn', 'fasion-sweep').runs().history().concat()['_step'].type" + "#weave_query.ops.project('shawn', 'fasion-sweep').runs().history().concat()['_step'].type" ] }, { @@ -63,7 +63,7 @@ "metadata": {}, "outputs": [], "source": [ - "#panel_autoboard.auto_panels(weave.legacy.weave.ops.project('shawn', 'oai-api5').run('test4').history2())" + "#panel_autoboard.auto_panels(weave_query.ops.project('shawn', 'oai-api5').run('test4').history2())" ] } ], diff --git a/weave/legacy/examples/experimental/Closures.ipynb b/weave_query/examples/experimental/Closures.ipynb similarity index 100% rename from weave/legacy/examples/experimental/Closures.ipynb rename to weave_query/examples/experimental/Closures.ipynb diff --git a/weave/legacy/examples/experimental/Monitor.ipynb b/weave_query/examples/experimental/Monitor.ipynb similarity index 76% rename from weave/legacy/examples/experimental/Monitor.ipynb rename to weave_query/examples/experimental/Monitor.ipynb index 4f6ac6046aa..b81c7cfea19 100644 --- a/weave/legacy/examples/experimental/Monitor.ipynb +++ b/weave_query/examples/experimental/Monitor.ipynb @@ -21,9 +21,9 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.scripts import syndata_mon\n", - "from weave.legacy.weave.arrow.list_ import dataframe_to_arrow\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.scripts import syndata_mon\n", + "from weave_query.arrow.list_ import dataframe_to_arrow\n", + "from weave_query.ecosystem import wandb" ] }, { @@ -64,22 +64,22 @@ "outputs": [], "source": [ "# Create a dashboard for our data\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", - " 'x_max': weave.legacy.weave.ops.date_parse(str(end_date)),\n", - " 'x_min': lambda x_max: x_max - weave.legacy.weave.ops.days(5),\n", - " 'predictions_query': weave.legacy.weave.panels.Query(\n", + " 'x_max': weave_query.ops.date_parse(str(end_date)),\n", + " 'x_min': lambda x_max: x_max - weave_query.ops.days(5),\n", + " 'predictions_query': weave_query.panels.Query(\n", " predictions,\n", " conditions=[\n", - " lambda query_input: weave.legacy.weave.panels.QueryCondition(\n", + " lambda query_input: weave_query.panels.QueryCondition(\n", " expression=query_input['model_version'],\n", - " editor=weave.legacy.weave.panels.SelectEditor(\n", + " editor=weave_query.panels.SelectEditor(\n", " choices=query_input['model_version']\n", " )\n", " ),\n", - " lambda query_input: weave.legacy.weave.panels.QueryCondition(\n", + " lambda query_input: weave_query.panels.QueryCondition(\n", " expression=query_input['username'],\n", - " editor=weave.legacy.weave.panels.SelectEditor(\n", + " editor=weave_query.panels.SelectEditor(\n", " choices=query_input['username']\n", " )\n", " ),\n", @@ -87,7 +87,7 @@ " 'predictions': lambda predictions_query: predictions_query.selected()\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -98,9 +98,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -111,9 +111,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -124,9 +124,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"api_cost\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -137,9 +137,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"total_tokens\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -150,35 +150,35 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"avg_latency\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['api_cost'],\n", " bin_size=0.2\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['prompt_tokens'] + pred['completion_tokens'],\n", " bin_size=25\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['latency'],\n", " bin_size=0.05\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions: predictions,\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/MonitorPanelPlot.ipynb b/weave_query/examples/experimental/MonitorPanelPlot.ipynb similarity index 67% rename from weave/legacy/examples/experimental/MonitorPanelPlot.ipynb rename to weave_query/examples/experimental/MonitorPanelPlot.ipynb index 31b6a8de189..3d2dc8ca37d 100644 --- a/weave/legacy/examples/experimental/MonitorPanelPlot.ipynb +++ b/weave_query/examples/experimental/MonitorPanelPlot.ipynb @@ -18,9 +18,9 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels\n", + "import weave_query.panels\n", "weave.use_lazy_execution()\n", - "from weave.legacy.scripts import syndata_mon" + "from weave_query.scripts import syndata_mon" ] }, { @@ -62,7 +62,7 @@ "source": [ "# Fetch the data by the latest alias instead of its version hash.\n", "# TODO: change weave.save to do this automatically\n", - "predictions = weave.legacy.weave.ops.get(\"local-artifact:///predictions:latest/obj\")" + "predictions = weave_query.ops.get(\"local-artifact:///predictions:latest/obj\")" ] }, { @@ -72,7 +72,7 @@ "metadata": {}, "outputs": [], "source": [ - "# from weave.legacy.weave import context_state\n", + "# from weave_query import context_state\n", "# context_state._eager_mode.get()" ] }, @@ -84,29 +84,29 @@ "outputs": [], "source": [ "# Create a dashboard for our data\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", " 'data': predictions,\n", - " 'zoom_range': weave.legacy.weave.ops.make_list(\n", - " a=weave.legacy.weave.ops.date_parse(str(start_date)),\n", - " b=weave.legacy.weave.ops.date_parse(str(end_date))),\n", - " 'data_range': lambda data: weave.legacy.weave.ops.make_list(\n", + " 'zoom_range': weave_query.ops.make_list(\n", + " a=weave_query.ops.date_parse(str(start_date)),\n", + " b=weave_query.ops.date_parse(str(end_date))),\n", + " 'data_range': lambda data: weave_query.ops.make_list(\n", " a=data['timestamp'].min(),\n", " b=data['timestamp'].max()\n", " ),\n", " 'bin_range': lambda zoom_range, data_range: zoom_range.coalesce(data_range),\n", - " 'predictions_query': weave.legacy.weave.panels.Query(\n", + " 'predictions_query': weave_query.panels.Query(\n", " predictions,\n", " conditions=[\n", - " lambda query_input: weave.legacy.weave.panels.QueryCondition(\n", + " lambda query_input: weave_query.panels.QueryCondition(\n", " expression=query_input['model_version'],\n", - " editor=weave.legacy.weave.panels.SelectEditor(\n", + " editor=weave_query.panels.SelectEditor(\n", " choices=query_input['model_version']\n", " )\n", " ),\n", - " lambda query_input: weave.legacy.weave.panels.QueryCondition(\n", + " lambda query_input: weave_query.panels.QueryCondition(\n", " expression=query_input['username'],\n", - " editor=weave.legacy.weave.panels.SelectEditor(\n", + " editor=weave_query.panels.SelectEditor(\n", " choices=query_input['username']\n", " )\n", " ),\n", @@ -114,104 +114,104 @@ " 'predictions': lambda predictions_query: predictions_query.selected()\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions, zoom_range, bin_range: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions, zoom_range, bin_range: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"].bin(\n", - " weave.legacy.weave.ops.timestamp_bins_nice(bin_range, 30)),\n", + " weave_query.ops.timestamp_bins_nice(bin_range, 30)),\n", " label=lambda item: item[\"model_version\"],\n", " y=lambda preds: preds.count(),\n", " groupby_dims=['x', 'label'],\n", " domain_x=zoom_range,\n", " mark=\"bar\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions, zoom_range, bin_range: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions, zoom_range, bin_range: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"].bin(\n", - " weave.legacy.weave.ops.timestamp_bins_nice(bin_range, 100)),\n", + " weave_query.ops.timestamp_bins_nice(bin_range, 100)),\n", " label=lambda item: item[\"username\"],\n", " y=lambda preds: preds.count(),\n", " groupby_dims=['x', 'label'],\n", " domain_x=zoom_range,\n", " mark=\"bar\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions, zoom_range, bin_range: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions, zoom_range, bin_range: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"].bin(\n", - " weave.legacy.weave.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", + " weave_query.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", " y=lambda preds: preds[\"api_cost\"].sum(),\n", " groupby_dims=['x'],\n", " domain_x=zoom_range,\n", " mark=\"line\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions, zoom_range, bin_range: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions, zoom_range, bin_range: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"].bin(\n", - " weave.legacy.weave.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", + " weave_query.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", " y=lambda preds: preds[\"prompt_tokens\"].sum() + preds['completion_tokens'].sum(),\n", " groupby_dims=['x'],\n", " domain_x=zoom_range,\n", " mark=\"line\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions, zoom_range, bin_range: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions, zoom_range, bin_range: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"].bin(\n", - " weave.legacy.weave.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", + " weave_query.ops.timestamp_bins_nice(bin_range, 100))['start'],\n", " y=lambda preds: preds[\"latency\"].avg(),\n", " groupby_dims=['x'],\n", " domain_x=zoom_range,\n", " mark=\"line\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item[\"api_cost\"].bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(predictions['api_cost'], 50)),\n", + " weave_query.ops.numbers_bins_equal(predictions['api_cost'], 50)),\n", " y=lambda preds: preds.count(),\n", " groupby_dims=['x'],\n", " mark=\"bar\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: (item['prompt_tokens'] + item['completion_tokens']).bin(\n", - " weave.legacy.weave.ops.number_bins_fixed(25)),\n", + " weave_query.ops.number_bins_fixed(25)),\n", " y=lambda preds: preds.count(),\n", " groupby_dims=['x'],\n", " mark=\"bar\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda predictions: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda predictions: weave_query.panels.Plot(\n", " predictions,\n", " x=lambda item: item['latency'].bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(predictions['latency'], 50)),\n", + " weave_query.ops.numbers_bins_equal(predictions['latency'], 50)),\n", " y=lambda preds: preds.count(),\n", " groupby_dims=['x'],\n", " mark=\"bar\",\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions: predictions,\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/Mutations.ipynb b/weave_query/examples/experimental/Mutations.ipynb similarity index 94% rename from weave/legacy/examples/experimental/Mutations.ipynb rename to weave_query/examples/experimental/Mutations.ipynb index 9e402df99fb..c38e895517f 100644 --- a/weave/legacy/examples/experimental/Mutations.ipynb +++ b/weave_query/examples/experimental/Mutations.ipynb @@ -28,7 +28,7 @@ "metadata": {}, "outputs": [], "source": [ - "dataset = weave.legacy.weave.ops.get(\"local-artifact:///my-table:latest/obj\")\n", + "dataset = weave_query.ops.get(\"local-artifact:///my-table:latest/obj\")\n", "dataset" ] }, diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb b/weave_query/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb similarity index 98% rename from weave/legacy/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb rename to weave_query/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb index 27ff8359257..cacaa0eeea9 100644 --- a/weave/legacy/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb +++ b/weave_query/examples/experimental/ProductionMonitoring/MonitorPanelPlotGeneric.ipynb @@ -18,7 +18,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.scripts import syndata_mon" + "from weave_query.scripts import syndata_mon" ] }, { @@ -191,7 +191,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.ecosystem import umap" + "from weave_query.ecosystem import umap" ] }, { @@ -370,7 +370,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.panels_py import panel_autoboard\n", + "from weave_query.panels_py import panel_autoboard\n", "\n", "panel_autoboard.auto_panels(predictions)" ] diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb b/weave_query/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb similarity index 98% rename from weave/legacy/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb rename to weave_query/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb index 0a4bd3d3ac2..52dbcb39709 100644 --- a/weave/legacy/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb +++ b/weave_query/examples/experimental/ProductionMonitoring/ProductionMonitoringConceptualOverview.ipynb @@ -173,7 +173,7 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.monitoring import StreamTable\n", + "from weave_query.monitoring import StreamTable\n", "\n", "# Initialize a stream table\n", "# (optionally change the name argument to any string\n", @@ -215,7 +215,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.monitoring import monitor\n", + "from weave_query.monitoring import monitor\n", "import numpy as np\n", "\n", "mon = monitor.init_monitor(f\"{WB_ENTITY}/{WB_PROJECT}/monitor_predict_function\")\n", @@ -274,7 +274,7 @@ "# TODO: not yet working with new API\n", "\n", "# import app_util\n", - "# from weave.legacy.weave.monitoring import monitor\n", + "# from weave_query.monitoring import monitor\n", "# import PIL\n", "# import numpy as np\n", "\n", diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/StreamTable.md b/weave_query/examples/experimental/ProductionMonitoring/StreamTable.md similarity index 98% rename from weave/legacy/examples/experimental/ProductionMonitoring/StreamTable.md rename to weave_query/examples/experimental/ProductionMonitoring/StreamTable.md index b353164c22d..553d3ef28fb 100644 --- a/weave/legacy/examples/experimental/ProductionMonitoring/StreamTable.md +++ b/weave_query/examples/experimental/ProductionMonitoring/StreamTable.md @@ -11,7 +11,7 @@ A Weave StreamTable object enables continuous streaming of data from an applicat The only required argument to create a StreamTable is the name of the StreamTable object. ```python -from weave.legacy.weave.monitoring import StreamTable +from weave_query.monitoring import StreamTable st = StreamTable("my_entity_name/my_project_name/my_table_name") ``` diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/app_util.py b/weave_query/examples/experimental/ProductionMonitoring/app_util.py similarity index 100% rename from weave/legacy/examples/experimental/ProductionMonitoring/app_util.py rename to weave_query/examples/experimental/ProductionMonitoring/app_util.py diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/model_util.py b/weave_query/examples/experimental/ProductionMonitoring/model_util.py similarity index 100% rename from weave/legacy/examples/experimental/ProductionMonitoring/model_util.py rename to weave_query/examples/experimental/ProductionMonitoring/model_util.py diff --git a/weave/legacy/examples/experimental/ProductionMonitoring/stream_table_api.ipynb b/weave_query/examples/experimental/ProductionMonitoring/stream_table_api.ipynb similarity index 99% rename from weave/legacy/examples/experimental/ProductionMonitoring/stream_table_api.ipynb rename to weave_query/examples/experimental/ProductionMonitoring/stream_table_api.ipynb index 6b106621520..4a614c27c37 100644 --- a/weave/legacy/examples/experimental/ProductionMonitoring/stream_table_api.ipynb +++ b/weave_query/examples/experimental/ProductionMonitoring/stream_table_api.ipynb @@ -36,7 +36,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.monitoring import StreamTable" + "from weave_query.monitoring import StreamTable" ] }, { diff --git a/weave/legacy/examples/experimental/Table Summary Panel.ipynb b/weave_query/examples/experimental/Table Summary Panel.ipynb similarity index 79% rename from weave/legacy/examples/experimental/Table Summary Panel.ipynb rename to weave_query/examples/experimental/Table Summary Panel.ipynb index 75897f7f465..a536e2c69f8 100644 --- a/weave/legacy/examples/experimental/Table Summary Panel.ipynb +++ b/weave_query/examples/experimental/Table Summary Panel.ipynb @@ -11,7 +11,7 @@ "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", "import xgboost\n", - "from weave.legacy.weave.ecosystem import sklearn" + "from weave_query.ecosystem import sklearn" ] }, { @@ -22,7 +22,7 @@ "outputs": [], "source": [ "dataset = weave.use(sklearn.ca_housing_dataset(1))\n", - "dataset_arrow = weave.legacy.weave.ops.dataframe_to_arrow(dataset)" + "dataset_arrow = weave_query.ops.dataframe_to_arrow(dataset)" ] }, { @@ -35,16 +35,16 @@ "import typing\n", "\n", "@weave.op()\n", - "def table_summary(table: typing.Any) -> list[weave.legacy.weave.panels.Panel]:\n", + "def table_summary(table: typing.Any) -> list[weave_query.panels.Panel]:\n", " if not table:\n", " # TODO: type\n", " return\n", " col_names = list(table[0].keys())\n", - " with weave.legacy.weave.context_state.lazy_execution():\n", - " cols = {col_name: weave.legacy.weave.ops.legacy.ops_arrow.dict.pick(table, col_name) for col_name in col_names}\n", + " with weave_query.context_state.lazy_execution():\n", + " cols = {col_name: weave_query.ops.legacy.ops_arrow.dict.pick(table, col_name) for col_name in col_names}\n", " panels = []\n", " for col_name, col_values in cols.items():\n", - " panels.append(weave.legacy.weave.panels.LabeledItem(item=col_values, label=col_name))\n", + " panels.append(weave_query.panels.LabeledItem(item=col_values, label=col_name))\n", " return panels" ] }, diff --git a/weave/legacy/examples/experimental/app/Embeddings.ipynb b/weave_query/examples/experimental/app/Embeddings.ipynb similarity index 82% rename from weave/legacy/examples/experimental/app/Embeddings.ipynb rename to weave_query/examples/experimental/app/Embeddings.ipynb index 221d85d77b9..bd644828a1d 100644 --- a/weave/legacy/examples/experimental/app/Embeddings.ipynb +++ b/weave_query/examples/experimental/app/Embeddings.ipynb @@ -20,9 +20,9 @@ "source": [ "import pandas\n", "import weave\n", - "from weave.legacy.weave.ecosystem import openai\n", - "from weave.legacy.weave.ecosystem import umap\n", - "from weave.legacy.weave.ecosystem import hdbscan" + "from weave_query.ecosystem import openai\n", + "from weave_query.ecosystem import umap\n", + "from weave_query.ecosystem import hdbscan" ] }, { @@ -37,8 +37,8 @@ "\n", "#raw_data['request_timestamp'] = pandas.to_datetime(raw_data['request_timestamp'], unit='ms', utc=True)\n", "\n", - "data = weave.save(weave.legacy.weave.ops.dataframe_to_arrow(raw_data), 'data')\n", - "# from weave.legacy.weave.panels_py import panel_autoboard\n", + "data = weave.save(weave_query.ops.dataframe_to_arrow(raw_data), 'data')\n", + "# from weave_query.panels_py import panel_autoboard\n", "# panel_autoboard.auto_panels(data)\n", "#data" ] @@ -60,7 +60,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " 'data': data,\n", " 'limit': 1005,\n", @@ -80,19 +80,19 @@ " 'projection': lambda embeddings: umap.umap_project(embeddings, {})\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda limited_data, projection, clusters: weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.BoardPanel(\n", + " lambda limited_data, projection, clusters: weave_query.panels.Plot(\n", " limited_data,\n", " x=lambda row, index: projection[index][0],\n", " y=lambda row, index: projection[index][1],\n", " label=lambda row, index: clusters[index],\n", " ),\n", " id='projection_plot',\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda projection_plot: projection_plot.selected_data(),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/app/RunChain.ipynb b/weave_query/examples/experimental/app/RunChain.ipynb similarity index 81% rename from weave/legacy/examples/experimental/app/RunChain.ipynb rename to weave_query/examples/experimental/app/RunChain.ipynb index 02b02a89b63..07d27435ce4 100644 --- a/weave/legacy/examples/experimental/app/RunChain.ipynb +++ b/weave_query/examples/experimental/app/RunChain.ipynb @@ -18,7 +18,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.ecosystem import wandb" ] }, { @@ -97,55 +97,55 @@ "# Display plots from a RunChain. You need to do some resizing to seem them all currently.\n", "\n", "def plot_metric(run, metric_name):\n", - " return weave.legacy.weave.panels.Plot(\n", + " return weave_query.panels.Plot(\n", " run.history(),\n", " series=[\n", " # Use two plot series, one for the avg line, and one for\n", " # min/max area. We could reduce duplication here a bit more\n", " # by updating the Plot API to allow common features of series\n", " # to be factored out.\n", - " weave.legacy.weave.panels.Series(\n", + " weave_query.panels.Series(\n", " run.history(),\n", " select_functions={\n", " 'x': lambda row, index: index.bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(\n", - " weave.legacy.weave.ops.make_list(a=0, b=run.history().count()), 250))[\"start\"],\n", + " weave_query.ops.numbers_bins_equal(\n", + " weave_query.ops.make_list(a=0, b=run.history().count()), 250))[\"start\"],\n", " 'y': lambda row: row[metric_name].avg()\n", " },\n", " groupby_dims=['x'],\n", - " constants=weave.legacy.weave.panels.PlotConstants(\n", + " constants=weave_query.panels.PlotConstants(\n", " mark='line'\n", " )\n", " ),\n", - " weave.legacy.weave.panels.Series(\n", + " weave_query.panels.Series(\n", " run.history(),\n", " select_functions={\n", " 'x': lambda row, index: index.bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(\n", - " weave.legacy.weave.ops.make_list(a=0, b=run.history().count()), 250))[\"start\"],\n", + " weave_query.ops.numbers_bins_equal(\n", + " weave_query.ops.make_list(a=0, b=run.history().count()), 250))[\"start\"],\n", " 'y': lambda row: row[metric_name].min(),\n", " 'y2': lambda row: row[metric_name].max(),\n", " },\n", " groupby_dims=['x'],\n", - " constants=weave.legacy.weave.panels.PlotConstants(\n", + " constants=weave_query.panels.PlotConstants(\n", " mark='area'\n", " )\n", " )\n", " ],\n", " )\n", "\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", " 'run_chain': chain,\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda run_chain: weave.legacy.weave.panels.Group(\n", + " weave_query.panels.BoardPanel(\n", + " lambda run_chain: weave_query.panels.Group(\n", " layoutMode='flow',\n", " #gridConfig=bank.flow_nxn(2, 3),\n", " items={k: plot_metric(run_chain, k) for k in ['metric' + str(i) for i in range(10)]}\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " )\n", " ]\n", ")\n", diff --git a/weave/legacy/examples/experimental/app/beautiful_runs.ipynb b/weave_query/examples/experimental/app/beautiful_runs.ipynb similarity index 84% rename from weave/legacy/examples/experimental/app/beautiful_runs.ipynb rename to weave_query/examples/experimental/app/beautiful_runs.ipynb index d1b168c35e2..9b4ee96528c 100644 --- a/weave/legacy/examples/experimental/app/beautiful_runs.ipynb +++ b/weave_query/examples/experimental/app/beautiful_runs.ipynb @@ -29,7 +29,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.scripts import syndata" + "from weave_query.scripts import syndata" ] }, { @@ -57,57 +57,57 @@ "source": [ "\n", "def plot_for_metric(metric_name):\n", - " return weave.legacy.weave.panels.BoardPanel(\n", - " lambda runs, groupby, zoom_domain_x, bin_domain_x: weave.legacy.weave.panels.Plot(\n", + " return weave_query.panels.BoardPanel(\n", + " lambda runs, groupby, zoom_domain_x, bin_domain_x: weave_query.panels.Plot(\n", " runs,\n", " series=[\n", " # Use two plot series, one for the avg line, and one for\n", " # min/max area. We could reduce duplication here a bit more\n", " # by updating the Plot API to allow common features of series\n", " # to be factored out.\n", - " weave.legacy.weave.panels.Series(\n", + " weave_query.panels.Series(\n", " runs,\n", " select_functions={\n", " 'x': lambda row: row[\"history.step\"].bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(bin_domain_x, 250))[\"start\"],\n", + " weave_query.ops.numbers_bins_equal(bin_domain_x, 250))[\"start\"],\n", " 'label': lambda row: row[groupby],\n", " 'y': lambda row: row[\"history\"][metric_name].avg()\n", " },\n", " groupby_dims=['x', 'label'],\n", - " constants=weave.legacy.weave.panels.PlotConstants(\n", + " constants=weave_query.panels.PlotConstants(\n", " mark='line'\n", " )\n", " ),\n", - " weave.legacy.weave.panels.Series(\n", + " weave_query.panels.Series(\n", " runs,\n", " select_functions={\n", " 'x': lambda row: row[\"history.step\"].bin(\n", - " weave.legacy.weave.ops.numbers_bins_equal(bin_domain_x, 250))[\"start\"],\n", + " weave_query.ops.numbers_bins_equal(bin_domain_x, 250))[\"start\"],\n", " 'label': lambda row: row[groupby],\n", " 'y': lambda row: row[\"history\"][metric_name].min(),\n", " 'y2': lambda row: row[\"history\"][metric_name].max(),\n", " },\n", " groupby_dims=['x', 'label'],\n", - " constants=weave.legacy.weave.panels.PlotConstants(\n", + " constants=weave_query.panels.PlotConstants(\n", " mark='area'\n", " )\n", " )\n", " ],\n", " domain_x=zoom_domain_x,\n", " ),\n", - " #layout=weave.legacy.weave.panels.BoardPanelLayout(x=x, y=0, w=12, h=6)\n", + " #layout=weave_query.panels.BoardPanelLayout(x=x, y=0, w=12, h=6)\n", " )\n", "\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", " 'runs': unnested_runs,\n", " 'groupby': 'config.a',\n", " # This holds the zoom boundaries, and is two-way synchronized with the plot zooms\n", " 'zoom_domain_x': None,\n", " # This is the extent of the step field in our data (the minimum and maxium values)\n", - " 'step_domain': lambda runs: weave.legacy.weave.ops.make_list(\n", - " a=weave.legacy.weave.ops.numbers_min(runs['history']['step']),\n", - " b=weave.legacy.weave.ops.numbers_max(runs['history']['step'])),\n", + " 'step_domain': lambda runs: weave_query.ops.make_list(\n", + " a=weave_query.ops.numbers_min(runs['history']['step']),\n", + " b=weave_query.ops.numbers_max(runs['history']['step'])),\n", " # The \"domain\" used for binning, which is the zoom range if its non-null, otherwise\n", " # the step_extent\n", " 'bin_domain_x': lambda zoom_domain_x, step_domain: zoom_domain_x.coalesce(step_domain)\n", diff --git a/weave/legacy/examples/experimental/app/scenario_compare.ipynb b/weave_query/examples/experimental/app/scenario_compare.ipynb similarity index 74% rename from weave/legacy/examples/experimental/app/scenario_compare.ipynb rename to weave_query/examples/experimental/app/scenario_compare.ipynb index 338ef5ae813..5a18001b447 100644 --- a/weave/legacy/examples/experimental/app/scenario_compare.ipynb +++ b/weave_query/examples/experimental/app/scenario_compare.ipynb @@ -11,7 +11,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem import scenario" + "from weave_query.ecosystem import scenario" ] }, { @@ -95,11 +95,11 @@ "source": [ "# Ugly. We need to compute the Weave type right now.\n", "# TODO: Fix\n", - "from weave.legacy.weave import infer_types\n", + "from weave_query import infer_types\n", "run_type = weave.types.List(infer_types.python_type_to_type(scenario.ScenarioResult))\n", "\n", "import time\n", - "runs = weave.legacy.weave.ops.objects(run_type, 'latest', int(time.time()))" + "runs = weave_query.ops.objects(run_type, 'latest', int(time.time()))" ] }, { @@ -109,39 +109,39 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " preferHorizontal=True,\n", " items={\n", - " \"sidebar\": weave.legacy.weave.panels.Group(\n", + " \"sidebar\": weave_query.panels.Group(\n", " style=\"width: 200px; padding: 16px;\",\n", " items={\n", - " \"baseline\": weave.legacy.weave.panels.ObjectPicker(runs, label='baseline'),\n", - " \"candidate\": weave.legacy.weave.panels.ObjectPicker(runs, label='candidate')\n", + " \"baseline\": weave_query.panels.ObjectPicker(runs, label='baseline'),\n", + " \"candidate\": weave_query.panels.ObjectPicker(runs, label='candidate')\n", " }\n", " ),\n", - " \"main\": lambda sidebar: weave.legacy.weave.panels.Group(\n", + " \"main\": lambda sidebar: weave_query.panels.Group(\n", " items={\n", - " \"tables\": weave.legacy.weave.panels.Group(\n", + " \"tables\": weave_query.panels.Group(\n", " style=\"height: 300px;\",\n", " preferHorizontal=True,\n", " equalSize=True,\n", " items={\n", - " \"baseline_table\": weave.legacy.weave.panels.LabeledItem(\n", + " \"baseline_table\": weave_query.panels.LabeledItem(\n", " label=\"Baseline Table\",\n", - " item=weave.legacy.weave.ops.execute(sidebar.config.items['baseline'].config.choice).get()\n", + " item=weave_query.ops.execute(sidebar.config.items['baseline'].config.choice).get()\n", " ),\n", - " \"candidate_table\": weave.legacy.weave.panels.LabeledItem(\n", + " \"candidate_table\": weave_query.panels.LabeledItem(\n", " label=\"Candidate Table\",\n", - " item=weave.legacy.weave.ops.execute(sidebar.config.items['candidate'].config.choice).get()\n", + " item=weave_query.ops.execute(sidebar.config.items['candidate'].config.choice).get()\n", " )\n", " }),\n", " \"plots\": \n", - " weave.legacy.weave.panels.LabeledItem(\n", + " weave_query.panels.LabeledItem(\n", " label='Scenario plots',\n", " item=scenario.MetricsBankPanel(\n", - " weave.legacy.weave.ops.dict_(\n", - " baseline=weave.legacy.weave.ops.execute(sidebar.config.items['baseline'].config.choice).get(),\n", - " candidate=weave.legacy.weave.ops.execute(sidebar.config.items['candidate'].config.choice).get()\n", + " weave_query.ops.dict_(\n", + " baseline=weave_query.ops.execute(sidebar.config.items['baseline'].config.choice).get(),\n", + " candidate=weave_query.ops.execute(sidebar.config.items['candidate'].config.choice).get()\n", " ))\n", " )\n", "\n", diff --git a/weave/legacy/examples/experimental/bert_viz.ipynb b/weave_query/examples/experimental/bert_viz.ipynb similarity index 96% rename from weave/legacy/examples/experimental/bert_viz.ipynb rename to weave_query/examples/experimental/bert_viz.ipynb index 869a4961b13..f4d99dbb667 100644 --- a/weave/legacy/examples/experimental/bert_viz.ipynb +++ b/weave_query/examples/experimental/bert_viz.ipynb @@ -33,7 +33,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem.huggingface import huggingface\n", + "from weave_query.ecosystem.huggingface import huggingface\n", "\n", "# Call a hugging face model\n", "hf_model = huggingface().model('gpt2')\n", diff --git a/weave/legacy/examples/experimental/composite_histograms.ipynb b/weave_query/examples/experimental/composite_histograms.ipynb similarity index 96% rename from weave/legacy/examples/experimental/composite_histograms.ipynb rename to weave_query/examples/experimental/composite_histograms.ipynb index e74e0c47130..819641f73bd 100644 --- a/weave/legacy/examples/experimental/composite_histograms.ipynb +++ b/weave_query/examples/experimental/composite_histograms.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import lens" + "from weave_query.ecosystem import lens" ] }, { @@ -119,7 +119,7 @@ " )\n", " )\n", "\n", - "runs = weave.legacy.weave.ops.project('stacey', 'deep-drive').runs()\n", + "runs = weave_query.ops.project('stacey', 'deep-drive').runs()\n", "run_accuracy_barchart(runs)" ] } diff --git a/weave/legacy/examples/experimental/dir_browsing.ipynb b/weave_query/examples/experimental/dir_browsing.ipynb similarity index 83% rename from weave/legacy/examples/experimental/dir_browsing.ipynb rename to weave_query/examples/experimental/dir_browsing.ipynb index 2e5d0e3d569..c7cc55a574c 100644 --- a/weave/legacy/examples/experimental/dir_browsing.ipynb +++ b/weave_query/examples/experimental/dir_browsing.ipynb @@ -10,7 +10,7 @@ "import os\n", "import weave\n", "\n", - "#weave.legacy.weave.ops.local_path(os.path.abspath('../weave/testdata'))" + "#weave_query.ops.local_path(os.path.abspath('../weave/testdata'))" ] } ], diff --git a/weave/legacy/examples/experimental/ecosystem.ipynb b/weave_query/examples/experimental/ecosystem.ipynb similarity index 86% rename from weave/legacy/examples/experimental/ecosystem.ipynb rename to weave_query/examples/experimental/ecosystem.ipynb index 2adc1728b23..aedc0046d16 100644 --- a/weave/legacy/examples/experimental/ecosystem.ipynb +++ b/weave_query/examples/experimental/ecosystem.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import ecosystem\n", + "from weave_query.ecosystem import ecosystem\n", "ecosystem()" ] } diff --git a/weave/legacy/examples/experimental/huggingface_datasets.ipynb b/weave_query/examples/experimental/huggingface_datasets.ipynb similarity index 96% rename from weave/legacy/examples/experimental/huggingface_datasets.ipynb rename to weave_query/examples/experimental/huggingface_datasets.ipynb index 8f8074494b8..2d0e60a4c69 100644 --- a/weave/legacy/examples/experimental/huggingface_datasets.ipynb +++ b/weave_query/examples/experimental/huggingface_datasets.ipynb @@ -25,7 +25,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem import huggingface as hf" + "from weave_query.ecosystem import huggingface as hf" ] }, { diff --git a/weave/legacy/examples/experimental/huggingface_models.ipynb b/weave_query/examples/experimental/huggingface_models.ipynb similarity index 95% rename from weave/legacy/examples/experimental/huggingface_models.ipynb rename to weave_query/examples/experimental/huggingface_models.ipynb index c28d270f5dd..904f16a4ae5 100644 --- a/weave/legacy/examples/experimental/huggingface_models.ipynb +++ b/weave_query/examples/experimental/huggingface_models.ipynb @@ -10,7 +10,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem.huggingface import huggingface as hf" + "from weave_query.ecosystem.huggingface import huggingface as hf" ] }, { @@ -102,7 +102,7 @@ "# Text classification models can be explained with shap\n", "\n", "# TODO: we wan't chain shap_explain in Python right now. But we can in JS. Fix!\n", - "from weave.legacy.weave.ecosystem import shap\n", + "from weave_query.ecosystem import shap\n", "shap.shap_explain(classification_output)" ] } diff --git a/weave/legacy/examples/experimental/image_gen_craiyon.ipynb b/weave_query/examples/experimental/image_gen_craiyon.ipynb similarity index 90% rename from weave/legacy/examples/experimental/image_gen_craiyon.ipynb rename to weave_query/examples/experimental/image_gen_craiyon.ipynb index 36eab9de975..8e1b0bb985c 100644 --- a/weave/legacy/examples/experimental/image_gen_craiyon.ipynb +++ b/weave_query/examples/experimental/image_gen_craiyon.ipynb @@ -18,7 +18,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.ecosystem import craiyon\n", + "from weave_query.ecosystem import craiyon\n", "craiyon.generate('hello')" ] }, @@ -30,7 +30,7 @@ "outputs": [], "source": [ "prompts = ['cats', 'dogs', 'catdogs']\n", - "panel = weave.legacy.weave.panels.Table(prompts,\n", + "panel = weave_query.panels.Table(prompts,\n", " columns=[\n", " lambda prompt: prompt,\n", " lambda prompt: craiyon.generate(prompt)\n", diff --git a/weave/legacy/examples/experimental/image_gen_ops.ipynb b/weave_query/examples/experimental/image_gen_ops.ipynb similarity index 93% rename from weave/legacy/examples/experimental/image_gen_ops.ipynb rename to weave_query/examples/experimental/image_gen_ops.ipynb index 5f3078c5fd2..b4cb378f396 100644 --- a/weave/legacy/examples/experimental/image_gen_ops.ipynb +++ b/weave_query/examples/experimental/image_gen_ops.ipynb @@ -13,7 +13,7 @@ "import numpy as np\n", "import matplotlib.pyplot as plt\n", "import random\n", - "from weave.legacy.weave import ops\n", + "from weave_query import ops\n", "\n", "def plt_image():\n", " \"\"\"Return current matplotlib figure as PIL Image\"\"\"\n", @@ -63,8 +63,8 @@ "outputs": [], "source": [ "import json\n", - "from weave.legacy.weave.ops_domain import wb_domain_types\n", - "from weave import gql_op_plugin\n", + "from weave_query.ops_domain import wb_domain_types\n", + "from weave_query import gql_op_plugin\n", "import wandb\n", "\n", "\n", @@ -97,7 +97,7 @@ "metadata": {}, "outputs": [], "source": [ - "runs = weave.legacy.weave.ops.project('shawn', 'fasion-sweep').runs()\n", + "runs = weave_query.ops.project('shawn', 'fasion-sweep').runs()\n", "run_accuracy_barchart(runs)" ] } diff --git a/weave/legacy/examples/experimental/layout_panels.ipynb b/weave_query/examples/experimental/layout_panels.ipynb similarity index 99% rename from weave/legacy/examples/experimental/layout_panels.ipynb rename to weave_query/examples/experimental/layout_panels.ipynb index c7bd996af26..af96a0d374a 100644 --- a/weave/legacy/examples/experimental/layout_panels.ipynb +++ b/weave_query/examples/experimental/layout_panels.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import panels" + "from weave_query import panels" ] }, { diff --git a/weave/legacy/examples/experimental/llm_monitor_helper.ipynb b/weave_query/examples/experimental/llm_monitor_helper.ipynb similarity index 99% rename from weave/legacy/examples/experimental/llm_monitor_helper.ipynb rename to weave_query/examples/experimental/llm_monitor_helper.ipynb index 48e92a18e90..b9b6104f890 100644 --- a/weave/legacy/examples/experimental/llm_monitor_helper.ipynb +++ b/weave_query/examples/experimental/llm_monitor_helper.ipynb @@ -155,7 +155,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.monitoring import StreamTable\n", + "from weave_query.monitoring import StreamTable\n", "st = StreamTable(f\"{ENTITY}/{PROJECT}/{STREAM}\")" ] }, diff --git a/weave/legacy/examples/experimental/mnist_train.ipynb b/weave_query/examples/experimental/mnist_train.ipynb similarity index 96% rename from weave/legacy/examples/experimental/mnist_train.ipynb rename to weave_query/examples/experimental/mnist_train.ipynb index 664459dcae5..6110d24d1a1 100644 --- a/weave/legacy/examples/experimental/mnist_train.ipynb +++ b/weave_query/examples/experimental/mnist_train.ipynb @@ -10,7 +10,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem import torchvision, torch_mnist_model_example" + "from weave_query.ecosystem import torchvision, torch_mnist_model_example" ] }, { diff --git a/weave/legacy/examples/experimental/object_version_compare.ipynb b/weave_query/examples/experimental/object_version_compare.ipynb similarity index 94% rename from weave/legacy/examples/experimental/object_version_compare.ipynb rename to weave_query/examples/experimental/object_version_compare.ipynb index 216aba6973b..f0b78d464fd 100644 --- a/weave/legacy/examples/experimental/object_version_compare.ipynb +++ b/weave_query/examples/experimental/object_version_compare.ipynb @@ -54,7 +54,7 @@ "metadata": {}, "outputs": [], "source": [ - "plot = weave.legacy.weave.panels.Plot(points,\n", + "plot = weave_query.panels.Plot(points,\n", " x=lambda row: row['x'],\n", " y=lambda row: row['y'])\n", "plot\n", @@ -81,7 +81,7 @@ "metadata": {}, "outputs": [], "source": [ - "plot = weave.legacy.weave.panels.Plot(weave.legacy.weave.ops.compare_versions(points))\n", + "plot = weave_query.panels.Plot(weave_query.ops.compare_versions(points))\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['version'])\n", diff --git a/weave/legacy/examples/experimental/old_openai_monitoring.ipynb b/weave_query/examples/experimental/old_openai_monitoring.ipynb similarity index 97% rename from weave/legacy/examples/experimental/old_openai_monitoring.ipynb rename to weave_query/examples/experimental/old_openai_monitoring.ipynb index 038a1932e79..6a2d5ca3802 100644 --- a/weave/legacy/examples/experimental/old_openai_monitoring.ipynb +++ b/weave_query/examples/experimental/old_openai_monitoring.ipynb @@ -17,7 +17,7 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.monitoring import openai, init_monitor\n", + "from weave_query.monitoring import openai, init_monitor\n", "\n", "OPENAI_MODEL = 'gpt-3.5-turbo'" ] @@ -99,7 +99,7 @@ "source": [ "# Monitor streaming requests\n", "# TODO: we don't get token counts here yet.\n", - "from weave.legacy.weave.monitoring.openai import message_from_stream\n", + "from weave_query.monitoring.openai import message_from_stream\n", "r = openai.ChatCompletion.create(model=OPENAI_MODEL, messages=[\n", " {\"role\": \"system\", \"content\": \"Your are a robot and only speak in robot, like beep bloop bop.\"},\n", " {\"role\": \"user\", \"content\": f\"Tell me a 50 word story.\"},\n", @@ -127,7 +127,7 @@ "outputs": [], "source": [ "# Render board inline\n", - "# from weave.legacy.weave.panels_py import panel_llm_monitor\n", + "# from weave_query.panels_py import panel_llm_monitor\n", "# board = panel_llm_monitor.board.raw_resolve_fn(m.rows())\n", "# board" ] diff --git a/weave/legacy/examples/experimental/openai_monitoring.ipynb b/weave_query/examples/experimental/openai_monitoring.ipynb similarity index 93% rename from weave/legacy/examples/experimental/openai_monitoring.ipynb rename to weave_query/examples/experimental/openai_monitoring.ipynb index 686b881dc0d..4199e3d7e30 100644 --- a/weave/legacy/examples/experimental/openai_monitoring.ipynb +++ b/weave_query/examples/experimental/openai_monitoring.ipynb @@ -27,10 +27,10 @@ "source": [ "import openai\n", "import weave\n", - "from weave.legacy.weave.monitoring.openai import patch, unpatch\n", + "from weave_query.monitoring.openai import patch, unpatch\n", "\n", - "weave.legacy.weave.monitoring.openai.patch()\n", - "# weave.legacy.weave.monitoring.openai.unpatch()\n", + "weave_query.monitoring.openai.patch()\n", + "# weave_query.monitoring.openai.unpatch()\n", "\n" ] }, @@ -48,9 +48,9 @@ "metadata": {}, "outputs": [], "source": [ - "# from weave.legacy.weave.monitoring.openai import ReassembleStream, LogToStreamTable\n", + "# from weave_query.monitoring.openai import ReassembleStream, LogToStreamTable\n", "\n", - "# weave.legacy.weave.monitoring.openai.patch(\n", + "# weave_query.monitoring.openai.patch(\n", "# callbacks=[LogToStreamTable.from_stream_name(\"stream\", \"project\", \"entity\")]\n", "# )\n" ] diff --git a/weave/legacy/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb b/weave_query/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb similarity index 96% rename from weave/legacy/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb rename to weave_query/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb index 2ee6b8f6d03..f653846de52 100644 --- a/weave/legacy/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb +++ b/weave_query/examples/experimental/prompts_dev/generate_synth_mon_board.ipynb @@ -34,8 +34,8 @@ "import uuid\n", "from datetime import timedelta\n", "import weave\n", - "from weave.legacy.weave import ops_arrow\n", - "from weave.legacy.weave.monitoring import monitor\n", + "from weave_query import ops_arrow\n", + "from weave_query.monitoring import monitor\n", "from weave.syndata_mon import random_predictions" ] }, @@ -56,7 +56,7 @@ "source": [ "preds = random_predictions(100)\n", "\n", - "# Convert synthetic data into the format used by the weave.legacy.weave.monitoring.openai integration\n", + "# Convert synthetic data into the format used by the weave_query.monitoring.openai integration\n", "\n", "# convert model_version in the synthetic data to an openai model version\n", "# this makes it so that there's a new API key that has appeared in our logs recently, and that key\n", @@ -162,7 +162,7 @@ "outputs": [], "source": [ "# Use the llm monitoring template to visualize the data\n", - "from weave.legacy.weave.panels_py import panel_llm_monitor\n", + "from weave_query.panels_py import panel_llm_monitor\n", "board = panel_llm_monitor.board.raw_resolve_fn(oai_data)\n", "board" ] diff --git a/weave/legacy/examples/experimental/prompts_dev/synthetic_openai_data.ipynb b/weave_query/examples/experimental/prompts_dev/synthetic_openai_data.ipynb similarity index 96% rename from weave/legacy/examples/experimental/prompts_dev/synthetic_openai_data.ipynb rename to weave_query/examples/experimental/prompts_dev/synthetic_openai_data.ipynb index 6baaae82cfb..be116be6d49 100644 --- a/weave/legacy/examples/experimental/prompts_dev/synthetic_openai_data.ipynb +++ b/weave_query/examples/experimental/prompts_dev/synthetic_openai_data.ipynb @@ -31,8 +31,8 @@ "from datetime import timedelta\n", "import weave\n", "\n", - "from weave.legacy.weave import ops_arrow\n", - "from weave.legacy.weave.monitoring import monitor, StreamTable" + "from weave_query import ops_arrow\n", + "from weave_query.monitoring import monitor, StreamTable" ] }, { @@ -66,7 +66,7 @@ "source": [ "preds = random_predictions(10)\n", "\n", - "# Convert synthetic data into the format used by the weave.legacy.weave.monitoring.openai integration\n", + "# Convert synthetic data into the format used by the weave_query.monitoring.openai integration\n", "\n", "# convert model_version in the synthetic data to an openai model version\n", "# this makes it so that there's a new API key that has appeared in our logs recently, and that key\n", diff --git a/weave/legacy/examples/experimental/skip_test/00 Tutorial - Data versioning.ipynb b/weave_query/examples/experimental/skip_test/00 Tutorial - Data versioning.ipynb similarity index 100% rename from weave/legacy/examples/experimental/skip_test/00 Tutorial - Data versioning.ipynb rename to weave_query/examples/experimental/skip_test/00 Tutorial - Data versioning.ipynb diff --git a/weave/legacy/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb b/weave_query/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb similarity index 96% rename from weave/legacy/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb rename to weave_query/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb index e7355e75f3f..34f4c35f014 100644 --- a/weave/legacy/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb +++ b/weave_query/examples/experimental/skip_test/04 Tutorial - Publishing Data and Ops.ipynb @@ -86,8 +86,8 @@ "# this cell can be run from a full kernel restart and it should work\n", "import weave\n", "import shutil\n", - "from weave.legacy.weave.artifacts_local import LOCAL_ARTIFACT_DIR\n", - "from weave import uris\n", + "from weave_query.artifacts_local import LOCAL_ARTIFACT_DIR\n", + "from weave_query import uris\n", "\n", "try:\n", " shutil.rmtree(LOCAL_ARTIFACT_DIR)\n", diff --git a/weave/legacy/examples/experimental/skip_test/Composable Python panels.ipynb b/weave_query/examples/experimental/skip_test/Composable Python panels.ipynb similarity index 82% rename from weave/legacy/examples/experimental/skip_test/Composable Python panels.ipynb rename to weave_query/examples/experimental/skip_test/Composable Python panels.ipynb index 2a3d08c47be..b4e6b643b56 100644 --- a/weave/legacy/examples/experimental/skip_test/Composable Python panels.ipynb +++ b/weave_query/examples/experimental/skip_test/Composable Python panels.ipynb @@ -25,7 +25,7 @@ "metadata": {}, "outputs": [], "source": [ - "container = weave.legacy.weave.panels.Container()\n", + "container = weave_query.panels.Container()\n", "\n", "# A couple variables to hold our slider values (this is unnecessary boilerplate that I can\n", "# get rid of)\n", @@ -34,13 +34,13 @@ "\n", "# Create two sliders in the Container\n", "container.config.add_panel(\n", - " weave.legacy.weave.panels.Slider(input_node=var_a, config=weave.legacy.weave.panels.SliderConfig(0, 100, 0.1)))\n", + " weave_query.panels.Slider(input_node=var_a, config=weave_query.panels.SliderConfig(0, 100, 0.1)))\n", "container.config.add_panel(\n", - " weave.legacy.weave.panels.Slider(input_node=var_b, config=weave.legacy.weave.panels.SliderConfig(-1000, 1000, 1)))\n", + " weave_query.panels.Slider(input_node=var_b, config=weave_query.panels.SliderConfig(-1000, 1000, 1)))\n", "\n", "# Use a Number panel to show the results of adding the two sliders together\n", "container.config.add_panel(\n", - " weave.legacy.weave.panels.Number(input_node=var_a + var_b)\n", + " weave_query.panels.Number(input_node=var_a + var_b)\n", ")" ] }, diff --git a/weave/legacy/examples/experimental/skip_test/Confusion Matrix.ipynb b/weave_query/examples/experimental/skip_test/Confusion Matrix.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Confusion Matrix.ipynb rename to weave_query/examples/experimental/skip_test/Confusion Matrix.ipynb index 2aabd645afa..5fd2a2d9e0b 100644 --- a/weave/legacy/examples/experimental/skip_test/Confusion Matrix.ipynb +++ b/weave_query/examples/experimental/skip_test/Confusion Matrix.ipynb @@ -12,8 +12,8 @@ "import itertools\n", "from PIL import Image\n", "import weave\n", - "from weave.legacy.weave import storage\n", - "from weave.legacy.weave import weave_internal\n", + "from weave_query import storage\n", + "from weave_query import weave_internal\n", "#weave.use_frontend_devmode()" ] }, @@ -77,7 +77,7 @@ "metadata": {}, "outputs": [], "source": [ - "plot = weave.legacy.weave.panels.Plot(ims)\n", + "plot = weave_query.panels.Plot(ims)\n", "plot.set_x(lambda row: row['rotate'])\n", "plot.set_y(lambda row: row['x'])\n", "plot.set_tooltip(lambda row: row['image'])\n", @@ -101,11 +101,11 @@ "source": [ "# This is one way to build a multi-confusion matrix.\n", "\n", - "facet = weave.legacy.weave.panels.Facet(\n", + "facet = weave_query.panels.Facet(\n", " input_node=ims,\n", " x=lambda im: im['rotate'],\n", " y=lambda im: im['shear'],\n", - " select=lambda cell: weave.legacy.weave.panels.Plot(\n", + " select=lambda cell: weave_query.panels.Plot(\n", " input_node=cell.groupby(lambda row: row['y']),\n", " x=lambda group: group.count(),\n", " y=lambda group: group.key(),\n", @@ -128,12 +128,12 @@ "outputs": [], "source": [ "# @weave.op()\n", - "# def confusion_matrix(inp: typing.Any, guess_col: str, truth_col: str, compare_col: str) -> weave.legacy.weave.panels.Facet:\n", - "# return weave.legacy.weave.panels.Facet(\n", + "# def confusion_matrix(inp: typing.Any, guess_col: str, truth_col: str, compare_col: str) -> weave_query.panels.Facet:\n", + "# return weave_query.panels.Facet(\n", "# input_node=inp,\n", "# x=lambda i: i[guess_col],\n", "# y=lambda i: i[truth_col],\n", - "# select=lambda cell: weave.legacy.weave.panels.Plot(\n", + "# select=lambda cell: weave_query.panels.Plot(\n", "# input_node=cell.groupby(\n", "# weave.define_fn({'row': cell.type.object_type}, lambda row: row[compare_col])),\n", "# x=lambda group: group.count(),\n", @@ -148,8 +148,8 @@ "# An example of a Panel returning op. This (sort of) works but there are lots of \n", "\n", "@weave.op()\n", - "def confusion_matrix(inp: typing.Any, guess_col: str, truth_col: str, compare_col: str) -> weave.legacy.weave.panels.Facet:\n", - " return weave.legacy.weave.panels.Facet(\n", + "def confusion_matrix(inp: typing.Any, guess_col: str, truth_col: str, compare_col: str) -> weave_query.panels.Facet:\n", + " return weave_query.panels.Facet(\n", " input_node=inp,\n", " x=lambda i: i[guess_col],\n", " y=lambda i: i[truth_col],\n", @@ -180,11 +180,11 @@ "# weave.show(facet)\n", "\n", "# # Not working yet, but playing with removing lambdas\n", - "# facet = weave.legacy.weave.panels.Facet(\n", + "# facet = weave_query.panels.Facet(\n", "# input_node=ims,\n", "# x=ims['rotate'],\n", "# y=ims['shear'],\n", - "# select=lambda cell: weave.legacy.weave.panels.Plot(\n", + "# select=lambda cell: weave_query.panels.Plot(\n", "# input_node=cell.groupby(cell.row['y']),\n", "# x=lambda group: group.count(),\n", "# y=lambda group: group.key(),\n", @@ -196,7 +196,7 @@ "# )\n", "\n", "# # Maybe another cool thing\n", - "# facet = weave.legacy.weave.panels.Facet(\n", + "# facet = weave_query.panels.Facet(\n", "# input_node=ims,\n", "# x=lambda im: im['rotate'],\n", "# y=lambda im: im['shear'],\n", diff --git a/weave/legacy/examples/experimental/skip_test/Custom ops.ipynb b/weave_query/examples/experimental/skip_test/Custom ops.ipynb similarity index 94% rename from weave/legacy/examples/experimental/skip_test/Custom ops.ipynb rename to weave_query/examples/experimental/skip_test/Custom ops.ipynb index 6392f1d34fd..9ec45d0d009 100644 --- a/weave/legacy/examples/experimental/skip_test/Custom ops.ipynb +++ b/weave_query/examples/experimental/skip_test/Custom ops.ipynb @@ -47,7 +47,7 @@ "\n", "x = [i / 1000.0 for i in range(0, 1000)]\n", "\n", - "plot = weave.legacy.weave.panels.Plot(x)\n", + "plot = weave_query.panels.Plot(x)\n", "plot.set_x(lambda row: row)\n", "plot.set_y(lambda row: my_func(row))\n", "weave.show(plot)" @@ -68,7 +68,7 @@ " 'x': xs,\n", " 'y': [math.sin(10 * x / (run+1)) for x in xs]\n", " })\n", - "plot = weave.legacy.weave.panels.Plot(run_data)\n", + "plot = weave_query.panels.Plot(run_data)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['id'])\n", @@ -93,7 +93,7 @@ "df = df.melt(id_vars=['x'], value_vars=['y1', 'y2', 'y3'], var_name='series', value_name='y')\n", "\n", "multiple_y = df.to_dict('records')\n", - "plot = weave.legacy.weave.panels.Plot(multiple_y)\n", + "plot = weave_query.panels.Plot(multiple_y)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['series'])\n", @@ -116,7 +116,7 @@ "df['y3'] = df['x'].map(lambda x: math.sin(10 * x / 3))\n", "multiple_y = df.to_dict('records')\n", "\n", - "plot = weave.legacy.weave.panels.Plot(multiple_y)\n", + "plot = weave_query.panels.Plot(multiple_y)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: [row['y1'], row['y2'], row['y3']])\n", "plot.set_label(lambda row: ['y1', 'y2', 'y3'])\n", diff --git a/weave/legacy/examples/experimental/skip_test/Diffusion explore 2.ipynb b/weave_query/examples/experimental/skip_test/Diffusion explore 2.ipynb similarity index 68% rename from weave/legacy/examples/experimental/skip_test/Diffusion explore 2.ipynb rename to weave_query/examples/experimental/skip_test/Diffusion explore 2.ipynb index 00723093f18..ca661996286 100644 --- a/weave/legacy/examples/experimental/skip_test/Diffusion explore 2.ipynb +++ b/weave_query/examples/experimental/skip_test/Diffusion explore 2.ipynb @@ -8,8 +8,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "from weave.legacy.weave.ecosystem.all import langchain\n", + "from weave_query import weave_internal\n", + "from weave_query.ecosystem.all import langchain\n", "weave.use_frontend_devmode()" ] }, @@ -20,42 +20,42 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " \"chat_model\": langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", - " \"animals\": weave.legacy.weave.panels.Query(\n", + " \"animals\": weave_query.panels.Query(\n", " [\"koala\", \"giraffe\", \"leopard\"],\n", " text=lambda item: item\n", " ),\n", - " \"objects\": weave.legacy.weave.panels.Query(\n", + " \"objects\": weave_query.panels.Query(\n", " [\"spoon\", \"guitar\"],\n", " text=lambda item: item\n", " ),\n", - " \"prompts\": weave.legacy.weave.panels.Query([\n", + " \"prompts\": weave_query.panels.Query([\n", " \"A {animal} with an {object}\",\n", " \"A 20-word story about a {animal} with an {object}\",\n", " \"You are creative writer. Describe a scene with a {animal} and a {object}. Choose an art style and use adjectives that evoke it.\"\n", " ],\n", " text=lambda item: item),\n", " \"combos\": lambda animals, objects, prompts:\n", - " weave.legacy.weave.ops.cross_product(weave.legacy.weave.ops.dict_(\n", + " weave_query.ops.cross_product(weave_query.ops.dict_(\n", " animal=animals.pinned_data(),\n", " object=objects.pinned_data(),\n", " prompt=prompts.pinned_data())),\n", "\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda chat_model, combos: weave.legacy.weave.panels.Facet(\n", + " weave_query.panels.BoardPanel(\n", + " lambda chat_model, combos: weave_query.panels.Facet(\n", " combos,\n", " cell_size=(256, 256),\n", " x=lambda item: item['animal'] + ' ' + item['object'],\n", " y=lambda item: item['prompt'],\n", " select=lambda items: \n", - " weave.legacy.weave.panels.Group(\n", + " weave_query.panels.Group(\n", " vars={\n", " 'gen_text': chat_model.predict(\n", - " items[0]['prompt'].format(weave.legacy.weave.ops.dict_(\n", + " items[0]['prompt'].format(weave_query.ops.dict_(\n", " animal=items[0]['animal'],\n", " object=items[0]['object'],\n", " ))),\n", @@ -66,15 +66,15 @@ " }\n", " )\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=24)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=24)\n", " )\n", - "# weave.legacy.weave.panels.BoardPanel(\n", - "# lambda col_names: weave.legacy.weave.panels.Table(col_names, columns=[lambda col: col]),\n", - "# layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", + "# weave_query.panels.BoardPanel(\n", + "# lambda col_names: weave_query.panels.Table(col_names, columns=[lambda col: col]),\n", + "# layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", "# ),\n", - "# weave.legacy.weave.panels.BoardPanel(\n", - "# lambda row_names: weave.legacy.weave.panels.Table(row_names, columns=[lambda row: row]),\n", - "# layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", + "# weave_query.panels.BoardPanel(\n", + "# lambda row_names: weave_query.panels.Table(row_names, columns=[lambda row: row]),\n", + "# layout=weave_query.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", "# ),\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/skip_test/Diffusion explore.ipynb b/weave_query/examples/experimental/skip_test/Diffusion explore.ipynb similarity index 74% rename from weave/legacy/examples/experimental/skip_test/Diffusion explore.ipynb rename to weave_query/examples/experimental/skip_test/Diffusion explore.ipynb index 9289d57e217..44d16502113 100644 --- a/weave/legacy/examples/experimental/skip_test/Diffusion explore.ipynb +++ b/weave_query/examples/experimental/skip_test/Diffusion explore.ipynb @@ -25,8 +25,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "from weave.legacy.weave.ecosystem.all import langchain" + "from weave_query import weave_internal\n", + "from weave_query.ecosystem.all import langchain" ] }, { @@ -36,12 +36,12 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " \"chat_model\": langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", " \"topic\": \"animals\",\n", " \"num_cols\": 2,\n", - " \"col_names\": lambda chat_model, num_cols: weave.legacy.weave.ops.range(0, num_cols, 1).map(\n", + " \"col_names\": lambda chat_model, num_cols: weave_query.ops.range(0, num_cols, 1).map(\n", " lambda i: chat_model.predict(weave_internal.const(\"You are a creative writer. You've come up with \")\n", " + i.toString()\n", " + \" ordered descriptive phrases (3 words or fewer) that represent how magical something is, from least magical to most. Phrase \"\n", @@ -49,7 +49,7 @@ " + \" is:\")\n", " ),\n", " \"num_rows\": 2,\n", - " \"row_names\": lambda chat_model, topic, num_rows: weave.legacy.weave.ops.range(0, num_rows, 1).map(\n", + " \"row_names\": lambda chat_model, topic, num_rows: weave_query.ops.range(0, num_rows, 1).map(\n", " lambda i: chat_model.predict(weave_internal.const(\"You are a creative writer. You've come up with \")\n", " + i.toString()\n", " + \" \" + topic\n", @@ -60,9 +60,9 @@ "\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda num_rows, num_cols, row_names, col_names: weave.legacy.weave.panels.Facet(\n", - " weave.legacy.weave.ops.range(0, num_rows * num_cols, 1),\n", + " weave_query.panels.BoardPanel(\n", + " lambda num_rows, num_cols, row_names, col_names: weave_query.panels.Facet(\n", + " weave_query.ops.range(0, num_rows * num_cols, 1),\n", " cell_size=(192, 192),\n", " x=lambda i: col_names[i % num_cols],\n", " y=lambda i: row_names[(i / num_cols).floor()],\n", @@ -72,15 +72,15 @@ " + \" \"\n", " + col_names[(cell_values[0] % num_cols)]).stable_diffusion()\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda col_names: weave.legacy.weave.panels.Table(col_names, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda col_names: weave_query.panels.Table(col_names, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda row_names: weave.legacy.weave.panels.Table(row_names, columns=[lambda row: row]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda row_names: weave_query.panels.Table(row_names, columns=[lambda row: row]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", " ),\n", " ]\n", ")" @@ -95,11 +95,11 @@ "source": [ "weave.save(\n", "\"\"\"\n", - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " \"chat_model\": langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", " \"num_cols\": 2,\n", - " \"col_names\": lambda chat_model, num_cols: weave.legacy.weave.ops.range(0, num_cols, 1).map(\n", + " \"col_names\": lambda chat_model, num_cols: weave_query.ops.range(0, num_cols, 1).map(\n", " lambda i: chat_model.predict(weave_internal.const(\"You are a creative writer. You've come up with \")\n", " + i.toString()\n", " + \" ordered descriptive phrases (3 words or fewer) that represent how magical something is, from least magical to most. Phrase \"\n", @@ -107,7 +107,7 @@ " + \" is:\")\n", " ),\n", " \"num_rows\": 2,\n", - " \"row_names\": lambda chat_model, num_rows: weave.legacy.weave.ops.range(0, num_rows, 1).map(\n", + " \"row_names\": lambda chat_model, num_rows: weave_query.ops.range(0, num_rows, 1).map(\n", " lambda i: chat_model.predict(weave_internal.const(\"You are a creative writer. You've come up with \")\n", " + i.toString()\n", " + \" animals that are unlikely to be seen together. Animal \"\n", @@ -117,9 +117,9 @@ "\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda num_rows, num_cols, row_names, col_names: weave.legacy.weave.panels.Facet(\n", - " weave.legacy.weave.ops.range(0, num_rows * num_cols, 1),\n", + " weave_query.panels.BoardPanel(\n", + " lambda num_rows, num_cols, row_names, col_names: weave_query.panels.Facet(\n", + " weave_query.ops.range(0, num_rows * num_cols, 1),\n", " cell_size=(192, 192),\n", " x=lambda i: col_names[i % num_cols],\n", " y=lambda i: row_names[(i / num_cols).floor()],\n", @@ -129,15 +129,15 @@ " + \" \"\n", " + col_names[(cell_values[0] % num_cols)]).stable_diffusion()\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda col_names: weave.legacy.weave.panels.Table(col_names, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda col_names: weave_query.panels.Table(col_names, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda row_names: weave.legacy.weave.panels.Table(row_names, columns=[lambda row: row]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda row_names: weave_query.panels.Table(row_names, columns=[lambda row: row]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", " ),\n", " ]\n", ")\n", diff --git a/weave/legacy/examples/experimental/skip_test/Diffusion story.ipynb b/weave_query/examples/experimental/skip_test/Diffusion story.ipynb similarity index 84% rename from weave/legacy/examples/experimental/skip_test/Diffusion story.ipynb rename to weave_query/examples/experimental/skip_test/Diffusion story.ipynb index 4a9a040968d..5ec1e233d1e 100644 --- a/weave/legacy/examples/experimental/skip_test/Diffusion story.ipynb +++ b/weave_query/examples/experimental/skip_test/Diffusion story.ipynb @@ -8,8 +8,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "from weave.legacy.weave.ecosystem.all import langchain\n", + "from weave_query import weave_internal\n", + "from weave_query.ecosystem.all import langchain\n", "weave.use_frontend_devmode()" ] }, @@ -20,7 +20,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " 'gpt35': langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", " 'gpt4': langchain.chat_openai(\"gpt-4\", 0.7),\n", @@ -37,7 +37,7 @@ " think you have when it comes to writing style. In this case, you write your outline as a json list\n", " with one item for each step.\n", " \"\"\",\n", - " 'prompt': lambda director, director_emotion, film_style, number_of_panes, story_gen_prompt: story_gen_prompt.format(weave.legacy.weave.ops.dict_(\n", + " 'prompt': lambda director, director_emotion, film_style, number_of_panes, story_gen_prompt: story_gen_prompt.format(weave_query.ops.dict_(\n", " director= director,\n", " director_emotion=director_emotion,\n", " film_style=film_style,\n", @@ -47,20 +47,20 @@ " 'panel_prompt': 'A storyboard pane for a movie by {director} for their next {film_style} film, The scene description is: {panel}',\n", " 'storyboard_panes': lambda storyline_parsed, panel_prompt, director, film_style:\n", " storyline_parsed.map(lambda row:\n", - " panel_prompt.format(weave.legacy.weave.ops.dict_(\n", + " panel_prompt.format(weave_query.ops.dict_(\n", " panel=row.json_dumps(),\n", " director=director,\n", " film_style=film_style,\n", " ))).stable_diffusion()\n", " },\n", " panels=[ \n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda storyline_parsed: storyline_parsed,\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda storyboard_panes: weave.legacy.weave.panels.Each(storyboard_panes),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", + " weave_query.panels.BoardPanel(\n", + " lambda storyboard_panes: weave_query.panels.Each(storyboard_panes),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12)\n", " )\n", " ]\n", ")" @@ -106,7 +106,7 @@ "metadata": {}, "outputs": [], "source": [ - "#weave.legacy.weave.panels.Each(storyline_parsed.map(lambda row: row.json_dumps()).stable_diffusion())" + "#weave_query.panels.Each(storyline_parsed.map(lambda row: row.json_dumps()).stable_diffusion())" ] } ], diff --git a/weave/legacy/examples/experimental/skip_test/Docbot.ipynb b/weave_query/examples/experimental/skip_test/Docbot.ipynb similarity index 87% rename from weave/legacy/examples/experimental/skip_test/Docbot.ipynb rename to weave_query/examples/experimental/skip_test/Docbot.ipynb index c754aef88f5..e80e9a374d8 100644 --- a/weave/legacy/examples/experimental/skip_test/Docbot.ipynb +++ b/weave_query/examples/experimental/skip_test/Docbot.ipynb @@ -10,7 +10,7 @@ "import pathlib\n", "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ecosystem import langchain" + "from weave_query.ecosystem import langchain" ] }, { @@ -127,7 +127,7 @@ "# TODO:\n", "# - give control over k for k-means\n", "\n", - "from weave.legacy.weave.ecosystem import langchain\n", + "from weave_query.ecosystem import langchain\n", "\n", "vector_store_node = langchain.faiss_from_documents(docs, langchain.openai_embeddings())\n", "vector_store_node" @@ -162,7 +162,7 @@ "outputs": [], "source": [ "# With weave\n", - "from weave.legacy.weave.ecosystem import langchain\n", + "from weave_query.ecosystem import langchain\n", "qa = langchain.retrieval_qa_from_chain_type(\n", " langchain.chat_openai('gpt-3.5-turbo', 0.7),\n", " 'stuff',\n", @@ -213,7 +213,7 @@ "outputs": [], "source": [ "# You can map over questions\n", - "weave.legacy.weave.panels.Table(questions.limit(3), columns=[\n", + "weave_query.panels.Table(questions.limit(3), columns=[\n", " lambda q: q['question'],\n", " lambda q: models.run(q['question'])])" ] @@ -227,7 +227,7 @@ "source": [ "# Interactive evaluation and exploration dashboard\n", "\n", - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " 'documents': docs,\n", " 'questions': questions.limit(2),\n", @@ -243,7 +243,7 @@ " langchain.chat_openai('gpt-3.5-turbo', 0.7),\n", " 'stuff',\n", " vector_store),\n", - " 'models': lambda model_a, model_b: weave.legacy.weave.ops.make_list(a=model_a, b=model_b),\n", + " 'models': lambda model_a, model_b: weave_query.ops.make_list(a=model_a, b=model_b),\n", " 'projection': lambda doc_embeddings: doc_embeddings.projection2D(\n", " 'pca',\n", " 'single',\n", @@ -262,55 +262,55 @@ " }),\n", " },\n", " panels=[ \n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda models: weave.legacy.weave.panels.Each(models.run(\"What is Weave?\")),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda models: weave_query.panels.Each(models.run(\"What is Weave?\")),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda model_a, model_b: weave.legacy.weave.panels.Table(questions,\n", + " weave_query.panels.BoardPanel(\n", + " lambda model_a, model_b: weave_query.panels.Table(questions,\n", " columns=[\n", " lambda question: question['question'],\n", " lambda question: question['feedback'],\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " lambda question: model_a.run(question['question']).result,\n", " name='model_a'\n", " ),\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " lambda question: model_b.run(question['question']).result,\n", " name='model_b'\n", " ),\n", " ]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=24, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=24, h=6)\n", " ), \n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " id='docs_projection',\n", - " panel=lambda projection: weave.legacy.weave.panels.Plot(\n", + " panel=lambda projection: weave_query.panels.Plot(\n", " projection,\n", " x=lambda row: row['projection.x'],\n", " y=lambda row: row['projection.y'],\n", " color=lambda row: row['source.cluster']\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda docs_projection: docs_projection.selected_data(),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=12, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda documents: weave.legacy.weave.panels.Table(documents,\n", + " weave_query.panels.BoardPanel(\n", + " lambda documents: weave_query.panels.Table(documents,\n", " columns=[\n", " lambda doc: doc.page_content,\n", " lambda doc: doc.metadata['path']\n", " ]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=18, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=18, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda vector_store: weave.legacy.weave.panels.Table(vector_store.similarity_search('weave'),\n", + " weave_query.panels.BoardPanel(\n", + " lambda vector_store: weave_query.panels.Table(vector_store.similarity_search('weave'),\n", " columns=[\n", " lambda doc: doc.page_content,\n", " lambda doc: doc.metadata['path'] \n", " ]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=18, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=18, w=12, h=6)\n", " ),\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/skip_test/Hack demo.ipynb b/weave_query/examples/experimental/skip_test/Hack demo.ipynb similarity index 92% rename from weave/legacy/examples/experimental/skip_test/Hack demo.ipynb rename to weave_query/examples/experimental/skip_test/Hack demo.ipynb index 9d4eea67e0a..ace894e4833 100644 --- a/weave/legacy/examples/experimental/skip_test/Hack demo.ipynb +++ b/weave_query/examples/experimental/skip_test/Hack demo.ipynb @@ -9,7 +9,7 @@ "source": [ "import typing\n", "import weave\n", - "from weave.legacy.weave.ecosystem import hackdemo\n", + "from weave_query.ecosystem import hackdemo\n", "\n", "PROJECT = 'hackdemo'" ] @@ -42,7 +42,7 @@ "outputs": [], "source": [ "@weave.op()\n", - "def table_summary(table: typing.Any) -> list[weave.legacy.weave.panels.Panel]:\n", + "def table_summary(table: typing.Any) -> list[weave_query.panels.Panel]:\n", " if not table:\n", " return\n", " col_names = list(table[0].keys())\n", @@ -50,7 +50,7 @@ " cols = {col_name: table.pick(col_name) for col_name in col_names}\n", " panels = []\n", " for col_name, col_values in cols.items():\n", - " panels.append(weave.legacy.weave.panels.LabeledItem(item=col_values, label=col_name))\n", + " panels.append(weave_query.panels.LabeledItem(item=col_values, label=col_name))\n", " return panels" ] }, diff --git a/weave/legacy/examples/experimental/skip_test/KerasModel.ipynb b/weave_query/examples/experimental/skip_test/KerasModel.ipynb similarity index 98% rename from weave/legacy/examples/experimental/skip_test/KerasModel.ipynb rename to weave_query/examples/experimental/skip_test/KerasModel.ipynb index f03a31c6e65..67370abf960 100644 --- a/weave/legacy/examples/experimental/skip_test/KerasModel.ipynb +++ b/weave_query/examples/experimental/skip_test/KerasModel.ipynb @@ -9,7 +9,7 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ecosystem import keras as weave_keras" + "from weave_query.ecosystem import keras as weave_keras" ] }, { @@ -247,7 +247,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Table([\n", + "weave_query.panels.Table([\n", " {'input_str': \"This is a test\"},\n", " {'input_str': \"This is a horrible test\"},\n", " {'input_str': \"I love weave\"},\n", diff --git a/weave/legacy/examples/experimental/skip_test/LLMs Via Weave.ipynb b/weave_query/examples/experimental/skip_test/LLMs Via Weave.ipynb similarity index 94% rename from weave/legacy/examples/experimental/skip_test/LLMs Via Weave.ipynb rename to weave_query/examples/experimental/skip_test/LLMs Via Weave.ipynb index f974b36f8ef..ded8e7d3e84 100644 --- a/weave/legacy/examples/experimental/skip_test/LLMs Via Weave.ipynb +++ b/weave_query/examples/experimental/skip_test/LLMs Via Weave.ipynb @@ -19,15 +19,15 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave\n", - "panels = weave.legacy.weave.panels\n", + "import weave_query\n", + "panels = weave_query.panels\n", "\n", "project = \"tim-test-llms-test-all-final-colab-01\"\n", "entity = \"timssweeney\"\n", "\n", "# Create a Weave Query to get Traces\n", "traces = (\n", - " weave.legacy.weave.ops\n", + " weave_query.ops\n", " .project(entity, project)\n", " .runs()\n", " .history().map(\n", @@ -36,7 +36,7 @@ " .concat()\n", " .dropna()\n", " .sort(\n", - " lambda row: weave.legacy.weave.ops.make_list(a=row.startTime()), \n", + " lambda row: weave_query.ops.make_list(a=row.startTime()), \n", " ['asc']\n", " )\n", ")\n", diff --git a/weave/legacy/examples/experimental/skip_test/Model Cards.ipynb b/weave_query/examples/experimental/skip_test/Model Cards.ipynb similarity index 97% rename from weave/legacy/examples/experimental/skip_test/Model Cards.ipynb rename to weave_query/examples/experimental/skip_test/Model Cards.ipynb index 73760222547..001a3861d87 100644 --- a/weave/legacy/examples/experimental/skip_test/Model Cards.ipynb +++ b/weave_query/examples/experimental/skip_test/Model Cards.ipynb @@ -9,7 +9,7 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ecosystem import models" + "from weave_query.ecosystem import models" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/Models.ipynb b/weave_query/examples/experimental/skip_test/Models.ipynb similarity index 89% rename from weave/legacy/examples/experimental/skip_test/Models.ipynb rename to weave_query/examples/experimental/skip_test/Models.ipynb index 176f5767541..1beea9664f0 100644 --- a/weave/legacy/examples/experimental/skip_test/Models.ipynb +++ b/weave_query/examples/experimental/skip_test/Models.ipynb @@ -9,7 +9,7 @@ "source": [ "import weave\n", "import xgboost\n", - "from weave.legacy.weave.ecosystem import shap\n", + "from weave_query.ecosystem import shap\n", "#weave.use_frontend_devmode()" ] }, @@ -21,7 +21,7 @@ "outputs": [], "source": [ "dataset = weave.use(shap.ca_housing_dataset(1))\n", - "dataset_arrow = weave.legacy.weave.ops.dataframe_to_arrow(dataset)" + "dataset_arrow = weave_query.ops.dataframe_to_arrow(dataset)" ] }, { @@ -61,7 +61,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.get('wandb-artifact://shawn/weave_ops/my-dataset-transform:8c478776a5e01c3c051d')" + "weave_query.ops.get('wandb-artifact://shawn/weave_ops/my-dataset-transform:8c478776a5e01c3c051d')" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/Monitor2.ipynb b/weave_query/examples/experimental/skip_test/Monitor2.ipynb similarity index 87% rename from weave/legacy/examples/experimental/skip_test/Monitor2.ipynb rename to weave_query/examples/experimental/skip_test/Monitor2.ipynb index 3b3cb66ccaf..7586babb1b0 100644 --- a/weave/legacy/examples/experimental/skip_test/Monitor2.ipynb +++ b/weave_query/examples/experimental/skip_test/Monitor2.ipynb @@ -10,8 +10,8 @@ "import pandas as pd\n", "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ops_arrow.list_ import dataframe_to_arrow\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.ops_arrow.list_ import dataframe_to_arrow\n", + "from weave_query.ecosystem import wandb" ] }, { @@ -182,7 +182,7 @@ "metadata": {}, "outputs": [], "source": [ - "predictions = weave.legacy.weave.ops.get(\"local-artifact:///predictions:latest/obj\")" + "predictions = weave_query.ops.get(\"local-artifact:///predictions:latest/obj\")" ] }, { @@ -192,15 +192,15 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " 'all_preds': predictions,\n", - " 'x_max': weave.legacy.weave.ops.date_parse(str(end_date)),\n", - " 'x_min': lambda x_max: x_max - weave.legacy.weave.ops.days(5),\n", + " 'x_max': weave_query.ops.date_parse(str(end_date)),\n", + " 'x_min': lambda x_max: x_max - weave_query.ops.days(5),\n", " 'predictions': lambda x_min: predictions.filter(lambda pred: pred['timestamp'] > x_min)\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -211,9 +211,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -224,9 +224,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -237,9 +237,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"api_cost\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -250,9 +250,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"total_tokens\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -263,35 +263,35 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"avg_latency\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['api_cost'],\n", " bin_size=0.2\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['prompt_tokens'] + pred['completion_tokens'],\n", " bin_size=25\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['latency'],\n", " bin_size=0.05\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions: predictions,\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/skip_test/Monitor3.ipynb b/weave_query/examples/experimental/skip_test/Monitor3.ipynb similarity index 86% rename from weave/legacy/examples/experimental/skip_test/Monitor3.ipynb rename to weave_query/examples/experimental/skip_test/Monitor3.ipynb index f6634410915..e82ce928ffa 100644 --- a/weave/legacy/examples/experimental/skip_test/Monitor3.ipynb +++ b/weave_query/examples/experimental/skip_test/Monitor3.ipynb @@ -10,8 +10,8 @@ "import pandas as pd\n", "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ops_arrow.list_ import dataframe_to_arrow\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.ops_arrow.list_ import dataframe_to_arrow\n", + "from weave_query.ecosystem import wandb" ] }, { @@ -182,7 +182,7 @@ "metadata": {}, "outputs": [], "source": [ - "predictions = weave.legacy.weave.ops.get(\"local-artifact:///predictions:latest/obj\")" + "predictions = weave_query.ops.get(\"local-artifact:///predictions:latest/obj\")" ] }, { @@ -192,17 +192,17 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " #'all_preds': predictions,\n", - " 'x_max': weave.legacy.weave.ops.date_parse(str(end_date)),\n", - " 'x_min': lambda x_max: x_max - weave.legacy.weave.ops.days(5),\n", - " 'predictions_query': weave.legacy.weave.panels.Query(\n", + " 'x_max': weave_query.ops.date_parse(str(end_date)),\n", + " 'x_min': lambda x_max: x_max - weave_query.ops.days(5),\n", + " 'predictions_query': weave_query.panels.Query(\n", " predictions,\n", " conditions=[\n", - " lambda query_input: weave.legacy.weave.panels.QueryCondition(\n", + " lambda query_input: weave_query.panels.QueryCondition(\n", " expression=query_input['username'],\n", - " editor=weave.legacy.weave.panels.SelectEditor(\n", + " editor=weave_query.panels.SelectEditor(\n", " choices=query_input['username']\n", " )\n", " )\n", @@ -210,7 +210,7 @@ " 'predictions': lambda predictions_query: predictions_query.selected()\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -221,9 +221,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -234,9 +234,9 @@ " mark=\"bar\",\n", " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=0, w=12, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -247,9 +247,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"api_cost\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -260,9 +260,9 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"total_tokens\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.TimeSeries(\n", " predictions,\n", " x=lambda item: item[\"timestamp\"],\n", @@ -273,35 +273,35 @@ " mark=\"line\",\n", " axis_labels={\"y\": \"avg_latency\"},\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=6, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['api_cost'],\n", " bin_size=0.2\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['prompt_tokens'] + pred['completion_tokens'],\n", " bin_size=25\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=8, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, x_min, x_max: wandb.Distribution(\n", " predictions,\n", " value_fn=lambda pred: pred['latency'],\n", " bin_size=0.05\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=16, y=12, w=8, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions: predictions,\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=18, w=24, h=12)\n", " )\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/skip_test/Multiple Y Axes.ipynb b/weave_query/examples/experimental/skip_test/Multiple Y Axes.ipynb similarity index 95% rename from weave/legacy/examples/experimental/skip_test/Multiple Y Axes.ipynb rename to weave_query/examples/experimental/skip_test/Multiple Y Axes.ipynb index a3d9af12a7c..d10fbcfdcc4 100644 --- a/weave/legacy/examples/experimental/skip_test/Multiple Y Axes.ipynb +++ b/weave_query/examples/experimental/skip_test/Multiple Y Axes.ipynb @@ -39,7 +39,7 @@ " 'acc': random.random(),\n", " })\n", " \n", - "plot = weave.legacy.weave.panels.Plot(data)\n", + "plot = weave_query.panels.Plot(data)\n", "plot.set_x(lambda row: row['step'])\n", "plot.set_y(lambda row: row['acc'])\n", "plot.set_label(lambda row: row['run'])\n", @@ -62,7 +62,7 @@ " 'x': xs,\n", " 'y': [math.sin(10 * x / (series+1)) for x in xs]\n", " })\n", - "plot = weave.legacy.weave.panels.Plot(data)\n", + "plot = weave_query.panels.Plot(data)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['key'])\n", @@ -86,7 +86,7 @@ " 'x': x,\n", " 'y': math.sin(10 * x / (series+1))\n", " })\n", - "plot = weave.legacy.weave.panels.Plot(data)\n", + "plot = weave_query.panels.Plot(data)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['key'])\n", @@ -114,7 +114,7 @@ "df = df.melt(id_vars=['x'], value_vars=['y1', 'y2', 'y3'], var_name='series', value_name='y')\n", "\n", "multiple_y = df.to_dict('records')\n", - "plot = weave.legacy.weave.panels.Plot(multiple_y)\n", + "plot = weave_query.panels.Plot(multiple_y)\n", "plot.set_x(lambda row: row['x'])\n", "plot.set_y(lambda row: row['y'])\n", "plot.set_label(lambda row: row['series'])\n", @@ -149,7 +149,7 @@ "df['y3'] = df['x'].map(lambda x: math.sin(10 * x / 3))\n", "multiple_y = df.to_dict('records')\n", "\n", - "plot = weave.legacy.weave.panels.Plot(multiple_y)\n", + "plot = weave_query.panels.Plot(multiple_y)\n", "plot.set_x(lambda row: row['x'])\n", "\n", "# Return lists for y and label\n", diff --git a/weave/legacy/examples/experimental/skip_test/Mutation - Code Editor.ipynb b/weave_query/examples/experimental/skip_test/Mutation - Code Editor.ipynb similarity index 94% rename from weave/legacy/examples/experimental/skip_test/Mutation - Code Editor.ipynb rename to weave_query/examples/experimental/skip_test/Mutation - Code Editor.ipynb index 937f2c0a27c..ff81b310d01 100644 --- a/weave/legacy/examples/experimental/skip_test/Mutation - Code Editor.ipynb +++ b/weave_query/examples/experimental/skip_test/Mutation - Code Editor.ipynb @@ -27,7 +27,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.local_path('../weave/testdata/train.py')" + "weave_query.ops.local_path('../weave/testdata/train.py')" ] } ], diff --git a/weave/legacy/examples/experimental/skip_test/Mutation.ipynb b/weave_query/examples/experimental/skip_test/Mutation.ipynb similarity index 93% rename from weave/legacy/examples/experimental/skip_test/Mutation.ipynb rename to weave_query/examples/experimental/skip_test/Mutation.ipynb index 454d25c6e5f..c57852041cd 100644 --- a/weave/legacy/examples/experimental/skip_test/Mutation.ipynb +++ b/weave_query/examples/experimental/skip_test/Mutation.ipynb @@ -26,7 +26,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.local_path('../weave/testdata/cereal.csv').readcsv" + "weave_query.ops.local_path('../weave/testdata/cereal.csv').readcsv" ] } ], diff --git a/weave/legacy/examples/experimental/skip_test/Object browsing.ipynb b/weave_query/examples/experimental/skip_test/Object browsing.ipynb similarity index 100% rename from weave/legacy/examples/experimental/skip_test/Object browsing.ipynb rename to weave_query/examples/experimental/skip_test/Object browsing.ipynb diff --git a/weave/legacy/examples/experimental/skip_test/OpenAI.ipynb b/weave_query/examples/experimental/skip_test/OpenAI.ipynb similarity index 95% rename from weave/legacy/examples/experimental/skip_test/OpenAI.ipynb rename to weave_query/examples/experimental/skip_test/OpenAI.ipynb index dae4d5b5262..bd642b51dca 100644 --- a/weave/legacy/examples/experimental/skip_test/OpenAI.ipynb +++ b/weave_query/examples/experimental/skip_test/OpenAI.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import openai" + "from weave_query.ecosystem import openai" ] }, { @@ -75,7 +75,7 @@ "source": [ "# make some predictions using our new model\n", "\n", - "panel = weave.legacy.weave.panels.Table(['1 + 9 =', '2 + 14 ='])\n", + "panel = weave_query.panels.Table(['1 + 9 =', '2 + 14 ='])\n", "panel.table_query.add_column(lambda row: row)\n", "panel.table_query.add_column(lambda row: model.complete(row)['choices'][0]['text'])\n", "weave.show(panel)" diff --git a/weave/legacy/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb b/weave_query/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb rename to weave_query/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb index 5b84ccbda13..e3464866a4a 100644 --- a/weave/legacy/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb +++ b/weave_query/examples/experimental/skip_test/Oxford-IIIT Pet Dataset.ipynb @@ -45,7 +45,7 @@ "metadata": {}, "outputs": [], "source": [ - "#weave.legacy.weave.ops.local_path('/Users/shawn/datasets')\n", + "#weave_query.ops.local_path('/Users/shawn/datasets')\n", "# :(, broken right now" ] }, @@ -56,7 +56,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.ecosystem.shawn import petdataset\n", + "from weave_query.ecosystem.shawn import petdataset\n", "\n", "data = petdataset.petdataset('/Users/shawn/datasets/oxford-iiit-pet-dataset')\n", "#data" @@ -69,7 +69,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.ecosystem import wandb\n", + "from weave_query.ecosystem import wandb\n", "wandb.MultiDistribution(data, value_fn=lambda item: item['breed'])" ] }, @@ -81,7 +81,7 @@ "outputs": [], "source": [ "# A PanelPlot only histogram\n", - "plot = weave.legacy.weave.panels.Plot(\n", + "plot = weave_query.panels.Plot(\n", " data,\n", " y=lambda item: item['breed'],\n", " groupby_y=True,\n", diff --git a/weave/legacy/examples/experimental/skip_test/Performance profiling.ipynb b/weave_query/examples/experimental/skip_test/Performance profiling.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Performance profiling.ipynb rename to weave_query/examples/experimental/skip_test/Performance profiling.ipynb index c69c3f119d6..9ea71508344 100644 --- a/weave/legacy/examples/experimental/skip_test/Performance profiling.ipynb +++ b/weave_query/examples/experimental/skip_test/Performance profiling.ipynb @@ -15,7 +15,7 @@ "!rm -rf /tmp/local-artifacts\n", "\n", "t = pa.table({d: list(range(400)) * 1000 for d in \"ABCDEFGHIJKLMNOPQRSTUVWXYZ\"})\n", - "weave_t = weave.legacy.weave.ops.ArrowWeaveList(t)\n", + "weave_t = weave_query.ops.ArrowWeaveList(t)\n", "weave.use(weave_t.groupby(lambda x: x['A']).map(lambda row: row.key()))" ] }, @@ -29,7 +29,7 @@ "import os\n", "import cProfile\n", "import weave\n", - "from weave.legacy.weave import storage\n", + "from weave_query import storage\n", "import random\n", "import time\n", "import pyarrow as pa\n", @@ -55,7 +55,7 @@ " 'x': x,\n", " 'y': y,\n", " })\n", - " table_list = weave.legacy.weave.ops.ArrowTableList(table)\n", + " table_list = weave_query.ops.ArrowTableList(table)\n", "\n", " return storage.save(table_list)\n", "\n", @@ -88,7 +88,7 @@ "def run(ref):\n", "# node = (\n", "# weave.get(ref)\n", - "# .groupby(lambda row: weave.legacy.weave.ops.dict_(rotate=row[\"rotate\"], shear=row[\"shear\"]))\n", + "# .groupby(lambda row: weave_query.ops.dict_(rotate=row[\"rotate\"], shear=row[\"shear\"]))\n", "# .map(lambda row: row.groupby(lambda row: row[\"y\"]))\n", "# .dropna()\n", "# .count()\n", @@ -97,7 +97,7 @@ " weave.get(ref)\n", " # .map(lambda row: row['rotate'] + 1)\n", " # .map(lambda row: row + 9)\n", - " .groupby(lambda row: weave.legacy.weave.ops.dict_(rotate=row[\"rotate\"], shear=row[\"shear\"]))\n", + " .groupby(lambda row: weave_query.ops.dict_(rotate=row[\"rotate\"], shear=row[\"shear\"]))\n", " [1]\n", " .count()\n", " )\n", diff --git a/weave/legacy/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb b/weave_query/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb similarity index 96% rename from weave/legacy/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb rename to weave_query/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb index f8233308156..8de86c02f56 100644 --- a/weave/legacy/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb +++ b/weave_query/examples/experimental/skip_test/ProdMonStreamTableIntro.ipynb @@ -17,7 +17,7 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.monitoring import StreamTable\n", + "from weave_query.monitoring import StreamTable\n", "import PIL\n", "import numpy as np\n", "\n", @@ -86,7 +86,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.monitoring import monitor\n", + "from weave_query.monitoring import monitor\n", "\n", "@monitor(entity_name=\"timssweeney\", project_name=\"prodmon\")\n", "def ask_llm_calculator(prompt, question):\n", diff --git a/weave/legacy/examples/experimental/skip_test/Shap.ipynb b/weave_query/examples/experimental/skip_test/Shap.ipynb similarity index 95% rename from weave/legacy/examples/experimental/skip_test/Shap.ipynb rename to weave_query/examples/experimental/skip_test/Shap.ipynb index 5ca6196df6d..2e499dad7c6 100644 --- a/weave/legacy/examples/experimental/skip_test/Shap.ipynb +++ b/weave_query/examples/experimental/skip_test/Shap.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import shap" + "from weave_query.ecosystem import shap" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/StreamTables.ipynb b/weave_query/examples/experimental/skip_test/StreamTables.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/StreamTables.ipynb rename to weave_query/examples/experimental/skip_test/StreamTables.ipynb index 78e5331bec8..d9da0c9cf50 100644 --- a/weave/legacy/examples/experimental/skip_test/StreamTables.ipynb +++ b/weave_query/examples/experimental/skip_test/StreamTables.ipynb @@ -18,7 +18,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable" + "from weave_query.wandb_interface.wandb_stream_table import StreamTable" ] }, { @@ -64,7 +64,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.project(entity_name, project_name).run(run_name).history2()" + "weave_query.ops.project(entity_name, project_name).run(run_name).history2()" ] } ], diff --git a/weave/legacy/examples/experimental/skip_test/TimeSeries.ipynb b/weave_query/examples/experimental/skip_test/TimeSeries.ipynb similarity index 90% rename from weave/legacy/examples/experimental/skip_test/TimeSeries.ipynb rename to weave_query/examples/experimental/skip_test/TimeSeries.ipynb index 73e03f7079a..ceacf958f09 100644 --- a/weave/legacy/examples/experimental/skip_test/TimeSeries.ipynb +++ b/weave_query/examples/experimental/skip_test/TimeSeries.ipynb @@ -9,8 +9,8 @@ "source": [ "import weave\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave import ops_arrow\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query import ops_arrow\n", + "from weave_query.ecosystem import wandb" ] }, { @@ -66,9 +66,9 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " items={\n", - " \"num_preds\": weave.legacy.weave.panels.LabeledItem(\n", + " \"num_preds\": weave_query.panels.LabeledItem(\n", " label=\"Predictions by version over time\",\n", " item=wandb.TimeSeries(\n", " items,\n", @@ -81,11 +81,11 @@ " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", " ),\n", - " \"bottom_row\": weave.legacy.weave.panels.Group(\n", + " \"bottom_row\": weave_query.panels.Group(\n", " style=\"height: 400px;\",\n", " preferHorizontal=True,\n", " items={\n", - " \"preds_by_user\": weave.legacy.weave.panels.LabeledItem(\n", + " \"preds_by_user\": weave_query.panels.LabeledItem(\n", " label=\"Predictions by user over time\",\n", " item=wandb.TimeSeries(\n", " items,\n", @@ -98,7 +98,7 @@ " axis_labels={\"y\": \"num_preds\"},\n", " ),\n", " ),\n", - " \"acceptance_rate\": weave.legacy.weave.panels.LabeledItem(\n", + " \"acceptance_rate\": weave_query.panels.LabeledItem(\n", " label=\"Acceptance rate over time by version\",\n", " item=wandb.TimeSeries(\n", " items,\n", diff --git a/weave/legacy/examples/experimental/skip_test/Untitled.ipynb b/weave_query/examples/experimental/skip_test/Untitled.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Untitled.ipynb rename to weave_query/examples/experimental/skip_test/Untitled.ipynb index ff38e5faef8..5bf36d5b548 100644 --- a/weave/legacy/examples/experimental/skip_test/Untitled.ipynb +++ b/weave_query/examples/experimental/skip_test/Untitled.ipynb @@ -23,7 +23,7 @@ "# for row in reader:\n", "# print(row)\n", "#help(csv.reader)\n", - "weave.legacy.weave.ops.local_path('/Users/shawn/code2/weave/weave/testdata/cereal.csv').readcsv()" + "weave_query.ops.local_path('/Users/shawn/code2/weave/weave/testdata/cereal.csv').readcsv()" ] } ], diff --git a/weave/legacy/examples/experimental/skip_test/Vectorizing.ipynb b/weave_query/examples/experimental/skip_test/Vectorizing.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Vectorizing.ipynb rename to weave_query/examples/experimental/skip_test/Vectorizing.ipynb index 488c7f42ff5..9f9fa340005 100644 --- a/weave/legacy/examples/experimental/skip_test/Vectorizing.ipynb +++ b/weave_query/examples/experimental/skip_test/Vectorizing.ipynb @@ -9,8 +9,8 @@ "source": [ "import weave\n", "import time\n", - "from weave.legacy.weave import storage\n", - "from weave.legacy.weave.ops_primitives import geom" + "from weave_query import storage\n", + "from weave_query.ops_primitives import geom" ] }, { @@ -24,7 +24,7 @@ "for i in range(1000000):\n", " segs.append(geom.LineSegment(i*0.1, i+0.2, i+0.3, i*0.5))\n", "l = weave.save(segs)\n", - "arr = weave.legacy.weave.ops.ArrowArrayList(storage.to_arrow(segs))" + "arr = weave_query.ops.ArrowArrayList(storage.to_arrow(segs))" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/WB data.ipynb b/weave_query/examples/experimental/skip_test/WB data.ipynb similarity index 74% rename from weave/legacy/examples/experimental/skip_test/WB data.ipynb rename to weave_query/examples/experimental/skip_test/WB data.ipynb index a7a545ffa0a..46bd91c2c7c 100644 --- a/weave/legacy/examples/experimental/skip_test/WB data.ipynb +++ b/weave_query/examples/experimental/skip_test/WB data.ipynb @@ -18,16 +18,16 @@ "metadata": {}, "outputs": [], "source": [ - "project = weave.legacy.weave.ops.project('shawn', 'fasion-sweep')\n", + "project = weave_query.ops.project('shawn', 'fasion-sweep')\n", "runs = project.runs()\n", "\n", - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " preferHorizontal=True,\n", " items={\n", - " \"sidebar\": weave.legacy.weave.panels.Group(\n", + " \"sidebar\": weave_query.panels.Group(\n", " style=\"width: 200px; padding: 16px;\",\n", " items={\n", - " \"run\": weave.legacy.weave.panels.ObjectPicker(runs, label='run'),\n", + " \"run\": weave_query.panels.ObjectPicker(runs, label='run'),\n", " }\n", " ),\n", " #\"main\": lambda sidebar: project.run(sidebar.config.items['run_id'].config.choice).history()\n", @@ -44,20 +44,20 @@ "metadata": {}, "outputs": [], "source": [ - "project = weave.legacy.weave.ops.project('shawn', 'fasion-sweep')\n", + "project = weave_query.ops.project('shawn', 'fasion-sweep')\n", "run_ids = project.runs().id()\n", "\n", - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " preferHorizontal=True,\n", " items={\n", - " \"sidebar\": weave.legacy.weave.panels.Group(\n", + " \"sidebar\": weave_query.panels.Group(\n", " style=\"width: 200px; padding: 16px;\",\n", " items={\n", - " \"run_id\": weave.legacy.weave.panels.ObjectPicker(run_ids, label='run_id'),\n", + " \"run_id\": weave_query.panels.ObjectPicker(run_ids, label='run_id'),\n", " }\n", " ),\n", " #\"main\": lambda sidebar: project.run(sidebar.config.items['run_id'].config.choice).history()\n", - " \"main\": lambda sidebar: weave.legacy.weave.panels.Plot(\n", + " \"main\": lambda sidebar: weave_query.panels.Plot(\n", " project.run(sidebar.config.items['run_id'].config.choice).history(),\n", " x=lambda row: row['_step'],\n", " y=lambda row: row['loss'],\n", diff --git a/weave/legacy/examples/experimental/skip_test/Weave geo data.ipynb b/weave_query/examples/experimental/skip_test/Weave geo data.ipynb similarity index 91% rename from weave/legacy/examples/experimental/skip_test/Weave geo data.ipynb rename to weave_query/examples/experimental/skip_test/Weave geo data.ipynb index fba602aec01..b1394310e82 100644 --- a/weave/legacy/examples/experimental/skip_test/Weave geo data.ipynb +++ b/weave_query/examples/experimental/skip_test/Weave geo data.ipynb @@ -9,7 +9,7 @@ "source": [ "import weave\n", "import pandas as pd\n", - "from weave.legacy.weave.ecosystem import wandb\n", + "from weave_query.ecosystem import wandb\n", "weave.use_frontend_devmode()" ] }, @@ -64,15 +64,15 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Group(\n", + "weave_query.panels.Group(\n", " items={\n", " 'geo': wandb.Geo(data,\n", " x_fn=lambda item: item['Longitude'],\n", " y_fn=lambda item: item[\"Latitude\"],\n", " color_fn=lambda item: item[\"Magnitude\"]),\n", - " 'table': lambda geo: weave.legacy.weave.panels.LabeledItem(\n", + " 'table': lambda geo: weave_query.panels.LabeledItem(\n", " label='Selected items',\n", - " item=weave.legacy.weave.panels.Group(\n", + " item=weave_query.panels.Group(\n", " style=\"height: 400px;\",\n", " preferHorizontal=True,\n", " items={\n", diff --git a/weave/legacy/examples/experimental/skip_test/art_explore.ipynb b/weave_query/examples/experimental/skip_test/art_explore.ipynb similarity index 70% rename from weave/legacy/examples/experimental/skip_test/art_explore.ipynb rename to weave_query/examples/experimental/skip_test/art_explore.ipynb index bf693b598ea..3b3b948c5a0 100644 --- a/weave/legacy/examples/experimental/skip_test/art_explore.ipynb +++ b/weave_query/examples/experimental/skip_test/art_explore.ipynb @@ -32,8 +32,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "from weave.legacy.weave.ecosystem.all import langchain" + "from weave_query import weave_internal\n", + "from weave_query.ecosystem.all import langchain" ] }, { @@ -43,7 +43,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " \"chat_model\": langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", " \"artists\" : [\"René Magritte\", \"Josephine Wall\", \"Android Jones\", \"Alphonse Mucha\", \"Claude Monet\"],\n", @@ -52,7 +52,7 @@ " \"palette\" : [\"red\", \"orange\", \"yellow\", \"green\", \"blue\", \"violet\"],\n", " \"style_riff\": \n", " lambda chat_model, num_works, artists, palette, artist_id:\n", - " weave.legacy.weave.ops.range(0, num_works, 1).map(\n", + " weave_query.ops.range(0, num_works, 1).map(\n", " lambda row:\n", " chat_model.predict(weave_internal.const(\"You are an expert art historian. In a sophisticated, avant-garde art museum, you see pieces in \")\n", " + palette[row] + \" by \" + artists[artist_id]\n", @@ -61,15 +61,15 @@ " ),\n", " \"riff_art\":\n", " lambda style_riff, num_works:\n", - " weave.legacy.weave.ops.range(0, num_works, 1).map(\n", + " weave_query.ops.range(0, num_works, 1).map(\n", " lambda row: style_riff[row]).stable_diffusion(),\n", " \"art_desc\":\n", " lambda riff_art, num_works:\n", - " weave.legacy.weave.ops.range(0, num_works, 1).map(\n", + " weave_query.ops.range(0, num_works, 1).map(\n", " lambda row: riff_art[row]).img2prompt(),\n", " \"desc_title\":\n", " lambda art_desc, num_works, chat_model:\n", - " weave.legacy.weave.ops.range(0, num_works, 1).map(\n", + " weave_query.ops.range(0, num_works, 1).map(\n", " lambda row: chat_model.predict(weave_internal.const(\"Art description: \")\n", " + art_desc[row] + \". Perfect title:\")),\n", " \"R\" : 168,\n", @@ -81,35 +81,35 @@ " + \"). Precise color name:\"),\n", " \"remixed_art\":\n", " lambda desc_title, num_works, color:\n", - " weave.legacy.weave.ops.range(0, num_works, 1).map(\n", + " weave_query.ops.range(0, num_works, 1).map(\n", " lambda row: weave_internal.const(\"a beautiful painting titled \")\n", " + desc_title[row] + \" with more \" + color).stable_diffusion()\n", " \n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda style_riff: weave.legacy.weave.panels.Table(style_riff, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=4, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda style_riff: weave_query.panels.Table(style_riff, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=4, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda riff_art: weave.legacy.weave.panels.Table(riff_art, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=4, y=0, w=6, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda riff_art: weave_query.panels.Table(riff_art, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=4, y=0, w=6, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda art_desc: weave.legacy.weave.panels.Table(art_desc, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=10, y=0, w=4, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda art_desc: weave_query.panels.Table(art_desc, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=10, y=0, w=4, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda desc_title: weave.legacy.weave.panels.Table(desc_title, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=14, y=0, w=4, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda desc_title: weave_query.panels.Table(desc_title, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=14, y=0, w=4, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda remixed_art: weave.legacy.weave.panels.Table(remixed_art, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=18, y=0, w=6, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda remixed_art: weave_query.panels.Table(remixed_art, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=18, y=0, w=6, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda color: weave.legacy.weave.panels.StringEditor(color),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=7, y=16, w=10, h=4)\n", + " weave_query.panels.BoardPanel(\n", + " lambda color: weave_query.panels.StringEditor(color),\n", + " layout=weave_query.panels.BoardPanelLayout(x=7, y=16, w=10, h=4)\n", " ),\n", " \n", " ]\n", diff --git a/weave/legacy/examples/experimental/skip_test/assets/op_preview_via_cursor.png b/weave_query/examples/experimental/skip_test/assets/op_preview_via_cursor.png similarity index 100% rename from weave/legacy/examples/experimental/skip_test/assets/op_preview_via_cursor.png rename to weave_query/examples/experimental/skip_test/assets/op_preview_via_cursor.png diff --git a/weave/legacy/examples/experimental/skip_test/branching_runs.ipynb b/weave_query/examples/experimental/skip_test/branching_runs.ipynb similarity index 89% rename from weave/legacy/examples/experimental/skip_test/branching_runs.ipynb rename to weave_query/examples/experimental/skip_test/branching_runs.ipynb index ac3106dfdc9..4d273613343 100644 --- a/weave/legacy/examples/experimental/skip_test/branching_runs.ipynb +++ b/weave_query/examples/experimental/skip_test/branching_runs.ipynb @@ -9,16 +9,16 @@ "source": [ "import time\n", "import weave\n", - "from weave.legacy.weave.ops_primitives import ArrowWeaveList\n", - "from weave.legacy.weave.ops_domain import RunSegment\n", - "from weave.legacy.weave import storage\n", - "from weave import publish, type_of\n", - "from weave.legacy.weave.weave_types import List\n", + "from weave_query.ops_primitives import ArrowWeaveList\n", + "from weave_query.ops_domain import RunSegment\n", + "from weave_query import storage\n", + "from weave_query import publish, type_of\n", + "from weave_query.weave_types import List\n", "import typing\n", "import time\n", "import sys\n", "import numpy as np\n", - "from weave.legacy.weave.ops import to_arrow\n", + "from weave_query.ops import to_arrow\n", "\n", "import logging\n", "import pyarrow as pa\n", @@ -163,18 +163,18 @@ "metadata": {}, "outputs": [], "source": [ - "plot = weave.legacy.weave.panels.Plot(last_segment.experiment())\n", + "plot = weave_query.panels.Plot(last_segment.experiment())\n", "series = plot.series[-1]\n", "series2 = series.clone()\n", "\n", "plot.add_series(series2)\n", - "plot.set_x(lambda row: weave.legacy.weave.ops.number_bin(row['step'], weave.legacy.weave.ops.numbers_bins_equal([1, 2000], 2)))\n", + "plot.set_x(lambda row: weave_query.ops.number_bin(row['step'], weave_query.ops.numbers_bins_equal([1, 2000], 2)))\n", "\n", - "series.set_y(lambda row: weave.legacy.weave.ops.numbers_avg(row['metric0']))\n", + "series.set_y(lambda row: weave_query.ops.numbers_avg(row['metric0']))\n", "series.set_mark_constant('line')\n", "\n", - "series2.set_y(lambda row: weave.legacy.weave.ops.numbers_min(row['metric0']))\n", - "series2.set_y2(lambda row: weave.legacy.weave.ops.numbers_max(row['metric0']))\n", + "series2.set_y(lambda row: weave_query.ops.numbers_min(row['metric0']))\n", + "series2.set_y2(lambda row: weave_query.ops.numbers_max(row['metric0']))\n", "series2.set_mark_constant('area')\n", "\n", "plot.groupby_x()" diff --git a/weave/legacy/examples/experimental/skip_test/evaluation notebook.ipynb b/weave_query/examples/experimental/skip_test/evaluation notebook.ipynb similarity index 100% rename from weave/legacy/examples/experimental/skip_test/evaluation notebook.ipynb rename to weave_query/examples/experimental/skip_test/evaluation notebook.ipynb diff --git a/weave/legacy/examples/experimental/skip_test/image_gen_replicate.ipynb b/weave_query/examples/experimental/skip_test/image_gen_replicate.ipynb similarity index 95% rename from weave/legacy/examples/experimental/skip_test/image_gen_replicate.ipynb rename to weave_query/examples/experimental/skip_test/image_gen_replicate.ipynb index 8d4c05d0b14..418793f5d1f 100644 --- a/weave/legacy/examples/experimental/skip_test/image_gen_replicate.ipynb +++ b/weave_query/examples/experimental/skip_test/image_gen_replicate.ipynb @@ -19,7 +19,7 @@ "source": [ "# weave-test-skip-all: replicate API is slow and fails sometimes\n", "import os\n", - "from weave.legacy.weave.ecosystem import replicate as weave_replicate" + "from weave_query.ecosystem import replicate as weave_replicate" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/langchain docbot.ipynb b/weave_query/examples/experimental/skip_test/langchain docbot.ipynb similarity index 90% rename from weave/legacy/examples/experimental/skip_test/langchain docbot.ipynb rename to weave_query/examples/experimental/skip_test/langchain docbot.ipynb index ef4eeb10d91..e0873437fdf 100644 --- a/weave/legacy/examples/experimental/skip_test/langchain docbot.ipynb +++ b/weave_query/examples/experimental/skip_test/langchain docbot.ipynb @@ -8,9 +8,9 @@ "outputs": [], "source": [ "import weave\n", - "from weave import trace\n", + "from weave_query import trace\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.ecosystem.all import langchain" + "from weave_query.ecosystem.all import langchain" ] }, { @@ -46,7 +46,7 @@ "outputs": [], "source": [ "from langchain.docstore.document import Document\n", - "documents = weave.legacy.weave.ops.local_path('/Users/shawn/Downloads/documents.jsonl').readjsonl().limit(1000)\n", + "documents = weave_query.ops.local_path('/Users/shawn/Downloads/documents.jsonl').readjsonl().limit(1000)\n", "docs = weave.save([Document(**d) for d in weave.use(documents)], 'documents:latest')\n", "#docs" ] diff --git a/weave/legacy/examples/experimental/skip_test/plot_selection.ipynb b/weave_query/examples/experimental/skip_test/plot_selection.ipynb similarity index 83% rename from weave/legacy/examples/experimental/skip_test/plot_selection.ipynb rename to weave_query/examples/experimental/skip_test/plot_selection.ipynb index dac241c03bc..0c1102b770e 100644 --- a/weave/legacy/examples/experimental/skip_test/plot_selection.ipynb +++ b/weave_query/examples/experimental/skip_test/plot_selection.ipynb @@ -18,13 +18,13 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " items={\n", - " \"plot\": weave.legacy.weave.panels.Plot(weave.legacy.weave.ops.range(1, 100, 1),\n", + " \"plot\": weave_query.panels.Plot(weave_query.ops.range(1, 100, 1),\n", " x=lambda row: row,\n", " y=lambda row: row ** 2,\n", " ),\n", - " \"table\": lambda plot: weave.legacy.weave.panels.panel_plot.selected_rows(plot)\n", + " \"table\": lambda plot: weave_query.panels.panel_plot.selected_rows(plot)\n", " })\n", "\n", "panel" diff --git a/weave/legacy/examples/experimental/skip_test/slurm.ipynb b/weave_query/examples/experimental/skip_test/slurm.ipynb similarity index 95% rename from weave/legacy/examples/experimental/skip_test/slurm.ipynb rename to weave_query/examples/experimental/skip_test/slurm.ipynb index 4429a7285d8..3b95e7e0161 100644 --- a/weave/legacy/examples/experimental/skip_test/slurm.ipynb +++ b/weave_query/examples/experimental/skip_test/slurm.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import slurm" + "from weave_query.ecosystem import slurm" ] }, { diff --git a/weave/legacy/examples/experimental/skip_test/wandbot from scratch.ipynb b/weave_query/examples/experimental/skip_test/wandbot from scratch.ipynb similarity index 100% rename from weave/legacy/examples/experimental/skip_test/wandbot from scratch.ipynb rename to weave_query/examples/experimental/skip_test/wandbot from scratch.ipynb diff --git a/weave/legacy/examples/experimental/skip_test/weave_engine_tracing.ipynb b/weave_query/examples/experimental/skip_test/weave_engine_tracing.ipynb similarity index 74% rename from weave/legacy/examples/experimental/skip_test/weave_engine_tracing.ipynb rename to weave_query/examples/experimental/skip_test/weave_engine_tracing.ipynb index f395535b7de..fa75f160a39 100644 --- a/weave/legacy/examples/experimental/skip_test/weave_engine_tracing.ipynb +++ b/weave_query/examples/experimental/skip_test/weave_engine_tracing.ipynb @@ -18,7 +18,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable" + "from weave_query.wandb_interface.wandb_stream_table import StreamTable" ] }, { @@ -31,35 +31,35 @@ "# set this to the StreamTable your server logs to. Or run as is to use public test data.\n", "spans = StreamTable('shawn/weave-trace-test2/test15').rows()\n", "\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", " 'all_spans': spans,\n", " 'trace_id': '',\n", " 'selected_spans': lambda trace_id, all_spans: all_spans.filter(lambda row: row['trace_id'] == trace_id)\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " # TODO: have to compute all columns we want here, there's no way to\n", " # tell js or python to do auto-columns behavior.\n", " lambda all_spans: all_spans,\n", " id='table',\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " # TODO: have to compute all columns we want here, there's no way to\n", " # tell js or python to do auto-columns behavior.\n", - " lambda all_spans: weave.legacy.weave.panels.Table(\n", + " lambda all_spans: weave_query.panels.Table(\n", " all_spans,\n", " columns=[\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " lambda row: row['trace_id'],\n", " groupby=True,\n", " ),\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " lambda row: row.count(),\n", " name='span count'\n", " ),\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " # TODO: not exact, we need to add duration to get end time, but we don't have an add\n", " # for 2 vectors yet.\n", " lambda row: (row['start_time_ms'].max() - row['start_time_ms'].min()) / 1000,\n", @@ -68,20 +68,20 @@ " ]\n", " ),\n", " id='traces',\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " # TODO: have to compute all columns we want here, there's no way to\n", " # tell js or python to do auto-columns behavior.\n", - " lambda all_spans: weave.legacy.weave.panels.Table(\n", + " lambda all_spans: weave_query.panels.Table(\n", " all_spans,\n", " columns=[\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " lambda row: row['name'],\n", " groupby=True,\n", " ),\n", " lambda row: row.count(),\n", - " weave.legacy.weave.panels.TableColumn(\n", + " weave_query.panels.TableColumn(\n", " # TODO: not exact, we need to add duration to get end time, but we don't have an add\n", " # for 2 vectors yet.\n", " lambda row: (row['start_time_ms'].max() - row['start_time_ms'].min()) / 1000,\n", @@ -90,11 +90,11 @@ " ]\n", " ),\n", " id='spans',\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda selected_spans: weave.legacy.weave.panels.Trace(selected_spans),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=6, w=24, h=6)\n", + " weave_query.panels.BoardPanel(\n", + " lambda selected_spans: weave_query.panels.Trace(selected_spans),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=6, w=24, h=6)\n", " )\n", " ]\n", ")\n", diff --git a/weave/legacy/examples/experimental/skip_test/weave_scifi.ipynb b/weave_query/examples/experimental/skip_test/weave_scifi.ipynb similarity index 71% rename from weave/legacy/examples/experimental/skip_test/weave_scifi.ipynb rename to weave_query/examples/experimental/skip_test/weave_scifi.ipynb index 1c6d8b02736..0d8a3253d00 100644 --- a/weave/legacy/examples/experimental/skip_test/weave_scifi.ipynb +++ b/weave_query/examples/experimental/skip_test/weave_scifi.ipynb @@ -8,8 +8,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal\n", - "from weave.legacy.weave.ecosystem.all import langchain\n", + "from weave_query import weave_internal\n", + "from weave_query.ecosystem.all import langchain\n", "weave.use_frontend_devmode()" ] }, @@ -20,7 +20,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " \"gpt\": langchain.chat_openai(\"gpt-3.5-turbo\", 0.7),\n", " \"viz_style\" : [\"vintage art deco travel poster\",\n", @@ -31,7 +31,7 @@ " \"ml_terms\" : [\"models\", \"datasets\"],\n", " \"prompts\": \n", " lambda gpt, num_rows, ml_terms:\n", - " weave.legacy.weave.ops.range(0, num_rows, 1).map(\n", + " weave_query.ops.range(0, num_rows, 1).map(\n", " lambda row:\n", " gpt.predict(weave_internal.const(\"You are an expert AGI architect describing the most powerful and flexible user interface for working with \")\n", " + ml_terms[row] + \"in machine learning and AI. The three most important features for this are:\")\n", @@ -39,17 +39,17 @@ " ),\n", " \"dream_view\":\n", " lambda prompts, num_rows, viz_style, viz_id:\n", - " weave.legacy.weave.ops.range(0, num_rows, 1).map(\n", + " weave_query.ops.range(0, num_rows, 1).map(\n", " lambda row: weave_internal.const(\"a \") + viz_style[viz_id] + \" of a \" + prompts[row]).stable_diffusion(),\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda prompts: weave.legacy.weave.panels.Table(prompts, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda prompts: weave_query.panels.Table(prompts, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=16)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda dream_view: weave.legacy.weave.panels.Table(dream_view, columns=[lambda col: col]),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=12, y=0, w=12, h=16)\n", + " weave_query.panels.BoardPanel(\n", + " lambda dream_view: weave_query.panels.Table(dream_view, columns=[lambda col: col]),\n", + " layout=weave_query.panels.BoardPanelLayout(x=12, y=0, w=12, h=16)\n", " ),\n", " ]\n", ")" diff --git a/weave/legacy/examples/experimental/skip_test/weave_walkthrough.ipynb b/weave_query/examples/experimental/skip_test/weave_walkthrough.ipynb similarity index 100% rename from weave/legacy/examples/experimental/skip_test/weave_walkthrough.ipynb rename to weave_query/examples/experimental/skip_test/weave_walkthrough.ipynb diff --git a/weave/legacy/examples/experimental/spacy_demo.ipynb b/weave_query/examples/experimental/spacy_demo.ipynb similarity index 94% rename from weave/legacy/examples/experimental/spacy_demo.ipynb rename to weave_query/examples/experimental/spacy_demo.ipynb index bb8b4a4560f..dfc3a954349 100644 --- a/weave/legacy/examples/experimental/spacy_demo.ipynb +++ b/weave_query/examples/experimental/spacy_demo.ipynb @@ -18,7 +18,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.ecosystem.spacy import spacy\n", + "from weave_query.ecosystem.spacy import spacy\n", "\n", "text = \"\"\"Welcome to the spaCy Demo.\\\n", "We currently support the small English language model, \\\n", diff --git a/weave/legacy/examples/experimental/table_data_passing.ipynb b/weave_query/examples/experimental/table_data_passing.ipynb similarity index 77% rename from weave/legacy/examples/experimental/table_data_passing.ipynb rename to weave_query/examples/experimental/table_data_passing.ipynb index 66cedc7efbd..6dc71226fa8 100644 --- a/weave/legacy/examples/experimental/table_data_passing.ipynb +++ b/weave_query/examples/experimental/table_data_passing.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels\n", + "import weave_query.panels\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()" ] @@ -20,32 +20,32 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " items={\n", - " \"table\": weave.legacy.weave.panels.Table(weave.legacy.weave.ops.range(1, 100, 1), \n", + " \"table\": weave_query.panels.Table(weave_query.ops.range(1, 100, 1), \n", " columns=[\n", " lambda row: row,\n", " lambda row: row ** 2,\n", " ],\n", " ),\n", - " \"all_rows\": lambda table: weave.legacy.weave.panels.Plot(table.all_rows(),\n", + " \"all_rows\": lambda table: weave_query.panels.Plot(table.all_rows(),\n", " x=lambda row: row['c_0'],\n", " y=lambda row: row['c_1']\n", " ),\n", - " \"derived\": lambda table: weave.legacy.weave.panels.Group(\n", + " \"derived\": lambda table: weave_query.panels.Group(\n", " preferHorizontal=True,\n", " layoutMode=\"horizontal\",\n", " items={\n", - " \"rows\": weave.legacy.weave.panels.Group(\n", + " \"rows\": weave_query.panels.Group(\n", " items={\n", - " \"pinned_rows\": weave.legacy.weave.panels.Plot(table.pinned_rows(),\n", + " \"pinned_rows\": weave_query.panels.Plot(table.pinned_rows(),\n", " x=lambda row: row['c_0'],\n", " y=lambda row: row['c_1']\n", " ),\n", " \"active_row\": table.active_row(),\n", " }\n", " ),\n", - " \"data\": weave.legacy.weave.panels.Group(\n", + " \"data\": weave_query.panels.Group(\n", " items={\n", " \"pinned_data\": table.pinned_data(),\n", " \"active_data\": table.active_data(),\n", diff --git a/weave/legacy/examples/experimental/tag_search.ipynb b/weave_query/examples/experimental/tag_search.ipynb similarity index 87% rename from weave/legacy/examples/experimental/tag_search.ipynb rename to weave_query/examples/experimental/tag_search.ipynb index e3e7ef3de53..bce316613ad 100644 --- a/weave/legacy/examples/experimental/tag_search.ipynb +++ b/weave_query/examples/experimental/tag_search.ipynb @@ -30,7 +30,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import weave_internal" + "from weave_query import weave_internal" ] }, { @@ -54,11 +54,11 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={\n", " # The strange that we need to use two variables for structuring our tag picker and its value.\n", " 'filter_tags': [],\n", - " 'tag_picker': lambda filter_tags: weave.legacy.weave.panels.SelectEditor(\n", + " 'tag_picker': lambda filter_tags: weave_query.panels.SelectEditor(\n", " filter_tags,\n", " choices=weave_internal.const(['a', 'b', 'c'])\n", " ),\n", @@ -66,13 +66,13 @@ " 'filtered_data': lambda data, filter_tags: data.filter(\n", " # We don't currently have an intersection op, so we have to write the logic for it here.\n", " # This will probably not vectorize currently, so will be slower on large amounts of data.\n", - " lambda row: weave.legacy.weave.ops.List.concat(weave.legacy.weave.ops.make_list(a=row['tags'], b=filter_tags)).unique().count()\n", + " lambda row: weave_query.ops.List.concat(weave_query.ops.make_list(a=row['tags'], b=filter_tags)).unique().count()\n", " < (row['tags'].count() + filter_tags.count())\n", " )\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", - " lambda filtered_data: weave.legacy.weave.panels.Table(\n", + " weave_query.panels.BoardPanel(\n", + " lambda filtered_data: weave_query.panels.Table(\n", " filtered_data,\n", " columns=[\n", " lambda row: row['x'],\n", diff --git a/weave/legacy/examples/get_started.ipynb b/weave_query/examples/get_started.ipynb similarity index 99% rename from weave/legacy/examples/get_started.ipynb rename to weave_query/examples/get_started.ipynb index 8b8ffbd2bbb..149b1a7f4a8 100644 --- a/weave/legacy/examples/get_started.ipynb +++ b/weave_query/examples/get_started.ipynb @@ -78,7 +78,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.show import show\n", + "from weave_query.show import show\n", "show(iris_df)" ] }, diff --git a/weave/legacy/examples/reference/WB_API.ipynb b/weave_query/examples/reference/WB_API.ipynb similarity index 66% rename from weave/legacy/examples/reference/WB_API.ipynb rename to weave_query/examples/reference/WB_API.ipynb index d97e0eb952c..8d03b7e0cf0 100644 --- a/weave/legacy/examples/reference/WB_API.ipynb +++ b/weave_query/examples/reference/WB_API.ipynb @@ -8,9 +8,9 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels\n", - "import weave.legacy.weave.ops\n", - "from weave.legacy.weave.show import show" + "import weave_query.panels\n", + "import weave_query.ops\n", + "from weave_query.show import show" ] }, { @@ -20,7 +20,7 @@ "metadata": {}, "outputs": [], "source": [ - "project = weave.legacy.weave.ops.project('stacey', \"mendeleev\")\n", + "project = weave_query.ops.project('stacey', \"mendeleev\")\n", "#project" ] }, @@ -31,9 +31,9 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Table(weave.legacy.weave.ops.project('stacey', \"mendeleev\").artifactType('test_results').artifacts(),\n", + "panel = weave_query.panels.Table(weave_query.ops.project('stacey', \"mendeleev\").artifactType('test_results').artifacts(),\n", " columns=[\n", - " lambda art: weave.legacy.weave.ops.artifact_collection_ops.artifact_name(art), # hack to get around shadowed `name` op\n", + " lambda art: weave_query.ops.artifact_collection_ops.artifact_name(art), # hack to get around shadowed `name` op\n", " lambda art: art.versions().count()\n", " ])\n", "show(panel)" @@ -46,7 +46,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.project('stacey', \"mendeleev\").artifactType('test_results').artifacts()[0].versions()[0].file('test_results.table.json')" + "weave_query.ops.project('stacey', \"mendeleev\").artifactType('test_results').artifacts()[0].versions()[0].file('test_results.table.json')" ] }, { @@ -56,7 +56,7 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.ops.project('shawn', \"dsviz-simple-tables\").artifactType('dataset').artifacts()[0].versions()[5].file('my-table.table.json')" + "weave_query.ops.project('shawn', \"dsviz-simple-tables\").artifactType('dataset').artifacts()[0].versions()[5].file('my-table.table.json')" ] } ], diff --git a/weave/legacy/examples/reference/basic_weave_types.ipynb b/weave_query/examples/reference/basic_weave_types.ipynb similarity index 100% rename from weave/legacy/examples/reference/basic_weave_types.ipynb rename to weave_query/examples/reference/basic_weave_types.ipynb diff --git a/weave/legacy/examples/reference/confusion_matrix.ipynb b/weave_query/examples/reference/confusion_matrix.ipynb similarity index 95% rename from weave/legacy/examples/reference/confusion_matrix.ipynb rename to weave_query/examples/reference/confusion_matrix.ipynb index e0305d4fd6f..aa00d50b3dc 100644 --- a/weave/legacy/examples/reference/confusion_matrix.ipynb +++ b/weave_query/examples/reference/confusion_matrix.ipynb @@ -40,7 +40,7 @@ "import wandb\n", "wandb.login()\n", "import weave\n", - "import weave.legacy.weave.panels" + "import weave_query.panels" ] }, { @@ -90,7 +90,7 @@ "metadata": {}, "outputs": [], "source": [ - "predictions = (weave.legacy.weave.ops.project(ENTITY, PROJECT)\n", + "predictions = (weave_query.ops.project(ENTITY, PROJECT)\n", " .artifactType(ARTIFACT_TYPE)\n", " .artifacts()[0]\n", " .versions()[0]\n", @@ -131,19 +131,19 @@ "outputs": [], "source": [ "def confusion_matrix(table_data):\n", - " conf_mat = weave.legacy.weave.panels.Group(\n", + " conf_mat = weave_query.panels.Group(\n", " equalSize=True,\n", " preferHorizontal=True,\n", " items={\n", - " 'confusion': weave.legacy.weave.panels.Facet(\n", + " 'confusion': weave_query.panels.Facet(\n", " table_data,\n", " x=lambda row: row[\"truth\"],\n", " y=lambda row: row[\"guess\"],\n", - " select=lambda row: weave.legacy.weave.panels.Group(\n", + " select=lambda row: weave_query.panels.Group(\n", " layoutMode='layer',\n", " items={\n", " 'count': row.count(),\n", - " 'color': weave.legacy.weave.panels.Color(row.count() / 50)\n", + " 'color': weave_query.panels.Color(row.count() / 50)\n", " }\n", " )\n", " ),\n", diff --git a/weave/legacy/examples/reference/control/Object Picker.ipynb b/weave_query/examples/reference/control/Object Picker.ipynb similarity index 71% rename from weave/legacy/examples/reference/control/Object Picker.ipynb rename to weave_query/examples/reference/control/Object Picker.ipynb index abe0dca0244..b3518270ad2 100644 --- a/weave/legacy/examples/reference/control/Object Picker.ipynb +++ b/weave_query/examples/reference/control/Object Picker.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels" + "import weave_query.panels" ] }, { @@ -28,11 +28,11 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " showExpressions=False,\n", " items={\n", - " \"a\": weave.legacy.weave.panels.ObjectPicker(ints, label=\"a\"),\n", - " \"b\": weave.legacy.weave.panels.ObjectPicker(ints, label=\"b\"),\n", + " \"a\": weave_query.panels.ObjectPicker(ints, label=\"a\"),\n", + " \"b\": weave_query.panels.ObjectPicker(ints, label=\"b\"),\n", " \"panel\": lambda a, b: a.config.choice + b.config.choice\n", " })\n", "panel" @@ -47,44 +47,44 @@ "source": [ "# A more complex example with sidebar\n", "\n", - "# ints = weave.legacy.weave.ops.objects(weave.types.Int(), 'latest', 9)\n", + "# ints = weave_query.ops.objects(weave.types.Int(), 'latest', 9)\n", "# weave.use(ints[0])\n", "ints = weave.save([1, 2, 3], name='ints:latest')\n", - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " preferHorizontal=True,\n", " equalSize=True,\n", " items={\n", - " \"sidebar\": weave.legacy.weave.panels.Group(\n", + " \"sidebar\": weave_query.panels.Group(\n", " items={\n", - " \"a\": weave.legacy.weave.panels.ObjectPicker(ints, label=\"A\"),\n", - " \"b\": weave.legacy.weave.panels.ObjectPicker(ints, label=\"B\")\n", + " \"a\": weave_query.panels.ObjectPicker(ints, label=\"A\"),\n", + " \"b\": weave_query.panels.ObjectPicker(ints, label=\"B\")\n", " }\n", " ),\n", - " \"main\": lambda sidebar: weave.legacy.weave.panels.Group(\n", + " \"main\": lambda sidebar: weave_query.panels.Group(\n", " items={\n", - " \"choice_values\": weave.legacy.weave.panels.Group(\n", + " \"choice_values\": weave_query.panels.Group(\n", " preferHorizontal=True,\n", " style=\"height:150px\",\n", " items={\n", - " 'choice_a': weave.legacy.weave.panels.LabeledItem(\n", + " 'choice_a': weave_query.panels.LabeledItem(\n", " label=\"A\",\n", " item=sidebar.config.items['a'].config.choice.execute()\n", " ),\n", - " 'choice_b': weave.legacy.weave.panels.LabeledItem(\n", + " 'choice_b': weave_query.panels.LabeledItem(\n", " label=\"B\",\n", " item=sidebar.config.items['b'].config.choice.execute()\n", " )\n", " }\n", " ),\n", - " \"aggregates\": weave.legacy.weave.panels.Group(\n", + " \"aggregates\": weave_query.panels.Group(\n", " preferHorizontal=True,\n", " style=\"height:150px\",\n", " items={\n", - " 'sum': weave.legacy.weave.panels.LabeledItem(\n", + " 'sum': weave_query.panels.LabeledItem(\n", " label='sum',\n", " item=sidebar.config.items['a'].config.choice + sidebar.config.items['b'].config.choice\n", " ),\n", - " 'product': weave.legacy.weave.panels.LabeledItem(\n", + " 'product': weave_query.panels.LabeledItem(\n", " label='product',\n", " item=sidebar.config.items['a'].config.choice * sidebar.config.items['b'].config.choice\n", " )\n", diff --git a/weave/legacy/examples/reference/control/Slider.ipynb b/weave_query/examples/reference/control/Slider.ipynb similarity index 97% rename from weave/legacy/examples/reference/control/Slider.ipynb rename to weave_query/examples/reference/control/Slider.ipynb index 43664e12d6d..f6a84beb1fe 100644 --- a/weave/legacy/examples/reference/control/Slider.ipynb +++ b/weave_query/examples/reference/control/Slider.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import panels" + "from weave_query import panels" ] }, { diff --git a/weave/legacy/examples/reference/create_ops.ipynb b/weave_query/examples/reference/create_ops.ipynb similarity index 100% rename from weave/legacy/examples/reference/create_ops.ipynb rename to weave_query/examples/reference/create_ops.ipynb diff --git a/weave/legacy/examples/reference/create_plots_ui_guide.ipynb b/weave_query/examples/reference/create_plots_ui_guide.ipynb similarity index 99% rename from weave/legacy/examples/reference/create_plots_ui_guide.ipynb rename to weave_query/examples/reference/create_plots_ui_guide.ipynb index faf00a0b6d3..55f67f6de70 100644 --- a/weave/legacy/examples/reference/create_plots_ui_guide.ipynb +++ b/weave_query/examples/reference/create_plots_ui_guide.ipynb @@ -39,7 +39,7 @@ "import wandb\n", "wandb.login()\n", "import weave\n", - "from weave.legacy.weave.show import show" + "from weave_query.show import show" ] }, { diff --git a/weave/legacy/examples/reference/layout/Each.ipynb b/weave_query/examples/reference/layout/Each.ipynb similarity index 93% rename from weave/legacy/examples/reference/layout/Each.ipynb rename to weave_query/examples/reference/layout/Each.ipynb index 87429d18843..1b70b562c3e 100644 --- a/weave/legacy/examples/reference/layout/Each.ipynb +++ b/weave_query/examples/reference/layout/Each.ipynb @@ -9,8 +9,8 @@ "source": [ "from PIL import Image\n", "import weave\n", - "from weave.legacy.scripts import syndata\n", - "from weave.legacy.weave import panels" + "from weave_query.scripts import syndata\n", + "from weave_query import panels" ] }, { diff --git a/weave/legacy/examples/reference/layout/Group & LabeledItem.ipynb b/weave_query/examples/reference/layout/Group & LabeledItem.ipynb similarity index 54% rename from weave/legacy/examples/reference/layout/Group & LabeledItem.ipynb rename to weave_query/examples/reference/layout/Group & LabeledItem.ipynb index 890e9b76bd3..7947693f650 100644 --- a/weave/legacy/examples/reference/layout/Group & LabeledItem.ipynb +++ b/weave_query/examples/reference/layout/Group & LabeledItem.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels" + "import weave_query.panels" ] }, { @@ -19,18 +19,18 @@ "outputs": [], "source": [ "# Group example\n", - "weave.legacy.weave.panels.Group(\n", + "weave_query.panels.Group(\n", " items={\n", - " '0': weave.legacy.weave.panels.Group(\n", + " '0': weave_query.panels.Group(\n", " preferHorizontal=True,\n", " items={\n", - " '0': weave.legacy.weave.panels.LabeledItem(item='item1', label='label1'),\n", - " '1': weave.legacy.weave.panels.LabeledItem(item='item2', label='label2'),\n", - " '2': weave.legacy.weave.panels.LabeledItem(item='item3', label='label3'),\n", + " '0': weave_query.panels.LabeledItem(item='item1', label='label1'),\n", + " '1': weave_query.panels.LabeledItem(item='item2', label='label2'),\n", + " '2': weave_query.panels.LabeledItem(item='item3', label='label3'),\n", " }\n", " ),\n", - " '1': weave.legacy.weave.panels.LabeledItem(item='item4', label='label4'),\n", - " '2': weave.legacy.weave.panels.LabeledItem(item='item5', label='label5')\n", + " '1': weave_query.panels.LabeledItem(item='item4', label='label4'),\n", + " '2': weave_query.panels.LabeledItem(item='item5', label='label5')\n", " }\n", ")" ] diff --git a/weave/legacy/examples/reference/markdown.ipynb b/weave_query/examples/reference/markdown.ipynb similarity index 80% rename from weave/legacy/examples/reference/markdown.ipynb rename to weave_query/examples/reference/markdown.ipynb index a047c4186fb..aa1d80d1e18 100644 --- a/weave/legacy/examples/reference/markdown.ipynb +++ b/weave_query/examples/reference/markdown.ipynb @@ -17,10 +17,10 @@ "metadata": {}, "outputs": [], "source": [ - "weave.legacy.weave.panels.Board(\n", + "weave_query.panels.Board(\n", " vars={},\n", - " panels=[weave.legacy.weave.panels.BoardPanel(\n", - " weave.legacy.weave.panels.PanelString(\"## I am markdown\\n\\nHear me roar\", mode=\"markdown\"),\n", + " panels=[weave_query.panels.BoardPanel(\n", + " weave_query.panels.PanelString(\"## I am markdown\\n\\nHear me roar\", mode=\"markdown\"),\n", " id='some_markdown')\n", " ])" ] diff --git a/weave/legacy/examples/reference/panels/plot/synced_axes.ipynb b/weave_query/examples/reference/panels/plot/synced_axes.ipynb similarity index 85% rename from weave/legacy/examples/reference/panels/plot/synced_axes.ipynb rename to weave_query/examples/reference/panels/plot/synced_axes.ipynb index ed3d030632d..780af0b8c12 100644 --- a/weave/legacy/examples/reference/panels/plot/synced_axes.ipynb +++ b/weave_query/examples/reference/panels/plot/synced_axes.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "import weave.legacy.weave.panels" + "import weave_query.panels" ] }, { @@ -18,7 +18,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.scripts import syndata" + "from weave_query.scripts import syndata" ] }, { @@ -39,8 +39,8 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave import ops_arrow\n", - "from weave.legacy.weave.ecosystem import wandb\n", + "from weave_query import ops_arrow\n", + "from weave_query.ecosystem import wandb\n", "import datetime\n", "import random\n", "random.seed(1)\n", @@ -88,20 +88,20 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.panels.panel_plot import Signals, AxisSelections, Plot\n", - "from weave.legacy.weave import weave_internal\n", + "from weave_query.panels.panel_plot import Signals, AxisSelections, Plot\n", + "from weave_query import weave_internal\n", "\n", "\n", "domain_node = weave_internal.const(None)\n", "#domain_node = weave_internal.save(None)\n", "\n", - "board = weave.legacy.weave.panels.Board(\n", + "board = weave_query.panels.Board(\n", " vars={\n", " 'predictions': items,\n", " 'domain': domain_node,\n", " },\n", " panels=[\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, domain: Plot(\n", " predictions,\n", " x=lambda row: row[\"time\"],\n", @@ -110,9 +110,9 @@ " mark=\"point\",\n", " domain_x=domain,\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=12)\n", " ),\n", - " weave.legacy.weave.panels.BoardPanel(\n", + " weave_query.panels.BoardPanel(\n", " lambda predictions, domain: Plot(\n", " predictions,\n", " x=lambda row: row[\"time\"],\n", @@ -121,7 +121,7 @@ " mark=\"point\",\n", " domain_x=domain,\n", " ),\n", - " layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=12, h=12)\n", + " layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=12, h=12)\n", " ), \n", " ]\n", ")\n", diff --git a/weave/legacy/examples/reference/vis/Distribution.ipynb b/weave_query/examples/reference/vis/Distribution.ipynb similarity index 96% rename from weave/legacy/examples/reference/vis/Distribution.ipynb rename to weave_query/examples/reference/vis/Distribution.ipynb index ea96aa5fc5a..81d64b9e127 100644 --- a/weave/legacy/examples/reference/vis/Distribution.ipynb +++ b/weave_query/examples/reference/vis/Distribution.ipynb @@ -11,7 +11,7 @@ "import weave\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\\n\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.ecosystem import wandb" ] }, { @@ -41,7 +41,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave import weave_internal\n", + "from weave_query import weave_internal\n", "# Numeric distribution\n", "dist = wandb.Distribution(\n", " items,\n", diff --git a/weave/legacy/examples/reference/vis/Scatter.ipynb b/weave_query/examples/reference/vis/Scatter.ipynb similarity index 84% rename from weave/legacy/examples/reference/vis/Scatter.ipynb rename to weave_query/examples/reference/vis/Scatter.ipynb index 6d11b709d1b..f8519e0fbc1 100644 --- a/weave/legacy/examples/reference/vis/Scatter.ipynb +++ b/weave_query/examples/reference/vis/Scatter.ipynb @@ -9,11 +9,11 @@ "source": [ "import random\n", "import weave\n", - "import weave.legacy.weave.panels\n", - "from weave.legacy.weave.show import show\n", + "import weave_query.panels\n", + "from weave_query.show import show\n", "# Weave package now defaults to eager mode, but lazy mode required for this example notebook for now.\n", "weave.use_lazy_execution()\n", - "from weave.legacy.weave.ecosystem import wandb" + "from weave_query.ecosystem import wandb" ] }, { @@ -39,33 +39,33 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " items={\n", " 'scatter': wandb.Scatter(data,\n", " x_fn=lambda item: item['a'],\n", " y_fn=lambda item: item['b'],\n", " label_fn=lambda item: item['e']\n", " ),\n", - " 'detail': lambda scatter: weave.legacy.weave.panels.Group(\n", + " 'detail': lambda scatter: weave_query.panels.Group(\n", " style=\"height: 400px;\",\n", " preferHorizontal=True,\n", " items={\n", - " 'a_dist': weave.legacy.weave.panels.LabeledItem(\n", + " 'a_dist': weave_query.panels.LabeledItem(\n", " label='Distribution for metric a in selection',\n", " item=wandb.Distribution(scatter.selected(),\n", " value_fn=lambda item: item['a'],\n", " label_fn=lambda item: item['e'],\n", " bin_size=0.1)),\n", - " 'b_dist': weave.legacy.weave.panels.LabeledItem(\n", + " 'b_dist': weave_query.panels.LabeledItem(\n", " label='Distribution for metric b in selection',\n", " item=wandb.Distribution(scatter.selected(),\n", " value_fn=lambda item: item['b'],\n", " label_fn=lambda item: item['e'],\n", " bin_size=0.1))\n", " }),\n", - " 'table': lambda scatter: weave.legacy.weave.panels.LabeledItem(\n", + " 'table': lambda scatter: weave_query.panels.LabeledItem(\n", " label='Selected items',\n", - " item=weave.legacy.weave.panels.Group(\n", + " item=weave_query.panels.Group(\n", " style=\"height: 400px;\",\n", " preferHorizontal=True,\n", " items={\n", diff --git a/weave/legacy/examples/reference/vis/derived_plots_from_tables.ipynb b/weave_query/examples/reference/vis/derived_plots_from_tables.ipynb similarity index 80% rename from weave/legacy/examples/reference/vis/derived_plots_from_tables.ipynb rename to weave_query/examples/reference/vis/derived_plots_from_tables.ipynb index 638de728518..ea9ef7d1f6c 100644 --- a/weave/legacy/examples/reference/vis/derived_plots_from_tables.ipynb +++ b/weave_query/examples/reference/vis/derived_plots_from_tables.ipynb @@ -8,7 +8,7 @@ "outputs": [], "source": [ "import weave\n", - "from weave.legacy.weave.ecosystem import wandb\n", + "from weave_query.ecosystem import wandb\n", "\n", "# Group tags are broken with caching\n", "# import os \n", @@ -22,7 +22,7 @@ "metadata": {}, "outputs": [], "source": [ - "table = weave.legacy.weave.panels.Table(list(range(100)))\n", + "table = weave_query.panels.Table(list(range(100)))\n", "\n", "# Add Filter\n", "table.config.tableState.set_filter_fn(lambda i: i < 50)\n", @@ -40,12 +40,12 @@ "table.config.tableState.enable_sort(group_col_id)\n", "\n", "\n", - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " layoutMode='horizontal',\n", " items={\n", " \"table\": table,\n", "# \"table_2\": lambda table: table.rows()[0]['col_name_a']\n", - " \"plot\": lambda table: weave.legacy.weave.panels.Plot(\n", + " \"plot\": lambda table: weave_query.panels.Plot(\n", " table.all_rows(),\n", " x=lambda row: row['col_name_a'],\n", " y=lambda row: row['col_name_b'],\n", @@ -62,21 +62,21 @@ "metadata": {}, "outputs": [], "source": [ - "panel = weave.legacy.weave.panels.Group(\n", + "panel = weave_query.panels.Group(\n", " layoutMode='horizontal',\n", " items={\n", - " \"table\": weave.legacy.weave.panels.Table(list(range(100)), columns=[\n", + " \"table\": weave_query.panels.Table(list(range(100)), columns=[\n", " lambda i: i,\n", " lambda i: i**2,\n", " lambda i: i * 0 + 1\n", " ]),\n", - " \"table_2\": lambda table: weave.legacy.weave.panels.Table(table.all_rows(), columns=[\n", + " \"table_2\": lambda table: weave_query.panels.Table(table.all_rows(), columns=[\n", " lambda i: table.all_rows()['c_0'].max() - i['c_0'],\n", " lambda i: i['c_1'] / 2,\n", " lambda i: i['c_2'] - 2\n", " ]),\n", - " \"plot\": lambda table, table_2: weave.legacy.weave.panels.Plot(\n", - " weave.legacy.weave.ops.make_list(a=table.all_rows(), b=table_2.all_rows()).concat(),\n", + " \"plot\": lambda table, table_2: weave_query.panels.Plot(\n", + " weave_query.ops.make_list(a=table.all_rows(), b=table_2.all_rows()).concat(),\n", " x=lambda row: row['c_0'],\n", " y=lambda row: row['c_1'],\n", " color=lambda row: row['c_2']\n", diff --git a/weave/legacy/internal_tools/Module deps viz.ipynb b/weave_query/internal_tools/Module deps viz.ipynb similarity index 100% rename from weave/legacy/internal_tools/Module deps viz.ipynb rename to weave_query/internal_tools/Module deps viz.ipynb diff --git a/weave/legacy/internal_tools/generate_notebook_tests.py b/weave_query/internal_tools/generate_notebook_tests.py similarity index 100% rename from weave/legacy/internal_tools/generate_notebook_tests.py rename to weave_query/internal_tools/generate_notebook_tests.py diff --git a/weave/legacy/make_class_diagram.sh b/weave_query/make_class_diagram.sh similarity index 100% rename from weave/legacy/make_class_diagram.sh rename to weave_query/make_class_diagram.sh diff --git a/mypy.ini b/weave_query/mypy.ini similarity index 100% rename from mypy.ini rename to weave_query/mypy.ini diff --git a/weave/legacy/notebooks/Embeddings.ipynb b/weave_query/notebooks/Embeddings.ipynb similarity index 100% rename from weave/legacy/notebooks/Embeddings.ipynb rename to weave_query/notebooks/Embeddings.ipynb diff --git a/weave/legacy/notebooks/Eval Board Syn.ipynb b/weave_query/notebooks/Eval Board Syn.ipynb similarity index 80% rename from weave/legacy/notebooks/Eval Board Syn.ipynb rename to weave_query/notebooks/Eval Board Syn.ipynb index 6a7ea54e9e6..f9b7d60b264 100644 --- a/weave/legacy/notebooks/Eval Board Syn.ipynb +++ b/weave_query/notebooks/Eval Board Syn.ipynb @@ -25,7 +25,7 @@ "import weave\n", "\n", "weave.use_frontend_devmode()\n", - "from weave.legacy.weave.panels import panel_board" + "from weave_query.panels import panel_board" ] }, { @@ -134,32 +134,32 @@ "\n", "summary = varbar.add(\n", " \"summary\",\n", - " weave.legacy.weave.ops.make_list(\n", - " a=weave.legacy.weave.ops.TypedDict.merge(\n", - " weave.legacy.weave.ops.dict_(name=\"res0\"), eval_result0_var[\"summary\"]\n", + " weave_query.ops.make_list(\n", + " a=weave_query.ops.TypedDict.merge(\n", + " weave_query.ops.dict_(name=\"res0\"), eval_result0_var[\"summary\"]\n", " ),\n", - " b=weave.legacy.weave.ops.TypedDict.merge(\n", - " weave.legacy.weave.ops.dict_(name=\"res1\"), eval_result1_var[\"summary\"]\n", + " b=weave_query.ops.TypedDict.merge(\n", + " weave_query.ops.dict_(name=\"res1\"), eval_result1_var[\"summary\"]\n", " ),\n", " ),\n", ")\n", "\n", - "weave.legacy.weave.ops.make_list(\n", + "weave_query.ops.make_list(\n", " a=eval_result0_var[\"eval_table\"], b=eval_result0_var[\"eval_table\"]\n", ")\n", "\n", "concatted_evals = varbar.add(\n", " \"concatted_evals\",\n", - " weave.legacy.weave.ops.List.concat(\n", - " weave.legacy.weave.ops.make_list(\n", + " weave_query.ops.List.concat(\n", + " weave_query.ops.make_list(\n", " a=eval_result0_var[\"eval_table\"].map(\n", - " lambda row: weave.legacy.weave.ops.TypedDict.merge(\n", - " weave.legacy.weave.ops.dict_(name=\"res0\"), row\n", + " lambda row: weave_query.ops.TypedDict.merge(\n", + " weave_query.ops.dict_(name=\"res0\"), row\n", " )\n", " ),\n", " b=eval_result1_var[\"eval_table\"].map(\n", - " lambda row: weave.legacy.weave.ops.TypedDict.merge(\n", - " weave.legacy.weave.ops.dict_(name=\"res1\"), row\n", + " lambda row: weave_query.ops.TypedDict.merge(\n", + " weave_query.ops.dict_(name=\"res1\"), row\n", " )\n", " ),\n", " )\n", @@ -169,8 +169,8 @@ "# join evals together first\n", "joined_evals = varbar.add(\n", " \"joined_evals\",\n", - " weave.legacy.weave.ops.join_all(\n", - " weave.legacy.weave.ops.make_list(\n", + " weave_query.ops.join_all(\n", + " weave_query.ops.make_list(\n", " a=eval_result0_var[\"eval_table\"], b=eval_result1_var[\"eval_table\"]\n", " ),\n", " lambda row: row[\"dataset_id\"],\n", @@ -181,7 +181,7 @@ "# then join dataset to evals\n", "dataset_evals = varbar.add(\n", " \"dataset_evals\",\n", - " weave.legacy.weave.ops.join_2(\n", + " weave_query.ops.join_2(\n", " dataset_var,\n", " joined_evals,\n", " lambda row: row[\"id\"],\n", @@ -194,7 +194,7 @@ ")\n", "\n", "\n", - "main = weave.legacy.weave.panels.Group(\n", + "main = weave_query.panels.Group(\n", " layoutMode=\"grid\",\n", " showExpressions=True,\n", " enableAddPanel=True,\n", @@ -206,38 +206,38 @@ "\n", "main.add(\n", " \"accuracy\",\n", - " weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.Plot(\n", " summary,\n", " x=lambda row: row[\"accuracy\"],\n", " y=lambda row: row[\"name\"],\n", " color=lambda row: row[\"name\"],\n", " ),\n", - " layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=0, w=12, h=4),\n", + " layout=weave_query.panels.GroupPanelLayout(x=0, y=0, w=12, h=4),\n", ")\n", "\n", "\n", "main.add(\n", " \"latency\",\n", - " weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.Plot(\n", " concatted_evals,\n", " x=lambda row: row[\"summary\"][\"latency\"],\n", " y=lambda row: row[\"name\"],\n", " color=lambda row: row[\"name\"],\n", " mark=\"boxplot\",\n", " ),\n", - " layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=0, w=12, h=4),\n", + " layout=weave_query.panels.GroupPanelLayout(x=12, y=0, w=12, h=4),\n", ")\n", "\n", - "# ct = main.add('concat_t', concatted_evals, layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=24, h=12))\n", + "# ct = main.add('concat_t', concatted_evals, layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=24, h=12))\n", "# main.add('dataset_table', dataset)\n", "# main.add('joined_evals', joined_evals)\n", - "# main.add('dataset_evals', dataset_evals, layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=24, h=6))\n", + "# main.add('dataset_evals', dataset_evals, layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=24, h=6))\n", "\n", "##### Example details\n", "\n", "# more ideas: show examples that all got wrong, or that are confusing\n", "\n", - "faceted_view = weave.legacy.weave.panels.Facet(\n", + "faceted_view = weave_query.panels.Facet(\n", " dataset_evals,\n", " x=lambda row: row[\"evals.summary\"][0][\"correct\"],\n", " y=lambda row: row[\"evals.summary\"][1][\"correct\"],\n", @@ -247,38 +247,38 @@ "faceted = main.add(\n", " \"faceted\",\n", " faceted_view,\n", - " layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=12, h=6),\n", + " layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=12, h=6),\n", ")\n", "\n", "main.add(\n", " \"example_latencies\",\n", - " weave.legacy.weave.panels.Plot(\n", + " weave_query.panels.Plot(\n", " dataset_evals,\n", " x=lambda row: row[\"evals.summary\"][\"latency\"][0],\n", " y=lambda row: row[\"evals.summary\"][\"latency\"][1],\n", " ),\n", - " layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=4, w=12, h=6),\n", + " layout=weave_query.panels.GroupPanelLayout(x=12, y=4, w=12, h=6),\n", ")\n", "\n", - "faceted_sel = weave.legacy.weave.panels.Table(faceted.selected())\n", + "faceted_sel = weave_query.panels.Table(faceted.selected())\n", "faceted_sel.config.rowSize = 2\n", "faceted_sel.add_column(lambda row: row[\"dataset.id\"], \"id\")\n", "faceted_sel.add_column(lambda row: row[\"dataset.example\"], \"example\")\n", "faceted_sel.add_column(lambda row: row[\"dataset.label\"], \"label\")\n", "faceted_sel.add_column(\n", - " lambda row: weave.legacy.weave.ops.dict_(\n", + " lambda row: weave_query.ops.dict_(\n", " res0=row[\"evals.result\"][0], res1=row[\"evals.result\"][1]\n", " ),\n", " \"result\",\n", ")\n", "faceted_sel.add_column(\n", - " lambda row: weave.legacy.weave.ops.dict_(\n", + " lambda row: weave_query.ops.dict_(\n", " res0=row[\"evals.summary\"][0][\"correct\"], res1=row[\"evals.summary\"][1][\"correct\"]\n", " ),\n", " \"correct\",\n", ")\n", "faceted_sel.add_column(\n", - " lambda row: weave.legacy.weave.ops.dict_(\n", + " lambda row: weave_query.ops.dict_(\n", " res0=row[\"evals.summary\"][0][\"latency\"], res1=row[\"evals.summary\"][1][\"latency\"]\n", " ),\n", " \"latency\",\n", @@ -287,10 +287,10 @@ "main.add(\n", " \"faceted_sel\",\n", " faceted_sel,\n", - " layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=10, w=24, h=12),\n", + " layout=weave_query.panels.GroupPanelLayout(x=0, y=10, w=24, h=12),\n", ")\n", "\n", - "weave.legacy.weave.panels.Board(vars=varbar, panels=main)" + "weave_query.panels.Board(vars=varbar, panels=main)" ] } ], diff --git a/weave_query/notebooks/Eval Board.ipynb b/weave_query/notebooks/Eval Board.ipynb new file mode 100644 index 00000000000..6c7cc8c215d --- /dev/null +++ b/weave_query/notebooks/Eval Board.ipynb @@ -0,0 +1,163 @@ +{ + "cells": [ + { + "cell_type": "code", + "execution_count": 61, + "id": "314bb6b4", + "metadata": {}, + "outputs": [], + "source": [ + "import typing\n", + "\n", + "import weave\n", + "from weave_query import weave_internal\n", + "\n", + "weave.use_frontend_devmode()\n", + "from weave_query import ops_domain\n", + "from weave_query.panels import panel_board" + ] + }, + { + "cell_type": "code", + "execution_count": 62, + "id": "550daef6", + "metadata": {}, + "outputs": [], + "source": [ + "@weave.type()\n", + "class Dataset:\n", + " rows: list[typing.Any]" + ] + }, + { + "cell_type": "code", + "execution_count": 64, + "id": "e8065ad6", + "metadata": {}, + "outputs": [ + { + "data": { + "text/html": [ + "\n", + " \n", + " " + ], + "text/plain": [ + "" + ] + }, + "metadata": {}, + "output_type": "display_data" + } + ], + "source": [ + "varbar = panel_board.varbar()\n", + "\n", + "entity_name_val = varbar.add(\"entity_name_val\", \"shawn\", hidden=True)\n", + "entity = ops_domain.entity(entity_name_val)\n", + "entity_name = varbar.add(\n", + " \"entity_name\",\n", + " weave_query.panels.Dropdown(\n", + " entity_name_val, choices=ops_domain.viewer().entities().name()\n", + " ),\n", + ")\n", + "\n", + "project_name_val = varbar.add(\"project_name_val\", \"weave-flow1\", hidden=True)\n", + "project = ops_domain.project(entity_name_val, project_name_val)\n", + "project_name = varbar.add(\n", + " \"project_name\",\n", + " weave_query.panels.Dropdown(\n", + " project_name_val, choices=entity.projects().name()\n", + " ),\n", + ")\n", + "\n", + "dataset_name_val = varbar.add(\"dataset_name_val\", \"my_dataset1\", hidden=True)\n", + "dataset = varbar.add(\n", + " \"dataset\",\n", + " weave_query.ops.get(\n", + " weave_internal.const(\"wandb-artifact:///\")\n", + " + entity_name_val\n", + " + \"/\"\n", + " + project_name_val\n", + " + \"/\"\n", + " + dataset_name_val\n", + " + \":latest/obj\"\n", + " ),\n", + " hidden=True,\n", + ")\n", + "dataset_ref = varbar.add(\n", + " \"dataset_ref\",\n", + " weave_query.ops.ref(\n", + " weave_internal.const(\"wandb-artifact:///\")\n", + " + entity_name_val\n", + " + \"/\"\n", + " + project_name_val\n", + " + \"/\"\n", + " + dataset_name_val\n", + " + \":latest/obj\"\n", + " ),\n", + ")\n", + "dataset_name = varbar.add(\n", + " \"dataset_name\",\n", + " weave_query.panels.Dropdown(\n", + " dataset_name_val, choices=project.artifactType(\"Dataset\").artifacts().name()\n", + " ),\n", + ")\n", + "\n", + "# Now here I want to pick model A and model B\n", + "# I need to a way to get to artifact from an object, like get_ref.artifact ?\n", + "# like dataset_ref.artifact().usedBy().filter(lambda row: row.jobName() == 'eval')\n", + "# then from there find consuming runs of a given job_type (\"eval\")\n", + "# let the user pick two of those\n", + "\n", + "# want a really nice data grid of the table metric comparsion per row\n", + "\n", + "main = weave_query.panels.Group(\n", + " layoutMode=\"grid\",\n", + " showExpressions=True,\n", + " enableAddPanel=True,\n", + ")\n", + "\n", + "main.add(\"ename\", entity_name_val)\n", + "main.add(\"pname\", project_name_val)\n", + "main.add(\"dsrows\", weave_query.ops.obj_getattr(dataset, \"rows\"))\n", + "# main.add(\"artifact\", dataset_ref.artifact())\n", + "\n", + "# I Need a programmable Table. One that's columns are defined by Nodes\n", + "# Same for panels, I want to be able to generate a bunch of panels\n", + "# Can I do this with Weaveify?\n", + "# Like I can pass a function in in the Board that returns the panel I want maybe?\n", + "\n", + "weave_query.panels.Board(vars=varbar, panels=main)" + ] + } + ], + "metadata": { + "kernelspec": { + "display_name": "Python 3 (ipykernel)", + "language": "python", + "name": "python3" + }, + "language_info": { + "codemirror_mode": { + "name": "ipython", + "version": 3 + }, + "file_extension": ".py", + "mimetype": "text/x-python", + "name": "python", + "nbconvert_exporter": "python", + "pygments_lexer": "ipython3", + "version": "3.9.7" + } + }, + "nbformat": 4, + "nbformat_minor": 5 +} diff --git a/weave/legacy/notebooks/Text Extraction Eval.ipynb b/weave_query/notebooks/Text Extraction Eval.ipynb similarity index 99% rename from weave/legacy/notebooks/Text Extraction Eval.ipynb rename to weave_query/notebooks/Text Extraction Eval.ipynb index a2d2705eb97..663cece39eb 100644 --- a/weave/legacy/notebooks/Text Extraction Eval.ipynb +++ b/weave_query/notebooks/Text Extraction Eval.ipynb @@ -401,7 +401,7 @@ "metadata": {}, "outputs": [], "source": [ - "from weave.legacy.weave.panels_py import panel_eval\n", + "from weave_query.panels_py import panel_eval\n", "\n", "panel_eval.eval_board(dataset.rows, eval_results0, eval_results2)" ] diff --git a/weave/legacy/perf_notebooks/case_when v if_then_else.ipynb b/weave_query/perf_notebooks/case_when v if_then_else.ipynb similarity index 100% rename from weave/legacy/perf_notebooks/case_when v if_then_else.ipynb rename to weave_query/perf_notebooks/case_when v if_then_else.ipynb diff --git a/weave/legacy/perf_notebooks/pyarrow joinall.ipynb b/weave_query/perf_notebooks/pyarrow joinall.ipynb similarity index 100% rename from weave/legacy/perf_notebooks/pyarrow joinall.ipynb rename to weave_query/perf_notebooks/pyarrow joinall.ipynb diff --git a/weave_query/pyproject.toml b/weave_query/pyproject.toml new file mode 100644 index 00000000000..1b988ec0a93 --- /dev/null +++ b/weave_query/pyproject.toml @@ -0,0 +1,151 @@ +[project] +name = "weave_query" +description = "A toolkit for building composable interactive data driven applications." +readme = "README.md" +license = { text = "Apache-2.0" } +maintainers = [{ name = "W&B", email = "support@wandb.com" }] +authors = [ + { name = "Shawn Lewis", email = "shawn@wandb.com" }, + { name = "Danny Goldstein", email = "danny@wandb.com" }, + { name = "Tim Sweeney", email = "tim@wandb.com" }, + { name = "Nick Peneranda", email = "nick.penaranda@wandb.com" }, +] +classifiers = [ + "Development Status :: 4 - Beta", + "Environment :: Web Environment", + "Framework :: Flask", + "Framework :: Jupyter", + "Intended Audience :: Developers", + "Intended Audience :: Science/Research", + "License :: OSI Approved :: Apache Software License", + "Operating System :: OS Independent", + "Programming Language :: Python", + "Topic :: Database :: Front-Ends", + "Topic :: Office/Business :: Financial :: Spreadsheet", + "Topic :: Scientific/Engineering :: Information Analysis", + "Topic :: Scientific/Engineering :: Visualization", + "Topic :: Software Development :: Libraries :: Application Frameworks", + "Topic :: Software Development :: Widget Sets", +] +requires-python = ">=3.9" +dynamic = ["version", "dependencies", "optional-dependencies"] + +[project.scripts] +weave_query = "weave_query.cli:cli" + +[project.urls] +Company = "https://wandb.com" +Documentation = "https://docs.wandb.com/" +Changes = "https://github.com/wandb/weave_query/releases" +"Source Code" = "https://github.com/wandb/weave_query" +"Issue Tracker" = "https://github.com/wandb/weave_query/issues/" +Twitter = "https://twitter.com/weights_biases" + +[build-system] +requires = ["setuptools>=42", "wheel"] +build-backend = "setuptools.build_meta" + +[tool.setuptools] +packages = ["weave_query"] + +[tool.setuptools.dynamic] +version = { attr = "weave_query.version.VERSION" } +dependencies = { file = ["requirements.txt"] } + +[tool.setuptools.dynamic.optional-dependencies] +examples = { file = ["requirements.legacy.ecosystem.txt"] } +engine = { file = ["requirements.legacy.engine.txt"] } +ecosystem = { file = ["requirements.legacy.ecosystem.txt"] } +datadog = { file = ["requirements.legacy.datadog.txt"] } +modal = { file = ["requirements.modal.txt"] } + +[tool.pytest.ini_options] +testpaths = ["weave_query"] +filterwarnings = ["error"] + +[tool.ruff.lint] +preview = true +select = [ + "D200", # https://docs.astral.sh/ruff/rules/fits-on-one-line/ + "D201", # https://docs.astral.sh/ruff/rules/no-blank-line-before-function/ + "D202", # https://docs.astral.sh/ruff/rules/no-blank-line-after-function/ + "D204", # https://docs.astral.sh/ruff/rules/one-blank-line-after-class/ + "D210", # https://docs.astral.sh/ruff/rules/surrounding-whitespace/ + "D211", # https://docs.astral.sh/ruff/rules/blank-line-before-class/ + "D214", # https://docs.astral.sh/ruff/rules/section-not-over-indented/ + "FIX001", # https://beta.ruff.rs/docs/rules/#flake8-fixme-fix + "FIX003", + "F541", + "I", # https://docs.astral.sh/ruff/rules/#isort-i + "W291", # https://docs.astral.sh/ruff/rules/trailing-whitespace/ + "W391", # https://docs.astral.sh/ruff/rules/too-many-newlines-at-end-of-file/ + "F401", # https://docs.astral.sh/ruff/rules/unused-import/ +] +ignore = [ + "D203", # https://docs.astral.sh/ruff/rules/one-blank-line-before-class/ - we use Google style + "D206", # https://docs.astral.sh/ruff/rules/indent-with-spaces/ - redundant with formatter + "D207", # https://docs.astral.sh/ruff/rules/under-indentation/ - redundant with formatter + "D208", # https://docs.astral.sh/ruff/rules/over-indentation/ - redundant with formatter + "D213", # https://docs.astral.sh/ruff/rules/multi-line-summary-second-line/ - we use Google style + "D215", # https://docs.astral.sh/ruff/rules/section-underline-not-over-indented/ - we use Google style +] +exclude = [ + "weave_query/api.py", + "weave_query/__init__.py", + "weave_query/legacy/**/*.py", + "examples", + "weave_query_query", +] + +[tool.ruff.lint.isort] +known-third-party = ["wandb"] + +[tool.ruff.lint.per-file-ignores] +"weave_query/tests/*" = ["F401"] +"weave_query/weave_query_server.py" = ["F401"] + + +[tool.ruff] +line-length = 88 +show-fixes = true +exclude = [ + "weave_query/query_api.py", + "weave_query/__init__.py", + "weave_query/legacy/**/*.py", + "examples", + "weave_query_query", +] + +[tool.bumpversion] +current_version = "0.51.9-dev0" +parse = """(?x) + (?P0|[1-9]\\d*)\\. + (?P0|[1-9]\\d*)\\. + (?P0|[1-9]\\d*) + (?: + - # dash separator for pre-release section + (?P[a-zA-Z-]+) # pre-release label + (?P0|[1-9]\\d*) # pre-release version number + )? # pre-release section is optional +""" +serialize = [ + "{major}.{minor}.{patch}-{pre_l}{pre_n}", + "{major}.{minor}.{patch}", +] +search = "{current_version}" +replace = "{new_version}" +regex = false +ignore_missing_version = false +ignore_missing_files = false +tag = false +sign_tags = false +tag_name = "v{new_version}" +tag_message = "Release version: {current_version} → {new_version}" +allow_dirty = false +commit = false +message = "Release version: {current_version} → {new_version}" +commit_args = "" + +[tool.bumpversion.parts.pre_l] +values = ["dev", "final"] +optional_value = "final" diff --git a/weave_query/pytest.ini b/weave_query/pytest.ini new file mode 100644 index 00000000000..841dfdd39b8 --- /dev/null +++ b/weave_query/pytest.ini @@ -0,0 +1,9 @@ + +[pytest] +filterwarnings = + ; treat warnings as errors + ; error + ; ignore deprecation warnings from installed packages, they're printed at the + ; bottom of test output, making it hard to find the actual errors. + ignore::DeprecationWarning +addopts = -v diff --git a/requirements.legacy.datadog.txt b/weave_query/requirements.legacy.datadog.txt similarity index 100% rename from requirements.legacy.datadog.txt rename to weave_query/requirements.legacy.datadog.txt diff --git a/requirements.legacy.dev.txt b/weave_query/requirements.legacy.dev.txt similarity index 100% rename from requirements.legacy.dev.txt rename to weave_query/requirements.legacy.dev.txt diff --git a/requirements.legacy.ecosystem.txt b/weave_query/requirements.legacy.ecosystem.txt similarity index 100% rename from requirements.legacy.ecosystem.txt rename to weave_query/requirements.legacy.ecosystem.txt diff --git a/requirements.legacy.engine.txt b/weave_query/requirements.legacy.engine.txt similarity index 100% rename from requirements.legacy.engine.txt rename to weave_query/requirements.legacy.engine.txt diff --git a/requirements.legacy.test.txt b/weave_query/requirements.legacy.test.txt similarity index 97% rename from requirements.legacy.test.txt rename to weave_query/requirements.legacy.test.txt index 41d7ab87cce..eb74c744a26 100644 --- a/requirements.legacy.test.txt +++ b/weave_query/requirements.legacy.test.txt @@ -26,4 +26,5 @@ cryptography>=42.0.7 # CVE 2023-23931 # SQL Generation Tests sqlparse -filelock \ No newline at end of file +filelock +sqlalchemy \ No newline at end of file diff --git a/requirements.legacy.txt b/weave_query/requirements.legacy.txt similarity index 100% rename from requirements.legacy.txt rename to weave_query/requirements.legacy.txt diff --git a/weave/legacy/scripts/clear_cache.py b/weave_query/scripts/clear_cache.py similarity index 93% rename from weave/legacy/scripts/clear_cache.py rename to weave_query/scripts/clear_cache.py index b630e019f6d..f513460ac21 100644 --- a/weave/legacy/scripts/clear_cache.py +++ b/weave_query/scripts/clear_cache.py @@ -1,7 +1,7 @@ import os import time -from weave.legacy.weave import cache +from weave_query import cache # Script to run to delete expired caches if __name__ == "__main__": diff --git a/weave/legacy/scripts/jupyter_dev.sh b/weave_query/scripts/jupyter_dev.sh similarity index 100% rename from weave/legacy/scripts/jupyter_dev.sh rename to weave_query/scripts/jupyter_dev.sh diff --git a/weave/legacy/scripts/pytest_parallel.sh b/weave_query/scripts/pytest_parallel.sh similarity index 100% rename from weave/legacy/scripts/pytest_parallel.sh rename to weave_query/scripts/pytest_parallel.sh diff --git a/weave/legacy/scripts/syndata.py b/weave_query/scripts/syndata.py similarity index 97% rename from weave/legacy/scripts/syndata.py rename to weave_query/scripts/syndata.py index 6ecbc110363..39a7e5c8f85 100644 --- a/weave/legacy/scripts/syndata.py +++ b/weave_query/scripts/syndata.py @@ -5,8 +5,8 @@ import pyarrow as pa from scipy.signal import butter, filtfilt -from weave.legacy.weave import util -from weave.legacy.weave.ops_arrow import ArrowWeaveList +from weave_query import util +from weave_query.ops_arrow import ArrowWeaveList value_fns: list[typing.Any] = [ lambda steps: steps**2, diff --git a/weave/legacy/scripts/syndata_mon.py b/weave_query/scripts/syndata_mon.py similarity index 98% rename from weave/legacy/scripts/syndata_mon.py rename to weave_query/scripts/syndata_mon.py index d615b6eb777..bcf42ec2e65 100644 --- a/weave/legacy/scripts/syndata_mon.py +++ b/weave_query/scripts/syndata_mon.py @@ -10,7 +10,7 @@ import tqdm from faker import Faker -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, dataframe_to_arrow +from weave_query.arrow.list_ import ArrowWeaveList, dataframe_to_arrow # Generate the version schedule diff --git a/weave/legacy/scripts/wandb_artifact_perf.py b/weave_query/scripts/wandb_artifact_perf.py similarity index 98% rename from weave/legacy/scripts/wandb_artifact_perf.py rename to weave_query/scripts/wandb_artifact_perf.py index af3f3e0aa7d..00bf4bd402e 100644 --- a/weave/legacy/scripts/wandb_artifact_perf.py +++ b/weave_query/scripts/wandb_artifact_perf.py @@ -13,7 +13,7 @@ import cProfile import time -from weave.legacy.weave import ( +from weave_query import ( artifact_wandb, async_map, engine_trace, diff --git a/weave/legacy/supervisord.conf b/weave_query/supervisord.conf similarity index 100% rename from weave/legacy/supervisord.conf rename to weave_query/supervisord.conf diff --git a/weave/testdata/cereal.csv b/weave_query/testdata/cereal.csv similarity index 100% rename from weave/testdata/cereal.csv rename to weave_query/testdata/cereal.csv diff --git a/weave/testdata/cereal.db b/weave_query/testdata/cereal.db similarity index 100% rename from weave/testdata/cereal.db rename to weave_query/testdata/cereal.db diff --git a/weave/testdata/chinook.db b/weave_query/testdata/chinook.db similarity index 100% rename from weave/testdata/chinook.db rename to weave_query/testdata/chinook.db diff --git a/weave/testdata/obj.table.json b/weave_query/testdata/obj.table.json similarity index 100% rename from weave/testdata/obj.table.json rename to weave_query/testdata/obj.table.json diff --git a/weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/media/images/8f65e54dc684f7675aec.png b/weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/media/images/8f65e54dc684f7675aec.png similarity index 100% rename from weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/media/images/8f65e54dc684f7675aec.png rename to weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/media/images/8f65e54dc684f7675aec.png diff --git a/weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/test_results.table.json b/weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/test_results.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/test_results.table.json rename to weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/test_results.table.json diff --git a/weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/weird_table.table.json b/weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/weird_table.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/weird_table.table.json rename to weave_query/testdata/shared_artifact_dir/stacey/mendeleev/test_res_1fwmcd3q_303db33c9f9264768626/weird_table.table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/table.joined-table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/table.joined-table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/table.joined-table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/table.joined-table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_1.table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_1.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_1.table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_1.table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_2.table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_2.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_2.table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/joined_table_artifact_303db33c9f9264768626/tables/table_2.table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/table.partitioned-table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/table.partitioned-table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/table.partitioned-table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/table.partitioned-table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_1.table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_1.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_1.table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_1.table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_2.table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_2.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_2.table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_2.table.json diff --git a/weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_3.table.json b/weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_3.table.json similarity index 100% rename from weave/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_3.table.json rename to weave_query/testdata/shared_artifact_dir/test_entity/test_project/partitioned_table_artifact_303db33c9f9264768626/tables/table_3.table.json diff --git a/weave/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test.parquet b/weave_query/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test.parquet similarity index 100% rename from weave/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test.parquet rename to weave_query/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test.parquet diff --git a/weave/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test_media.parquet b/weave_query/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test_media.parquet similarity index 100% rename from weave/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test_media.parquet rename to weave_query/testdata/shared_artifact_dir/wandb_file_manager/api.wandb.test/test_media.parquet diff --git a/weave/testdata/spring-lamb.jpg b/weave_query/testdata/spring-lamb.jpg similarity index 100% rename from weave/testdata/spring-lamb.jpg rename to weave_query/testdata/spring-lamb.jpg diff --git a/weave/testdata/sqlite_cereal.sql b/weave_query/testdata/sqlite_cereal.sql similarity index 100% rename from weave/testdata/sqlite_cereal.sql rename to weave_query/testdata/sqlite_cereal.sql diff --git a/weave/testdata/sqlite_make_cereal.sh b/weave_query/testdata/sqlite_make_cereal.sh similarity index 100% rename from weave/testdata/sqlite_make_cereal.sh rename to weave_query/testdata/sqlite_make_cereal.sh diff --git a/weave/testdata/t8.shakespeare.txt b/weave_query/testdata/t8.shakespeare.txt similarity index 100% rename from weave/testdata/t8.shakespeare.txt rename to weave_query/testdata/t8.shakespeare.txt diff --git a/weave/testdata/test_dir/b.txt b/weave_query/testdata/test_dir/b.txt similarity index 100% rename from weave/testdata/test_dir/b.txt rename to weave_query/testdata/test_dir/b.txt diff --git a/weave/testdata/test_dir/c.txt b/weave_query/testdata/test_dir/c.txt similarity index 100% rename from weave/testdata/test_dir/c.txt rename to weave_query/testdata/test_dir/c.txt diff --git a/weave/testdata/test_dir/sub_dir/a.txt b/weave_query/testdata/test_dir/sub_dir/a.txt similarity index 100% rename from weave/testdata/test_dir/sub_dir/a.txt rename to weave_query/testdata/test_dir/sub_dir/a.txt diff --git a/weave/testdata/train.py b/weave_query/testdata/train.py similarity index 100% rename from weave/testdata/train.py rename to weave_query/testdata/train.py diff --git a/weave/legacy/__init__.py b/weave_query/tests/__init__.py similarity index 100% rename from weave/legacy/__init__.py rename to weave_query/tests/__init__.py diff --git a/weave/legacy/tests/example_wb_unit_test.py b/weave_query/tests/example_wb_unit_test.py similarity index 91% rename from weave/legacy/tests/example_wb_unit_test.py rename to weave_query/tests/example_wb_unit_test.py index 60a973df79d..bc4cff5a7f6 100644 --- a/weave/legacy/tests/example_wb_unit_test.py +++ b/weave_query/tests/example_wb_unit_test.py @@ -1,6 +1,7 @@ import wandb -import weave +import weave_query as weave +import weave_query def test_basic_table(fake_wandb): diff --git a/weave/tests/fixture_fakewandb.py b/weave_query/tests/fixture_fakewandb.py similarity index 98% rename from weave/tests/fixture_fakewandb.py rename to weave_query/tests/fixture_fakewandb.py index 4233cc784aa..ca37a4563b8 100644 --- a/weave/tests/fixture_fakewandb.py +++ b/weave_query/tests/fixture_fakewandb.py @@ -10,14 +10,14 @@ import wandb -import weave -from weave.legacy.tests.util.tag_test_util import op_add_tag +import weave_query as weave +from tests.util.tag_test_util import op_add_tag # Note: We're mocking out the whole io_service right now. This is too # high level and doesn't test the actual io implementation. We should # mock wandb_api instead probably. -from weave.legacy.weave import io_service, util, wandb_api, wandb_client_api -from weave.legacy.weave.artifact_wandb import ( +from weave_query import io_service, util, wandb_api, wandb_client_api +from weave_query.artifact_wandb import ( WandbArtifact, WandbArtifactManifest, WeaveWBArtifactByIDURI, diff --git a/weave/legacy/tests/test_access.py b/weave_query/tests/test_access.py similarity index 90% rename from weave/legacy/tests/test_access.py rename to weave_query/tests/test_access.py index f15627af727..abf2d9703c0 100644 --- a/weave/legacy/tests/test_access.py +++ b/weave_query/tests/test_access.py @@ -1,7 +1,8 @@ import pytest -import weave -from weave.legacy.weave import ( +import weave_query as weave +import weave_query +from weave_query import ( artifact_fs, artifact_local, environment, @@ -25,7 +26,7 @@ def public_env(): def test_access_file(public_env): with pytest.raises(errors.WeaveAccessDeniedError): - weave.use(weave.legacy.weave.ops.local_path("/tmp/bad.json")) + weave.use(weave_query.ops.local_path("/tmp/bad.json")) @pytest.mark.parametrize("path", ["..", "/tmp", "//tmp", "//tmp/bad.json", "/tmp/.../"]) diff --git a/weave/legacy/tests/test_api.py b/weave_query/tests/test_api.py similarity index 95% rename from weave/legacy/tests/test_api.py rename to weave_query/tests/test_api.py index 25ca58a9d8b..00ac1c6ef28 100644 --- a/weave/legacy/tests/test_api.py +++ b/weave_query/tests/test_api.py @@ -1,8 +1,8 @@ import shutil -from weave.legacy.weave import api as weave +from weave_query import api as weave -from ...legacy.weave.show import _show_params +from weave_query.show import _show_params def test_print_save_val(): diff --git a/weave/legacy/tests/test_arrow.py b/weave_query/tests/test_arrow.py similarity index 98% rename from weave/legacy/tests/test_arrow.py rename to weave_query/tests/test_arrow.py index b9966221b94..a07daa56728 100644 --- a/weave/legacy/tests/test_arrow.py +++ b/weave_query/tests/test_arrow.py @@ -7,8 +7,8 @@ import pytest from PIL import Image -from weave.legacy.weave import api as weave -from weave.legacy.weave import ( +from weave_query import api as weave +from weave_query import ( box, context_state, errors, @@ -21,24 +21,24 @@ # If you're thinking of import vectorize here, don't! Put your # tests in test_arrow_vectorizer.py instead -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow import constructors -from weave.legacy.weave.arrow.arrow_tags import ( +from weave_query import ops_arrow as arrow +from weave_query import weave_types as types +from weave_query.arrow import constructors +from weave_query.arrow.arrow_tags import ( recursively_encode_pyarrow_strings_as_dictionaries, ) -from weave.legacy.weave.language_features.tagging import ( +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, ) -from weave.legacy.weave.op_def import map_type -from weave.legacy.weave.ops_domain import project_ops -from weave.legacy.weave.ops_primitives import list_, make_list +from weave_query.op_def import map_type +from weave_query.ops_domain import project_ops +from weave_query.ops_primitives import list_, make_list from .util import list_arrow_test_helpers as lath -from weave.legacy.tests.util import tag_test_util as ttu -from weave.legacy.tests.util import weavejs_ops +from tests.util import tag_test_util as ttu +from tests.util import weavejs_ops from . import test_wb _loading_builtins_token = context_state.set_loading_built_ins() @@ -1316,7 +1316,7 @@ def test_stddev(): def test_join_all_struct_val(): - from weave.legacy.weave import ops_arrow + from weave_query import ops_arrow t1 = arrow.to_arrow([{"a": 5, "b": {"c": 6}}]) t2 = arrow.to_arrow([{"a": 9, "b": {"c": 10}}, {"a": 5, "b": {"c": 11}}]) diff --git a/weave/legacy/tests/test_arrow_awl.py b/weave_query/tests/test_arrow_awl.py similarity index 91% rename from weave/legacy/tests/test_arrow_awl.py rename to weave_query/tests/test_arrow_awl.py index 03e857e288f..b0a639ff16e 100644 --- a/weave/legacy/tests/test_arrow_awl.py +++ b/weave_query/tests/test_arrow_awl.py @@ -2,13 +2,14 @@ import pytest -import weave -import weave.legacy.weave.weave_types as types -from weave.legacy.weave import box, ops_arrow -from weave.legacy.weave.arrow.convert import to_arrow -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type - -from weave.legacy.tests.util.concrete_tagged_value import ( +import weave_query as weave +import weave_query +import weave_query.weave_types as types +from weave_query import box, ops_arrow +from weave_query.arrow.convert import to_arrow +from weave_query.language_features.tagging import tag_store, tagged_value_type + +from tests.util.concrete_tagged_value import ( TaggedValue, concrete_from_tagstore, concrete_to_tagstore, diff --git a/weave/legacy/tests/test_arrow_concat.py b/weave_query/tests/test_arrow_concat.py similarity index 98% rename from weave/legacy/tests/test_arrow_concat.py rename to weave_query/tests/test_arrow_concat.py index 4e8f551475a..578138a93ab 100644 --- a/weave/legacy/tests/test_arrow_concat.py +++ b/weave_query/tests/test_arrow_concat.py @@ -2,10 +2,11 @@ import pytest -import weave -from weave.legacy.weave import artifact_local, storage -from weave.legacy.weave.ops_arrow import to_arrow -from weave.legacy.weave.ops_domain import wbmedia +import weave_query as weave +import weave_query +from weave_query import artifact_local, storage +from weave_query.ops_arrow import to_arrow +from weave_query.ops_domain import wbmedia # This is not a valid artifact, but we need one to test. We set _read_dirname # so that the artifact's is_saved property is True, so that everything works diff --git a/weave/legacy/tests/test_arrow_perf.py b/weave_query/tests/test_arrow_perf.py similarity index 86% rename from weave/legacy/tests/test_arrow_perf.py rename to weave_query/tests/test_arrow_perf.py index 87f7c2c4576..8e6caa110d0 100644 --- a/weave/legacy/tests/test_arrow_perf.py +++ b/weave_query/tests/test_arrow_perf.py @@ -4,8 +4,9 @@ import pytest -import weave -from weave.legacy.weave import ops_arrow, ops_primitives +import weave_query as weave +import weave_query +from weave_query import ops_arrow, ops_primitives @pytest.mark.skip(reason="Performance test") diff --git a/weave/legacy/tests/test_arrow_topy.py b/weave_query/tests/test_arrow_topy.py similarity index 97% rename from weave/legacy/tests/test_arrow_topy.py rename to weave_query/tests/test_arrow_topy.py index 59317cc3ce8..0dfda1bb99d 100644 --- a/weave/legacy/tests/test_arrow_topy.py +++ b/weave_query/tests/test_arrow_topy.py @@ -3,10 +3,11 @@ import pytest -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow -from weave.legacy.tests.util.concrete_tagged_value import ( +from tests.util.concrete_tagged_value import ( TaggedValue, concrete_from_tagstore, concrete_to_tagstore, diff --git a/weave/legacy/tests/test_arrow_vectorizer.py b/weave_query/tests/test_arrow_vectorizer.py similarity index 98% rename from weave/legacy/tests/test_arrow_vectorizer.py rename to weave_query/tests/test_arrow_vectorizer.py index fc920d14c48..e21bf67e4be 100644 --- a/weave/legacy/tests/test_arrow_vectorizer.py +++ b/weave_query/tests/test_arrow_vectorizer.py @@ -5,19 +5,19 @@ import pytest from pyarrow import compute as pc -from weave.legacy.weave import api as weave -from weave.legacy.weave import box, dispatch, errors, ops, weave_internal -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import ( +from weave_query import api as weave +from weave_query import box, dispatch, errors, ops, weave_internal +from weave_query import ops_arrow as arrow +from weave_query import weave_types as types +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, ) -from weave.legacy.weave.ops_arrow import arraylist_ops, convert_ops, util -from weave.legacy.weave.ops_domain import run_ops -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_primitives import Boolean, Number, date, dict_, list_ +from weave_query.ops_arrow import arraylist_ops, convert_ops, util +from weave_query.ops_domain import run_ops +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_primitives import Boolean, Number, date, dict_, list_ string_ops_test_cases = [ ("eq-scalar", lambda x: x == "bc", [True, False, False]), diff --git a/weave/legacy/tests/test_artifact.py b/weave_query/tests/test_artifact.py similarity index 94% rename from weave/legacy/tests/test_artifact.py rename to weave_query/tests/test_artifact.py index 5a05479a9d0..e9ad54f2ad6 100644 --- a/weave/legacy/tests/test_artifact.py +++ b/weave_query/tests/test_artifact.py @@ -1,8 +1,9 @@ import pytest -import weave -from weave.legacy.weave import artifact_fs, artifact_local, storage -from weave.legacy.weave import ops_arrow as arrow +import weave_query as weave +import weave_query +from weave_query import artifact_fs, artifact_local, storage +from weave_query import ops_arrow as arrow def test_artifact(): diff --git a/weave/legacy/tests/test_artifact_metadata.py b/weave_query/tests/test_artifact_metadata.py similarity index 91% rename from weave/legacy/tests/test_artifact_metadata.py rename to weave_query/tests/test_artifact_metadata.py index 889eef4137b..00e6c209f77 100644 --- a/weave/legacy/tests/test_artifact_metadata.py +++ b/weave_query/tests/test_artifact_metadata.py @@ -1,8 +1,9 @@ import wandb -import weave -from weave.legacy.weave import artifact_local, artifact_wandb -from weave.legacy.weave.wandb_interface.wandb_artifact_pusher import ( +import weave_query as weave +import weave_query +from weave_query import artifact_local, artifact_wandb +from weave_query.wandb_interface.wandb_artifact_pusher import ( write_artifact_to_wandb, ) @@ -56,8 +57,8 @@ def test_artifact_metadata(user_by_api_key_in_env): } # Push an artifact to wandb and verify that the metadata is correct - remote_uri = weave.legacy.weave.ops.publish_artifact( - weave.legacy.weave.ops.get(local_art.uri + "/obj"), + remote_uri = weave_query.ops.publish_artifact( + weave_query.ops.get(local_art.uri + "/obj"), "test_artifact", "test_project", None, @@ -113,7 +114,7 @@ def test_artifact_files_count(user_by_api_key_in_env): run.finish() count_node = ( - weave.legacy.weave.ops.project(run.entity, run.project) + weave_query.ops.project(run.entity, run.project) .artifact("test") .membershipForAlias("v0") .artifactVersion() diff --git a/weave/legacy/tests/test_assign_perf.py b/weave_query/tests/test_assign_perf.py similarity index 96% rename from weave/legacy/tests/test_assign_perf.py rename to weave_query/tests/test_assign_perf.py index ee5c7598e7f..9823e724fb3 100644 --- a/weave/legacy/tests/test_assign_perf.py +++ b/weave_query/tests/test_assign_perf.py @@ -16,7 +16,8 @@ import pytest -import weave +import weave_query as weave +import weave_query def do_assigns(assigns): diff --git a/weave/legacy/tests/test_assignment.py b/weave_query/tests/test_assignment.py similarity index 94% rename from weave/legacy/tests/test_assignment.py rename to weave_query/tests/test_assignment.py index 6f321857939..43378c67ade 100644 --- a/weave/legacy/tests/test_assignment.py +++ b/weave_query/tests/test_assignment.py @@ -1,13 +1,14 @@ import pytest -import weave +import weave_query as weave +import weave_query types = weave.types.get_type_classes() @pytest.mark.parametrize("type_name, type_cls", [(t.name, t) for t in types]) def test_const_assignment(type_name, type_cls): - from weave.legacy.weave.ops_domain import wb_domain_types as wdt + from weave_query.ops_domain import wb_domain_types as wdt params = [] # Quick list of types that don't work with this parametrization diff --git a/weave/legacy/tests/test_async.py b/weave_query/tests/test_async.py similarity index 97% rename from weave/legacy/tests/test_async.py rename to weave_query/tests/test_async.py index a7601ceda3e..f90b24ca235 100644 --- a/weave/legacy/tests/test_async.py +++ b/weave_query/tests/test_async.py @@ -1,6 +1,6 @@ import pytest -from weave.legacy.weave import api, async_demo, ops, runs, storage +from weave_query import api, async_demo, ops, runs, storage def test_run_basic(): diff --git a/weave/legacy/tests/test_async_queue.py b/weave_query/tests/test_async_queue.py similarity index 94% rename from weave/legacy/tests/test_async_queue.py rename to weave_query/tests/test_async_queue.py index 5556f89b82a..e5e8d145a38 100644 --- a/weave/legacy/tests/test_async_queue.py +++ b/weave_query/tests/test_async_queue.py @@ -4,7 +4,7 @@ import aioprocessing import pytest -from weave.legacy.weave.async_queue import ProcessQueue, Queue, ThreadQueue +from weave_query.async_queue import ProcessQueue, Queue, ThreadQueue async def process_producer(queue: Queue) -> None: diff --git a/weave/legacy/tests/test_basic_ops.py b/weave_query/tests/test_basic_ops.py similarity index 95% rename from weave/legacy/tests/test_basic_ops.py rename to weave_query/tests/test_basic_ops.py index a40920b967d..d7a7db3531d 100644 --- a/weave/legacy/tests/test_basic_ops.py +++ b/weave_query/tests/test_basic_ops.py @@ -1,8 +1,8 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import box, ops -from weave.legacy.weave.ops_primitives import number -from weave.legacy.weave.ops_primitives.string import * -from weave.legacy.weave.weave_internal import make_const_node +from weave_query import api as weave +from weave_query import box, ops +from weave_query.ops_primitives import number +from weave_query.ops_primitives.string import * +from weave_query.weave_internal import make_const_node def test_number_ops(): diff --git a/weave/legacy/tests/test_box.py b/weave_query/tests/test_box.py similarity index 79% rename from weave/legacy/tests/test_box.py rename to weave_query/tests/test_box.py index 4ece9ef3949..77c149cc07f 100644 --- a/weave/legacy/tests/test_box.py +++ b/weave_query/tests/test_box.py @@ -1,6 +1,6 @@ import datetime -from weave.legacy.weave import box +from weave_query import box def test_boxdatetime(): diff --git a/weave/legacy/tests/test_cache.py b/weave_query/tests/test_cache.py similarity index 98% rename from weave/legacy/tests/test_cache.py rename to weave_query/tests/test_cache.py index 7f46a6723cb..89be8243399 100644 --- a/weave/legacy/tests/test_cache.py +++ b/weave_query/tests/test_cache.py @@ -2,7 +2,7 @@ import os import time -from weave.legacy.weave import cache, environment +from weave_query import cache, environment def test_lru_time_window_cache(): diff --git a/weave/legacy/tests/test_codify.py b/weave_query/tests/test_codify.py similarity index 70% rename from weave/legacy/tests/test_codify.py rename to weave_query/tests/test_codify.py index fdffd2e4e51..08cef605395 100644 --- a/weave/legacy/tests/test_codify.py +++ b/weave_query/tests/test_codify.py @@ -1,8 +1,9 @@ import black import pytest -import weave -from weave.legacy.weave import panels +import weave_query as weave +import weave_query +from weave_query import panels # IMPORTANT: Do not import other symbols inside of weave # so that we ensure the produced code only relies on the weave symbol. @@ -19,24 +20,24 @@ ), ( panels.Group(), - "weave.legacy.weave.panels.panel_group.Group()", + "weave_query.panels.panel_group.Group()", ), ( lambda: panels.Table( - weave.legacy.weave.ops.range(1, 100, 1).map( - lambda row: weave.legacy.weave.ops_primitives.dict.dict_( + weave_query.ops.range(1, 100, 1).map( + lambda row: weave_query.ops_primitives.dict.dict_( x=row, - y=weave.legacy.weave.ops_primitives.list_.make_list( + y=weave_query.ops_primitives.list_.make_list( a=row, ), ) ) ), - lambda: """weave.legacy.weave.panels.panel_table.Table( - weave.legacy.weave.ops_arrow.list_range.range(1, 100, 1,).map( - lambda row: weave.legacy.weave.ops_primitives.dict.dict_( + lambda: """weave_query.panels.panel_table.Table( + weave_query.ops_arrow.list_range.range(1, 100, 1,).map( + lambda row: weave_query.ops_primitives.dict.dict_( x=row, - y=weave.legacy.weave.ops_primitives.list_.make_list( + y=weave_query.ops_primitives.list_.make_list( a=row, ), ), @@ -45,16 +46,16 @@ ), ( lambda: panels.Plot( - weave.legacy.weave.ops.range(1, 100, 1).map( - lambda row: weave.legacy.weave.ops_primitives.dict.dict_( + weave_query.ops.range(1, 100, 1).map( + lambda row: weave_query.ops_primitives.dict.dict_( x=row, y=row**2, ) ) ), - lambda: """weave.legacy.weave.panels.panel_plot.Plot( - weave.legacy.weave.ops_arrow.list_range.range(1, 100, 1,).map( - lambda row: weave.legacy.weave.ops_primitives.dict.dict_( + lambda: """weave_query.panels.panel_plot.Plot( + weave_query.ops_arrow.list_range.range(1, 100, 1,).map( + lambda row: weave_query.ops_primitives.dict.dict_( x=row, y=row.powBinary(2,), ), @@ -65,7 +66,7 @@ lambda: panels.Group( items={ "table": panels.Table( - weave.legacy.weave.ops.range(1, 100, 1), + weave_query.ops.range(1, 100, 1), columns=[ lambda row: row, lambda row: row**2, @@ -99,26 +100,26 @@ ), } ), - lambda: """weave.legacy.weave.panels.panel_group.Group( + lambda: """weave_query.panels.panel_group.Group( items={ - "table": weave.legacy.weave.panels.panel_table.Table( - weave.legacy.weave.ops_arrow.list_range.range(1, 100, 1,), + "table": weave_query.panels.panel_table.Table( + weave_query.ops_arrow.list_range.range(1, 100, 1,), columns=[ lambda row: row, lambda row: row.powBinary(2,), ], ), - "all_rows": lambda table: weave.legacy.weave.panels.panel_plot.Plot( + "all_rows": lambda table: weave_query.panels.panel_plot.Plot( table.all_rows(), x=lambda row: row["c_0"], y=lambda row: row["c_1"], ), - "derived": lambda table, all_rows: weave.legacy.weave.panels.panel_group.Group( + "derived": lambda table, all_rows: weave_query.panels.panel_group.Group( layoutMode="horizontal", items={ - "rows": weave.legacy.weave.panels.panel_group.Group( + "rows": weave_query.panels.panel_group.Group( items={ - "pinned_rows": weave.legacy.weave.panels.panel_plot.Plot( + "pinned_rows": weave_query.panels.panel_plot.Plot( table.pinned_rows(), x=lambda row: row["c_0"], y=lambda row: row["c_1"], @@ -126,7 +127,7 @@ "active_row": lambda pinned_rows: table.active_row(), }, ), - "data": lambda rows: weave.legacy.weave.panels.panel_group.Group( + "data": lambda rows: weave_query.panels.panel_group.Group( items={ "pinned_data": table.pinned_data(), "active_data": lambda pinned_data: table.active_data(), @@ -153,7 +154,7 @@ def test_group_case(cereal_csv, consistent_table_col_ids): panels.Group( items={ "plot": panels.Plot( - weave.legacy.weave.ops.local_path(cereal_csv).readcsv(), + weave_query.ops.local_path(cereal_csv).readcsv(), x=lambda row: row["protein"], y=lambda row: row["calories"], ), @@ -166,16 +167,16 @@ def test_group_case(cereal_csv, consistent_table_col_ids): ), } ), - '''weave.legacy.weave.panels.panel_group.Group( + '''weave_query.panels.panel_group.Group( items={ - "plot": weave.legacy.weave.panels.panel_plot.Plot( - weave.legacy.weave.ops.local_path("''' + "plot": weave_query.panels.panel_plot.Plot( + weave_query.ops.local_path("''' + cereal_csv + """",).readcsv(), x=lambda row: row["protein"], y=lambda row: row["calories"], ), - "table": lambda plot: weave.legacy.weave.panels.panel_table.Table( + "table": lambda plot: weave_query.panels.panel_table.Table( plot.selected_rows(), columns=[ lambda row: row["c_0"], @@ -191,12 +192,12 @@ def test_group_case(cereal_csv, consistent_table_col_ids): def test_plot_case(cereal_csv, consistent_table_col_ids): _test_object_codification( panels.Plot( - weave.legacy.weave.ops.local_path(cereal_csv).readcsv(), + weave_query.ops.local_path(cereal_csv).readcsv(), x=lambda row: row["protein"], y=lambda row: row["calories"], ), - f"""weave.legacy.weave.panels.panel_plot.Plot( - weave.legacy.weave.ops.local_path('{cereal_csv}',).readcsv(), + f"""weave_query.panels.panel_plot.Plot( + weave_query.ops.local_path('{cereal_csv}',).readcsv(), x=lambda row: row["protein"], y=lambda row: row["calories"], )""", @@ -206,14 +207,14 @@ def test_plot_case(cereal_csv, consistent_table_col_ids): def test_table_case(cereal_csv, consistent_table_col_ids): _test_object_codification( panels.Table( - weave.legacy.weave.ops.local_path(cereal_csv).readcsv(), + weave_query.ops.local_path(cereal_csv).readcsv(), columns=[ lambda row: row["protein"], lambda row: row["calories"], ], ), - f"""weave.legacy.weave.panels.panel_table.Table( - weave.legacy.weave.ops.local_path('{cereal_csv}',).readcsv(), + f"""weave_query.panels.panel_table.Table( + weave_query.ops.local_path('{cereal_csv}',).readcsv(), columns=[ lambda row: row["protein"], lambda row: row["calories"], @@ -223,7 +224,7 @@ def test_table_case(cereal_csv, consistent_table_col_ids): def _test_object_codification(panel, code=None): - panel_code = weave.legacy.weave.codify.object_to_code(panel) + panel_code = weave_query.codify.object_to_code(panel) generated_panel = eval(panel_code) diff --git a/weave/legacy/tests/test_compile.py b/weave_query/tests/test_compile.py similarity index 87% rename from weave/legacy/tests/test_compile.py rename to weave_query/tests/test_compile.py index 6e1895eff25..40cc0eb9992 100644 --- a/weave/legacy/tests/test_compile.py +++ b/weave_query/tests/test_compile.py @@ -1,15 +1,16 @@ import pytest import wandb -import weave -from weave.legacy.weave import async_demo, compile, graph -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import use -from weave.legacy.weave.dispatch import RuntimeOutputNode -from weave.legacy.weave.ops_arrow import to_arrow -from weave.legacy.weave.ops_arrow.vectorize import raise_on_python_bailout -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable -from weave.legacy.weave.weave_internal import const, define_fn, make_const_node +import weave_query as weave +import weave_query +from weave_query import async_demo, compile, graph +from weave_query import weave_types as types +from weave_query.api import use +from weave_query.dispatch import RuntimeOutputNode +from weave_query.ops_arrow import to_arrow +from weave_query.ops_arrow.vectorize import raise_on_python_bailout +from weave_query.wandb_interface.wandb_stream_table import StreamTable +from weave_query.weave_internal import const, define_fn, make_const_node def test_automatic_await_compile(): @@ -144,21 +145,21 @@ def test_executing_js_multi_root(): def test_optimize_merge_empty_dict(): - non_empty_dict = weave.legacy.weave.ops.dict_(a=5, b=2) + non_empty_dict = weave_query.ops.dict_(a=5, b=2) assert ( compile.compile_simple_optimizations( - [weave.legacy.weave.ops.TypedDict.merge(non_empty_dict, weave.legacy.weave.ops.dict_())] + [weave_query.ops.TypedDict.merge(non_empty_dict, weave_query.ops.dict_())] )[0].to_json() == non_empty_dict.to_json() ) assert ( compile.compile_simple_optimizations( - [weave.legacy.weave.ops.TypedDict.merge(weave.legacy.weave.ops.dict_(), non_empty_dict)] + [weave_query.ops.TypedDict.merge(weave_query.ops.dict_(), non_empty_dict)] )[0].to_json() == non_empty_dict.to_json() ) - non_simplified_merge = weave.legacy.weave.ops.TypedDict.merge( - weave.legacy.weave.ops.dict_(j=3), non_empty_dict + non_simplified_merge = weave_query.ops.TypedDict.merge( + weave_query.ops.dict_(j=3), non_empty_dict ) assert ( compile.compile_simple_optimizations([non_simplified_merge])[0].to_json() @@ -167,12 +168,12 @@ def test_optimize_merge_empty_dict(): def test_compile_lambda_uniqueness(): - list_node_1 = weave.legacy.weave.ops.make_list(a=make_const_node(weave.types.Number(), 1)) - list_node_2 = weave.legacy.weave.ops.make_list(a=make_const_node(weave.types.Number(), 2)) + list_node_1 = weave_query.ops.make_list(a=make_const_node(weave.types.Number(), 1)) + list_node_2 = weave_query.ops.make_list(a=make_const_node(weave.types.Number(), 2)) fn_node = define_fn({"row": weave.types.Number()}, lambda row: row + 1) mapped_1 = list_node_1.map(fn_node) mapped_2 = list_node_2.map(fn_node) - combined = weave.legacy.weave.ops.make_list(a=mapped_1, b=mapped_2) + combined = weave_query.ops.make_list(a=mapped_1, b=mapped_2) concatted = combined.concat() # list node contains 2 nodes (const, list), x 2 = 4 @@ -204,7 +205,7 @@ def test_compile_lambda_uniqueness(): # This test demonstrates successful execution when there is an explicit # const function instead of a direct node (resulting in an intermediate execution op) # """ -# history_node = weave.legacy.weave.ops.project(run.entity, run.project).run(run.id).history2() +# history_node = weave_query.ops.project(run.entity, run.project).run(run.id).history2() # pick = const(history_node).pick("val") # res = weave.use(pick) # assert res.to_pylist_notags() == list(range(10)) @@ -223,7 +224,7 @@ def test_compile_through_function_call(user_by_api_key_in_env): fn_node = define_fn( {"entity_name": types.String()}, lambda entity_name: ( - weave.legacy.weave.ops.project(entity_name, run.project).run(run.id).history2() + weave_query.ops.project(entity_name, run.project).run(run.id).history2() ), ) called_node = fn_node(run.entity) @@ -237,7 +238,7 @@ def test_compile_list_flatten_to_awl_concat(): # When the outer list-structure is a list, we want to dispatch to concat, preferably AWL-concat # when the outer list-structure is an AWL, we want to dispatch ensure that we use AWL ops # list of lists - list_list_node = weave.legacy.weave.ops.make_list(a=[1], b=[2]) + list_list_node = weave_query.ops.make_list(a=[1], b=[2]) list_list_node_concat = list_list_node.concat() list_list_node_flatten = list_list_node.flatten() list_list_node_concat_compiled = compile.compile([list_list_node_concat])[0] @@ -245,7 +246,7 @@ def test_compile_list_flatten_to_awl_concat(): assert list_list_node_concat_compiled.from_op.name == "concat" assert list_list_node_flatten_compiled.from_op.name == "flatten" # list of awls - list_awl_node = weave.legacy.weave.ops.make_list(a=to_arrow([1]), b=to_arrow([2])) + list_awl_node = weave_query.ops.make_list(a=to_arrow([1]), b=to_arrow([2])) list_awl_node_concat = list_awl_node.concat() list_awl_node_flatten = list_awl_node.flatten() list_awl_node_concat_compiled = compile.compile([list_awl_node_concat])[0] diff --git a/weave/legacy/tests/test_complex_calls.py b/weave_query/tests/test_complex_calls.py similarity index 84% rename from weave/legacy/tests/test_complex_calls.py rename to weave_query/tests/test_complex_calls.py index 94bebf4cf9f..766e1dbfafd 100644 --- a/weave/legacy/tests/test_complex_calls.py +++ b/weave_query/tests/test_complex_calls.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import weave_internal +import weave_query as weave +import weave_query +from weave_query import weave_internal def test_weave_fn_in_data(): diff --git a/weave/legacy/tests/test_cond.py b/weave_query/tests/test_cond.py similarity index 68% rename from weave/legacy/tests/test_cond.py rename to weave_query/tests/test_cond.py index f6030535c74..016215415da 100644 --- a/weave/legacy/tests/test_cond.py +++ b/weave_query/tests/test_cond.py @@ -1,12 +1,13 @@ -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow def test_cond_basic(): - assert weave.use(weave.legacy.weave.ops.cond({"a": True}, {"a": 5})) == 5 - assert weave.use(weave.legacy.weave.ops.cond({"a": False}, {"a": 5})) == None + assert weave.use(weave_query.ops.cond({"a": True}, {"a": 5})) == 5 + assert weave.use(weave_query.ops.cond({"a": False}, {"a": 5})) == None assert ( - weave.use(weave.legacy.weave.ops.cond({"a": False, "b": True}, {"a": 5, "b": 6})) == 6 + weave.use(weave_query.ops.cond({"a": False, "b": True}, {"a": 5, "b": 6})) == 6 ) @@ -47,9 +48,9 @@ def test_cond_vector(): ) assert weave.use( conds.map( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_(**{"a": row["a"], "b": row["b"]}), - weave.legacy.weave.ops.dict_(**{"a": row["val_a"], "b": row["val_b"]}), + lambda row: weave_query.ops.cond( + weave_query.ops.dict_(**{"a": row["a"], "b": row["b"]}), + weave_query.ops.dict_(**{"a": row["val_a"], "b": row["val_b"]}), ) ) ).to_pylist_raw() == [5, None, 10] @@ -68,9 +69,9 @@ def test_cond_vector_arr_value(): ) assert weave.use( conds.map( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_(**{"a": row["a"], "b": row["b"]}), - weave.legacy.weave.ops.dict_(**{"a": row["val_a"], "b": row["val_b"]}), + lambda row: weave_query.ops.cond( + weave_query.ops.dict_(**{"a": row["a"], "b": row["b"]}), + weave_query.ops.dict_(**{"a": row["val_a"], "b": row["val_b"]}), ) ) ).to_pylist_raw() == [[1, 2], None, [11, 12]] @@ -89,9 +90,9 @@ def test_cond_vector_mixed(): ) assert weave.use( conds.map( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_(**{"a": row["a"], "b": row["b"]}), - weave.legacy.weave.ops.dict_(**{"a": row["val_a"], "b": 99}), + lambda row: weave_query.ops.cond( + weave_query.ops.dict_(**{"a": row["a"], "b": row["b"]}), + weave_query.ops.dict_(**{"a": row["val_a"], "b": 99}), ) ) ).to_pylist_raw() == [1, None, 99] @@ -110,9 +111,9 @@ def test_cond_vector_mixed_arr_value(): ) assert weave.use( conds.map( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_(**{"a": row["a"], "b": row["b"]}), - weave.legacy.weave.ops.dict_(**{"a": row["val_a"], "b": [99, 100]}), + lambda row: weave_query.ops.cond( + weave_query.ops.dict_(**{"a": row["a"], "b": row["b"]}), + weave_query.ops.dict_(**{"a": row["val_a"], "b": [99, 100]}), ) ) ).to_pylist_raw() == [[1, 2], None, [99, 100]] diff --git a/weave/legacy/tests/test_const_type_mapper.py b/weave_query/tests/test_const_type_mapper.py similarity index 84% rename from weave/legacy/tests/test_const_type_mapper.py rename to weave_query/tests/test_const_type_mapper.py index ce2fccef3c0..759d9ab973b 100644 --- a/weave/legacy/tests/test_const_type_mapper.py +++ b/weave_query/tests/test_const_type_mapper.py @@ -1,7 +1,8 @@ import typing -import weave -from weave.legacy.weave import context_state, weave_internal +import weave_query as weave +import weave_query +from weave_query import context_state, weave_internal _loading_builtins_token = context_state.set_loading_built_ins() diff --git a/weave/legacy/tests/test_custom_types.py b/weave_query/tests/test_custom_types.py similarity index 89% rename from weave/legacy/tests/test_custom_types.py rename to weave_query/tests/test_custom_types.py index 75a1aaeefdc..6a1252eb1b5 100644 --- a/weave/legacy/tests/test_custom_types.py +++ b/weave_query/tests/test_custom_types.py @@ -1,12 +1,12 @@ import pytest from PIL import Image -from weave.legacy.weave import api as weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave import ops_arrow +from weave_query import api as weave +from weave_query import context_state as _context +from weave_query import ops_arrow -from ... import errors -from weave.legacy.tests.util import geom +from weave_query import errors +from tests.util import geom def test_mapped_method_on_custom_type(): diff --git a/weave/legacy/tests/test_datetime_timestamp.py b/weave_query/tests/test_datetime_timestamp.py similarity index 93% rename from weave/legacy/tests/test_datetime_timestamp.py rename to weave_query/tests/test_datetime_timestamp.py index c53fc6c38ec..6b8a78bd4c7 100644 --- a/weave/legacy/tests/test_datetime_timestamp.py +++ b/weave_query/tests/test_datetime_timestamp.py @@ -3,8 +3,9 @@ import pytest -import weave -from weave.legacy.weave.ops_primitives import date +import weave_query as weave +import weave_query +from weave_query.ops_primitives import date def assert_date_string( diff --git a/weave/legacy/tests/test_decorator_type.py b/weave_query/tests/test_decorator_type.py similarity index 96% rename from weave/legacy/tests/test_decorator_type.py rename to weave_query/tests/test_decorator_type.py index 3a5b04b9154..368083bda63 100644 --- a/weave/legacy/tests/test_decorator_type.py +++ b/weave_query/tests/test_decorator_type.py @@ -1,6 +1,7 @@ import typing -import weave +import weave_query as weave +import weave_query def test_type_var_in_dict_any(): diff --git a/weave/legacy/tests/test_decorators.py b/weave_query/tests/test_decorators.py similarity index 91% rename from weave/legacy/tests/test_decorators.py rename to weave_query/tests/test_decorators.py index 72ec915a0ae..cfefb56f22f 100644 --- a/weave/legacy/tests/test_decorators.py +++ b/weave_query/tests/test_decorators.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.decorator_op import op +from weave_query import api as weave +from weave_query import storage +from weave_query import weave_types as types +from weave_query.decorator_op import op def test_function_op_name(): diff --git a/weave/legacy/tests/test_derive_op.py b/weave_query/tests/test_derive_op.py similarity index 65% rename from weave/legacy/tests/test_derive_op.py rename to weave_query/tests/test_derive_op.py index ee3dc7f6c03..7f2f6fe9f5b 100644 --- a/weave/legacy/tests/test_derive_op.py +++ b/weave_query/tests/test_derive_op.py @@ -1,6 +1,6 @@ -from weave.legacy.weave import api as weave +from weave_query import api as weave -from ...legacy.weave import registry_mem +from weave_query import registry_mem def test_mapped_add(): diff --git a/weave/legacy/tests/test_dispatch.py b/weave_query/tests/test_dispatch.py similarity index 78% rename from weave/legacy/tests/test_dispatch.py rename to weave_query/tests/test_dispatch.py index b9c3eacd833..693989c141c 100644 --- a/weave/legacy/tests/test_dispatch.py +++ b/weave_query/tests/test_dispatch.py @@ -1,7 +1,8 @@ import pytest -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow def test_dispatch_lambda(): diff --git a/weave/legacy/tests/test_examples.py b/weave_query/tests/test_examples.py similarity index 88% rename from weave/legacy/tests/test_examples.py rename to weave_query/tests/test_examples.py index 01b390526e3..9cba664162f 100644 --- a/weave/legacy/tests/test_examples.py +++ b/weave_query/tests/test_examples.py @@ -1,8 +1,8 @@ import math import typing -from weave.legacy.weave import api as weave -from weave.legacy.weave import context, context_state +from weave_query import api as weave +from weave_query import context, context_state class XOnly(typing.TypedDict): diff --git a/weave/legacy/tests/test_execute.py b/weave_query/tests/test_execute.py similarity index 92% rename from weave/legacy/tests/test_execute.py rename to weave_query/tests/test_execute.py index bb8c4d73e9f..d84206f8db1 100644 --- a/weave/legacy/tests/test_execute.py +++ b/weave_query/tests/test_execute.py @@ -3,15 +3,16 @@ import pytest -import weave -from weave.legacy.weave import api, environment, execute, ops, weave_internal -from weave.legacy.weave import weave_types as types +import weave_query as weave +import weave_query +from weave_query import api, environment, execute, ops, weave_internal +from weave_query import weave_types as types from . import test_wb execute_test_count_op_run_count = 0 -from weave.legacy.weave import context_state as _context_state +from weave_query import context_state as _context_state _loading_builtins_token = _context_state.set_loading_built_ins() @@ -173,12 +174,12 @@ def test_cache_column(): expected_result = [{"x": x, "y": x + 10000} for x in input_vals] l = weave.save(input_vals) - mapped = l.map(lambda x: weave.legacy.weave.ops.dict_(x=x, y=expensive_op(x))) + mapped = l.map(lambda x: weave_query.ops.dict_(x=x, y=expensive_op(x))) res = weave.use(mapped) assert res == expected_result latest_obj = weave.use( - weave.legacy.weave.ops.get("local-artifact:///run-op-expensive_op:latest/obj") + weave_query.ops.get("local-artifact:///run-op-expensive_op:latest/obj") ) assert len(latest_obj) == len(input_vals) assert len(weave.versions(latest_obj)) == 1 @@ -197,7 +198,7 @@ def test_none_not_cached(): assert res == expected_result latest_obj = weave.use( - weave.legacy.weave.ops.get("local-artifact:///run-op-expensive_op:latest/obj") + weave_query.ops.get("local-artifact:///run-op-expensive_op:latest/obj") ) assert len(latest_obj) == 1 # not 2! None not cached! assert len(weave.versions(latest_obj)) == 1 diff --git a/weave/legacy/tests/test_execute_fast.py b/weave_query/tests/test_execute_fast.py similarity index 81% rename from weave/legacy/tests/test_execute_fast.py rename to weave_query/tests/test_execute_fast.py index 01d26d43b18..12f72ecf07a 100644 --- a/weave/legacy/tests/test_execute_fast.py +++ b/weave_query/tests/test_execute_fast.py @@ -1,8 +1,9 @@ -import weave -from weave.legacy.weave import dispatch, weave_internal -from weave.legacy.weave import weave_types as types +import weave_query as weave +import weave_query +from weave_query import dispatch, weave_internal +from weave_query import weave_types as types -from weave.legacy.tests.util import weavejs_ops +from tests.util import weavejs_ops def test_nested_weavejs_call(): @@ -35,7 +36,7 @@ def test_empty_list(): map_fn = weave_internal.define_fn( {"row": arr.type.object_type}, lambda row: row.merge( - weave.legacy.weave.ops.dict_(output_classid=row["output_class"].id()) + weave_query.ops.dict_(output_classid=row["output_class"].id()) ), ) diff --git a/weave/legacy/tests/test_execution_graphs.py b/weave_query/tests/test_execution_graphs.py similarity index 95% rename from weave/legacy/tests/test_execution_graphs.py rename to weave_query/tests/test_execution_graphs.py index cf7faf64b8a..a934f0711a0 100644 --- a/weave/legacy/tests/test_execution_graphs.py +++ b/weave_query/tests/test_execution_graphs.py @@ -3,8 +3,8 @@ import os import zlib -from weave.legacy.weave import serialize, storage -from weave.legacy.weave.server import handle_request +from weave_query import serialize, storage +from weave_query.server import handle_request def test_graph_playback(dev_only_admin_env_override): diff --git a/weave/legacy/tests/test_file.py b/weave_query/tests/test_file.py similarity index 81% rename from weave/legacy/tests/test_file.py rename to weave_query/tests/test_file.py index e1b8299c419..013270c35ee 100644 --- a/weave/legacy/tests/test_file.py +++ b/weave_query/tests/test_file.py @@ -1,7 +1,8 @@ import pytest -import weave -from weave.legacy.weave import api, context_state, environment, errors, ops +import weave_query as weave +import weave_query +from weave_query import api, context_state, environment, errors, ops def test_dir(): diff --git a/weave/legacy/tests/test_filesystem.py b/weave_query/tests/test_filesystem.py similarity index 95% rename from weave/legacy/tests/test_filesystem.py rename to weave_query/tests/test_filesystem.py index ab8599d9505..23041231b96 100644 --- a/weave/legacy/tests/test_filesystem.py +++ b/weave_query/tests/test_filesystem.py @@ -2,7 +2,7 @@ import pytest -from weave.legacy.weave import environment, errors, filesystem +from weave_query import environment, errors, filesystem @pytest.fixture() diff --git a/weave/legacy/tests/test_gql_to_weave.py b/weave_query/tests/test_gql_to_weave.py similarity index 99% rename from weave/legacy/tests/test_gql_to_weave.py rename to weave_query/tests/test_gql_to_weave.py index 8046b0bb81d..7c765c9aff3 100644 --- a/weave/legacy/tests/test_gql_to_weave.py +++ b/weave_query/tests/test_gql_to_weave.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import gql_to_weave -from weave.legacy.weave import weave_types as types +from weave_query import gql_to_weave +from weave_query import weave_types as types def test_simple_query(): diff --git a/weave/legacy/tests/test_graph.py b/weave_query/tests/test_graph.py similarity index 95% rename from weave/legacy/tests/test_graph.py rename to weave_query/tests/test_graph.py index 3f1c7ce886f..25aeee4fa97 100644 --- a/weave/legacy/tests/test_graph.py +++ b/weave_query/tests/test_graph.py @@ -1,6 +1,7 @@ -import weave -from weave.legacy.weave import graph, weave_internal -from weave.legacy.weave import weave_types as types +import weave_query as weave +import weave_query +from weave_query import graph, weave_internal +from weave_query import weave_types as types def test_map_dag_produces_same_len(): diff --git a/weave/legacy/tests/test_graph_debug.py b/weave_query/tests/test_graph_debug.py similarity index 96% rename from weave/legacy/tests/test_graph_debug.py rename to weave_query/tests/test_graph_debug.py index ebe81d6c295..0d7a24263cd 100644 --- a/weave/legacy/tests/test_graph_debug.py +++ b/weave_query/tests/test_graph_debug.py @@ -1,6 +1,6 @@ import typing -from weave.legacy.weave import decorator_op, graph, graph_debug +from weave_query import decorator_op, graph, graph_debug class RowType(typing.TypedDict): diff --git a/weave/legacy/tests/test_helpers.py b/weave_query/tests/test_helpers.py similarity index 100% rename from weave/legacy/tests/test_helpers.py rename to weave_query/tests/test_helpers.py diff --git a/weave/legacy/tests/test_hypothesis.py b/weave_query/tests/test_hypothesis.py similarity index 97% rename from weave/legacy/tests/test_hypothesis.py rename to weave_query/tests/test_hypothesis.py index 90ed51b1626..e802f71cb68 100644 --- a/weave/legacy/tests/test_hypothesis.py +++ b/weave_query/tests/test_hypothesis.py @@ -43,10 +43,11 @@ from hypothesis import strategies as st from hypothesis.strategies import composite -import weave -from weave.legacy.weave import artifact_local, ops_arrow, ops_primitives, storage -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.language_features.tagging import tag_store +import weave_query as weave +import weave_query +from weave_query import artifact_local, ops_arrow, ops_primitives, storage +from weave_query.arrow import convert +from weave_query.language_features.tagging import tag_store # Jack this up to find more bugs. EXAMPLES_PER_TEST = 100 diff --git a/weave/legacy/tests/test_index.py b/weave_query/tests/test_index.py similarity index 76% rename from weave/legacy/tests/test_index.py rename to weave_query/tests/test_index.py index bf4283dae40..d3b940bc09e 100644 --- a/weave/legacy/tests/test_index.py +++ b/weave_query/tests/test_index.py @@ -1,4 +1,5 @@ -import weave +import weave_query as weave +import weave_query def test_index(): diff --git a/weave/legacy/tests/test_infer_types.py b/weave_query/tests/test_infer_types.py similarity index 87% rename from weave/legacy/tests/test_infer_types.py rename to weave_query/tests/test_infer_types.py index 3d08b266378..6917c53ef05 100644 --- a/weave/legacy/tests/test_infer_types.py +++ b/weave_query/tests/test_infer_types.py @@ -1,6 +1,6 @@ import typing -from weave.legacy.weave import graph, infer_types, weave_types +from weave_query import graph, infer_types, weave_types def test_node_with_generic(): diff --git a/weave/legacy/tests/test_io_service.py b/weave_query/tests/test_io_service.py similarity index 96% rename from weave/legacy/tests/test_io_service.py rename to weave_query/tests/test_io_service.py index 52d29e22a2c..2cbf2c96a1e 100644 --- a/weave/legacy/tests/test_io_service.py +++ b/weave_query/tests/test_io_service.py @@ -2,7 +2,7 @@ import pytest -from weave.legacy.weave import filesystem, io_service +from weave_query import filesystem, io_service @pytest.mark.timeout(10) diff --git a/weave/legacy/tests/test_join.py b/weave_query/tests/test_join.py similarity index 88% rename from weave/legacy/tests/test_join.py rename to weave_query/tests/test_join.py index f3c06cc956b..1d8f76a57d9 100644 --- a/weave/legacy/tests/test_join.py +++ b/weave_query/tests/test_join.py @@ -1,6 +1,7 @@ -import weave -from weave.legacy.weave import ops_arrow -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +import weave_query as weave +import weave_query +from weave_query import ops_arrow +from weave_query.wandb_interface.wandb_stream_table import StreamTable def make_stream_table(*args, **kwargs): @@ -24,7 +25,7 @@ def test_join_awls_with_stitch(user_by_api_key_in_env): feedback_st.log(row) feedback_st.finish() - joined = weave.legacy.weave.ops.join_2( + joined = weave_query.ops.join_2( dataset_st.rows(), feedback_st.rows(), lambda row: row["id"], diff --git a/weave/legacy/tests/test_js_compat.py b/weave_query/tests/test_js_compat.py similarity index 99% rename from weave/legacy/tests/test_js_compat.py rename to weave_query/tests/test_js_compat.py index 9dfa277e439..1a53c03a34a 100644 --- a/weave/legacy/tests/test_js_compat.py +++ b/weave_query/tests/test_js_compat.py @@ -7,9 +7,9 @@ # Note: This file is not yet complete, there are existing fixups in the # weave Python code that I haven't documented here. -from weave.legacy.weave import partial_object, weavejs_fixes -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_domain import wb_domain_types +from weave_query import partial_object, weavejs_fixes +from weave_query import weave_types as types +from weave_query.ops_domain import wb_domain_types def test_const_serialization(): diff --git a/weave/legacy/tests/test_language.py b/weave_query/tests/test_language.py similarity index 94% rename from weave/legacy/tests/test_language.py rename to weave_query/tests/test_language.py index 7c225403e2b..c61fd843490 100644 --- a/weave/legacy/tests/test_language.py +++ b/weave_query/tests/test_language.py @@ -2,9 +2,10 @@ import typing -import weave -from weave.legacy.weave import box, context_state -from weave.legacy.weave.language_features.tagging import ( +import weave_query as weave +import weave_query +from weave_query import box, context_state +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, diff --git a/weave/legacy/tests/test_language_autocall.py b/weave_query/tests/test_language_autocall.py similarity index 94% rename from weave/legacy/tests/test_language_autocall.py rename to weave_query/tests/test_language_autocall.py index 73efde50279..8026a5b962c 100644 --- a/weave/legacy/tests/test_language_autocall.py +++ b/weave_query/tests/test_language_autocall.py @@ -1,4 +1,5 @@ -import weave +import weave_query as weave +import weave_query def test_simple_node(): diff --git a/weave/legacy/tests/test_levenshtein.py b/weave_query/tests/test_levenshtein.py similarity index 88% rename from weave/legacy/tests/test_levenshtein.py rename to weave_query/tests/test_levenshtein.py index d39d74d8d1e..9060a588e21 100644 --- a/weave/legacy/tests/test_levenshtein.py +++ b/weave_query/tests/test_levenshtein.py @@ -1,6 +1,6 @@ import pytest -from weave.legacy.weave.ops_primitives.string import _levenshtein +from weave_query.ops_primitives.string import _levenshtein @pytest.mark.parametrize( diff --git a/weave/legacy/tests/test_list_arrow_compat.py b/weave_query/tests/test_list_arrow_compat.py similarity index 97% rename from weave/legacy/tests/test_list_arrow_compat.py rename to weave_query/tests/test_list_arrow_compat.py index 401a1ae7a5c..d6cfae87511 100644 --- a/weave/legacy/tests/test_list_arrow_compat.py +++ b/weave_query/tests/test_list_arrow_compat.py @@ -3,19 +3,19 @@ import numpy as np import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import box, ops, weave_internal -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import ( +from weave_query import api as weave +from weave_query import box, ops, weave_internal +from weave_query import ops_arrow as arrow +from weave_query import weave_types as types +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, ) -from weave.legacy.weave.ops_primitives import dict_, list_ +from weave_query.ops_primitives import dict_, list_ -from weave.legacy.tests.util import tag_test_util as ttu -from weave.legacy.tests.util import list_arrow_test_helpers as lath +from tests.util import tag_test_util as ttu +from tests.util import list_arrow_test_helpers as lath def filter_fn(row) -> bool: @@ -636,7 +636,7 @@ def test_tag_pushdown_on_list_of_lists(use_arrow): if use_arrow: list_node = arrow.ops.list_to_arrow(list_node) - from weave.legacy.weave import context_state + from weave_query import context_state _loading_builtins_token = context_state.set_loading_built_ins() diff --git a/weave/legacy/tests/test_list_indexing.py b/weave_query/tests/test_list_indexing.py similarity index 94% rename from weave/legacy/tests/test_list_indexing.py rename to weave_query/tests/test_list_indexing.py index 5d76d397b8f..786bb771c58 100644 --- a/weave/legacy/tests/test_list_indexing.py +++ b/weave_query/tests/test_list_indexing.py @@ -1,7 +1,8 @@ import pytest -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow LIST_CONSTRUCTORS = [ lambda x: x, diff --git a/weave/legacy/tests/test_logging.py b/weave_query/tests/test_logging.py similarity index 97% rename from weave/legacy/tests/test_logging.py rename to weave_query/tests/test_logging.py index 0da877d2cd5..17fe5f9405b 100644 --- a/weave/legacy/tests/test_logging.py +++ b/weave_query/tests/test_logging.py @@ -4,8 +4,8 @@ import pytest import requests -from weave import weave_server -from weave.legacy.weave import api, context, logs, ops, server +from weave_query import weave_server +from weave_query import api, context, logs, ops, server def test_logfile_created(fresh_server_logfile): diff --git a/weave/legacy/tests/test_mappability.py b/weave_query/tests/test_mappability.py similarity index 84% rename from weave/legacy/tests/test_mappability.py rename to weave_query/tests/test_mappability.py index 475bebb4490..97f7a43f861 100644 --- a/weave/legacy/tests/test_mappability.py +++ b/weave_query/tests/test_mappability.py @@ -1,10 +1,11 @@ -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave import graph -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.weave_internal import make_const_node +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query import graph +from weave_query import weave_types as types +from weave_query.weave_internal import make_const_node -from ...legacy.weave import registry_mem +from weave_query import registry_mem _loading_builtins_token = _context.set_loading_built_ins() @@ -61,10 +62,10 @@ def test_non_mapped_use(): def test_non_mapped_serialized(): - node = weave.legacy.weave.weave_internal.make_output_node( + node = weave_query.weave_internal.make_output_node( weave.types.Int(), _test_add_one.name, - {"x": weave.legacy.weave.graph.ConstNode(weave.types.Int(), 1)}, + {"x": weave_query.graph.ConstNode(weave.types.Int(), 1)}, ) assert weave.use(node) == 2 @@ -82,11 +83,11 @@ def test_mapped_nullable_use(): def test_mapped_serialized(): - node = weave.legacy.weave.weave_internal.make_output_node( + node = weave_query.weave_internal.make_output_node( weave.types.Int(), _test_add_one.name, { - "x": weave.legacy.weave.graph.ConstNode( + "x": weave_query.graph.ConstNode( weave.types.List(weave.types.Int()), [1, 2, 3] ) }, @@ -101,10 +102,10 @@ def test_mapped_empty_use(): def test_mapped_empty_serialized(): - node = weave.legacy.weave.weave_internal.make_output_node( + node = weave_query.weave_internal.make_output_node( weave.types.Int(), _test_add_one.name, - {"x": weave.legacy.weave.graph.ConstNode(weave.types.List(weave.types.Int()), [])}, + {"x": weave_query.graph.ConstNode(weave.types.List(weave.types.Int()), [])}, ) assert weave.use(node) == [] @@ -123,7 +124,7 @@ def test_fn(self, a: int) -> int: node = TestType().test_fn(1) assert weave.use(node) == 2 - node_list = weave.legacy.weave.ops.make_list(**{"0": TestType(), "1": TestType()}) + node_list = weave_query.ops.make_list(**{"0": TestType(), "1": TestType()}) node = node_list.test_fn(1) assert weave.use(node) == [2, 2] diff --git a/weave/legacy/tests/test_mappers_arrow.py b/weave_query/tests/test_mappers_arrow.py similarity index 96% rename from weave/legacy/tests/test_mappers_arrow.py rename to weave_query/tests/test_mappers_arrow.py index 18db29708b1..cc7e2159696 100644 --- a/weave/legacy/tests/test_mappers_arrow.py +++ b/weave_query/tests/test_mappers_arrow.py @@ -2,8 +2,8 @@ import pyarrow as pa -from weave.legacy.weave import mappers_arrow -from weave.legacy.weave import weave_types as types +from weave_query import mappers_arrow +from weave_query import weave_types as types def test_map_list(): diff --git a/weave/legacy/tests/test_mappers_python.py b/weave_query/tests/test_mappers_python.py similarity index 93% rename from weave/legacy/tests/test_mappers_python.py rename to weave_query/tests/test_mappers_python.py index 3b98d6fd5be..3c1f86b32fd 100644 --- a/weave/legacy/tests/test_mappers_python.py +++ b/weave_query/tests/test_mappers_python.py @@ -1,7 +1,7 @@ import math -from weave.legacy.weave import api, context, mappers_python, val_const, weave_internal -from weave.legacy.weave import weave_types as types +from weave_query import api, context, mappers_python, val_const, weave_internal +from weave_query import weave_types as types def test_map_typed_dict(): diff --git a/weave/legacy/tests/test_media.py b/weave_query/tests/test_media.py similarity index 98% rename from weave/legacy/tests/test_media.py rename to weave_query/tests/test_media.py index e9d3a6708a9..b4a589605b1 100644 --- a/weave/legacy/tests/test_media.py +++ b/weave_query/tests/test_media.py @@ -3,8 +3,8 @@ import numpy as np import pytest -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types +from weave_query import storage +from weave_query import weave_types as types def test_nparray(): diff --git a/weave/legacy/tests/test_media_user.py b/weave_query/tests/test_media_user.py similarity index 84% rename from weave/legacy/tests/test_media_user.py rename to weave_query/tests/test_media_user.py index c7cf985fdd3..1b64efff087 100644 --- a/weave/legacy/tests/test_media_user.py +++ b/weave_query/tests/test_media_user.py @@ -1,8 +1,8 @@ from PIL import Image -from weave.legacy.weave import api as weave -from weave.legacy.weave import context_state -from weave.legacy.weave.ops_primitives import geom as media_user +from weave_query import api as weave +from weave_query import context_state +from weave_query.ops_primitives import geom as media_user def test_im_with_metadata(): diff --git a/weave/legacy/tests/test_mutation2.py b/weave_query/tests/test_mutation2.py similarity index 61% rename from weave/legacy/tests/test_mutation2.py rename to weave_query/tests/test_mutation2.py index d9e28fadfb7..37f6a7aaf12 100644 --- a/weave/legacy/tests/test_mutation2.py +++ b/weave_query/tests/test_mutation2.py @@ -1,22 +1,23 @@ -import weave -from weave.legacy.weave import ref_base, uris, weave_internal +import weave_query as weave +import weave_query +from weave_query import ref_base, uris, weave_internal def test_mutation_set_direct_call(): - val = weave.legacy.weave.ops.TypedDict.pick({"a": {"b": 5}}, "a")["b"] - set_result = weave.legacy.weave.ops.set(val, 9) + val = weave_query.ops.TypedDict.pick({"a": {"b": 5}}, "a")["b"] + set_result = weave_query.ops.set(val, 9) assert set_result == {"a": {"b": 9}} def test_mutation_set_dispatch(): - val = weave.legacy.weave.ops.TypedDict.pick({"a": {"b": 5}}, "a")["b"] + val = weave_query.ops.TypedDict.pick({"a": {"b": 5}}, "a")["b"] set_result = val.set(9) assert set_result == {"a": {"b": 9}} def test_mutation_artifact(): weave.save([1, 2, 3], "art:main") - art = weave.legacy.weave.ops.get("local-artifact:///art:main/obj") + art = weave_query.ops.get("local-artifact:///art:main/obj") art.append(4) new_art = weave.storage.get("local-artifact:///art:main/obj") assert new_art == [1, 2, 3, 4] @@ -25,12 +26,12 @@ def test_mutation_artifact(): def test_mutation_lazy(): # This is how weavejs does it. weave.save([1, 2, 3], "art:main") - art = weave.legacy.weave.ops.get("local-artifact:///art:main/obj") + art = weave_query.ops.get("local-artifact:///art:main/obj") # Quote lhs expr, so that it is not evaluated. quoted_art = weave_internal.const(art) - expr = weave.legacy.weave.ops.append.lazy_call(quoted_art, 4, {}) + expr = weave_query.ops.append.lazy_call(quoted_art, 4, {}) weave.use(expr) new_art = weave.storage.get("local-artifact:///art:main/obj") @@ -40,9 +41,9 @@ def test_mutation_lazy(): def test_mutation_lazy_works_without_quoting(): # This relies on "auto quoting behavior". See compile_quote weave.save([1, 2, 3], "art:main") - art = weave.legacy.weave.ops.get("local-artifact:///art:main/obj") + art = weave_query.ops.get("local-artifact:///art:main/obj") - expr = weave.legacy.weave.ops.append.lazy_call(art, 4, {}) + expr = weave_query.ops.append.lazy_call(art, 4, {}) weave.use(expr) new_art = weave.storage.get("local-artifact:///art:main/obj") @@ -51,14 +52,14 @@ def test_mutation_lazy_works_without_quoting(): def test_merge(): weave.save({"a": 5, "b": 6}, "my-dict:latest") - dict_obj = weave.legacy.weave.ops.get("local-artifact:///my-dict:latest/obj") - weave.legacy.weave.ops.set(dict_obj["a"], 17, root_args={"branch": "my-branch"}) - modified_dict_obj = weave.legacy.weave.ops.get("local-artifact:///my-dict:my-branch/obj") - new_uri = weave.legacy.weave.ops.merge_artifact(modified_dict_obj) - dict_obj_node = weave.legacy.weave.ops.get(new_uri) + dict_obj = weave_query.ops.get("local-artifact:///my-dict:latest/obj") + weave_query.ops.set(dict_obj["a"], 17, root_args={"branch": "my-branch"}) + modified_dict_obj = weave_query.ops.get("local-artifact:///my-dict:my-branch/obj") + new_uri = weave_query.ops.merge_artifact(modified_dict_obj) + dict_obj_node = weave_query.ops.get(new_uri) assert ( weave.use(dict_obj_node) - == weave.use(weave.legacy.weave.ops.get("local-artifact:///my-dict:latest/obj")) + == weave.use(weave_query.ops.get("local-artifact:///my-dict:latest/obj")) == {"a": 17, "b": 6} ) @@ -68,24 +69,24 @@ def test_merge_no_version(): uri = get_node.from_op.inputs["uri"].val # type: ignore # uri now has a direct commit hash for the version - dict_obj = weave.legacy.weave.ops.get(uri) - weave.legacy.weave.ops.set(dict_obj["a"], 17, root_args={"branch": "my-branch"}) - modified_dict_obj = weave.legacy.weave.ops.get("local-artifact:///my-dict:my-branch/obj") - new_uri = weave.legacy.weave.ops.merge_artifact(modified_dict_obj) - dict_obj_node = weave.legacy.weave.ops.get(new_uri) + dict_obj = weave_query.ops.get(uri) + weave_query.ops.set(dict_obj["a"], 17, root_args={"branch": "my-branch"}) + modified_dict_obj = weave_query.ops.get("local-artifact:///my-dict:my-branch/obj") + new_uri = weave_query.ops.merge_artifact(modified_dict_obj) + dict_obj_node = weave_query.ops.get(new_uri) assert weave.use(dict_obj_node) == {"a": 17, "b": 6} def test_merge_list_type(): - from weave.legacy.weave import object_context + from weave_query import object_context weave.save([], "my-list:latest") - obj = weave.legacy.weave.ops.get("local-artifact:///my-list:latest/obj") + obj = weave_query.ops.get("local-artifact:///my-list:latest/obj") with object_context.object_context(): obj.append({"a": "x"}, {}) obj.append([1], {}) - assert weave.use(weave.legacy.weave.ops.get("local-artifact:///my-list:latest/obj")) == [ + assert weave.use(weave_query.ops.get("local-artifact:///my-list:latest/obj")) == [ {"a": "x"}, [1], ] @@ -95,7 +96,7 @@ def test_artifact_history_local(): num_versions = 4 uri = "local-artifact:///art:main/obj" weave.save([0], "art:main") - art = weave.legacy.weave.ops.get(uri) + art = weave_query.ops.get(uri) for i in range(num_versions): art.append(i + 1) @@ -105,7 +106,7 @@ def test_artifact_history_local(): assert new_art == total_list for i in range(num_versions): - new_uri = weave.legacy.weave.ops.undo_artifact(weave.legacy.weave.ops.get(uri)) + new_uri = weave_query.ops.undo_artifact(weave_query.ops.get(uri)) # We expect these to be the same since the branch pointer changed assert new_uri == uri res = weave.storage.get(uri) @@ -116,12 +117,12 @@ def test_artifact_history_local_from_hash(): num_versions = 4 uri = "local-artifact:///art:main/obj" weave.save([0], "art:main") - art = weave.legacy.weave.ops.get(uri) + art = weave_query.ops.get(uri) for i in range(num_versions): art.append(i + 1) - hash_uri = weave.legacy.weave.uris.WeaveURI.parse(uri).to_ref().artifact.uri + hash_uri = weave_query.uris.WeaveURI.parse(uri).to_ref().artifact.uri assert "main" not in hash_uri total_list = list(range(num_versions + 1)) @@ -130,7 +131,7 @@ def test_artifact_history_local_from_hash(): new_uri = hash_uri for i in range(num_versions): - new_uri = weave.legacy.weave.ops.undo_artifact(weave.legacy.weave.ops.get(new_uri)) + new_uri = weave_query.ops.undo_artifact(weave_query.ops.get(new_uri)) assert "main" not in new_uri res = weave.storage.get(new_uri + "/obj") assert res == total_list[: num_versions - i] @@ -140,16 +141,16 @@ def test_artifact_history_remote_with_branch(user_by_api_key_in_env): num_versions = 2 uri = "local-artifact:///art:main/obj" weave.save([0], "art:main") - art = weave.legacy.weave.ops.get(uri) - published_art_uri = weave.legacy.weave.ops.publish_artifact(art, "art", None, None) + art = weave_query.ops.get(uri) + published_art_uri = weave_query.ops.publish_artifact(art, "art", None, None) - art = weave.legacy.weave.ops.get( + art = weave_query.ops.get( f"wandb-artifact:///{user_by_api_key_in_env.username}/weave/art:latest/obj" ) for i in range(num_versions): res_uri = art.append(i + 1) - art = weave.legacy.weave.ops.get(res_uri) + art = weave_query.ops.get(res_uri) new_uri = res_uri total_list = list(range(num_versions + 1)) @@ -157,7 +158,7 @@ def test_artifact_history_remote_with_branch(user_by_api_key_in_env): assert new_art == total_list for i in range(num_versions): - new_uri = weave.legacy.weave.ops.undo_artifact(weave.legacy.weave.ops.get(new_uri)) + new_uri = weave_query.ops.undo_artifact(weave_query.ops.get(new_uri)) res = weave.storage.get(new_uri) if i == num_versions - 1: assert new_uri.startswith("wandb") @@ -170,16 +171,16 @@ def test_artifact_history_remote_with_hash(user_by_api_key_in_env): num_versions = 2 uri = "local-artifact:///art:main/obj" weave.save([0], "art:main") - art = weave.legacy.weave.ops.get(uri) - published_art_uri = weave.legacy.weave.ops.publish_artifact(art, "art", None, None) + art = weave_query.ops.get(uri) + published_art_uri = weave_query.ops.publish_artifact(art, "art", None, None) assert "latest" not in published_art_uri assert "main" not in published_art_uri - art = weave.legacy.weave.ops.get(published_art_uri) + art = weave_query.ops.get(published_art_uri) for i in range(num_versions): res_uri = art.append(i + 1) - art = weave.legacy.weave.ops.get(res_uri) + art = weave_query.ops.get(res_uri) new_uri = res_uri total_list = list(range(num_versions + 1)) @@ -187,7 +188,7 @@ def test_artifact_history_remote_with_hash(user_by_api_key_in_env): assert new_art == total_list for i in range(num_versions): - new_uri = weave.legacy.weave.ops.undo_artifact(weave.legacy.weave.ops.get(new_uri)) + new_uri = weave_query.ops.undo_artifact(weave_query.ops.get(new_uri)) res = weave.storage.get(new_uri) if i == num_versions - 1: assert new_uri.startswith("wandb") diff --git a/weave/legacy/tests/test_mutations.py b/weave_query/tests/test_mutations.py similarity index 94% rename from weave/legacy/tests/test_mutations.py rename to weave_query/tests/test_mutations.py index abdc289cb73..5de137fa627 100644 --- a/weave/legacy/tests/test_mutations.py +++ b/weave_query/tests/test_mutations.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import ops, storage, weave_internal +from weave_query import api as weave +from weave_query import ops, storage, weave_internal def test_autocommit(cereal_csv): diff --git a/weave/legacy/tests/test_node_ref.py b/weave_query/tests/test_node_ref.py similarity index 76% rename from weave/legacy/tests/test_node_ref.py rename to weave_query/tests/test_node_ref.py index 75216f629ad..a09a66f51f2 100644 --- a/weave/legacy/tests/test_node_ref.py +++ b/weave_query/tests/test_node_ref.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import graph +from weave_query import api as weave +from weave_query import graph -from ...legacy.weave import node_ref +from weave_query import node_ref def test_node_to_ref(): diff --git a/weave/legacy/tests/test_nullability.py b/weave_query/tests/test_nullability.py similarity index 94% rename from weave/legacy/tests/test_nullability.py rename to weave_query/tests/test_nullability.py index 9d07569b799..98804036c7c 100644 --- a/weave/legacy/tests/test_nullability.py +++ b/weave_query/tests/test_nullability.py @@ -2,9 +2,10 @@ import pytest -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave.weave_internal import make_const_node, make_output_node +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query.weave_internal import make_const_node, make_output_node _loading_builtins_token = _context.set_loading_built_ins() @@ -57,7 +58,7 @@ def test_basic_nullability(): def test_basic_nullability_in_mappability(): b_arr = weave.save([2]) maybe_int_arr = weave.save( - weave.legacy.weave.graph.ConstNode( + weave_query.graph.ConstNode( weave.types.List(weave.types.optional(weave.types.Int())), [1, None] ) ) diff --git a/weave/legacy/tests/test_number_bin.py b/weave_query/tests/test_number_bin.py similarity index 62% rename from weave/legacy/tests/test_number_bin.py rename to weave_query/tests/test_number_bin.py index 1475ef9c49d..0fcd218faf7 100644 --- a/weave/legacy/tests/test_number_bin.py +++ b/weave_query/tests/test_number_bin.py @@ -1,11 +1,12 @@ import pytest -import weave +import weave_query as weave +import weave_query def test_number_bin_vector(): - awl = weave.legacy.weave.ops.to_weave_arrow([1, 2, 3, 4, 5]) - mapped = awl.map(lambda x: x.bin(weave.legacy.weave.ops.number_bins_fixed(2))) + awl = weave_query.ops.to_weave_arrow([1, 2, 3, 4, 5]) + mapped = awl.map(lambda x: x.bin(weave_query.ops.number_bins_fixed(2))) res = weave.use(mapped).to_pylist_tagged() assert res == [ {"start": 0.0, "stop": 2.0}, diff --git a/weave/legacy/tests/test_numpy.py b/weave_query/tests/test_numpy.py similarity index 96% rename from weave/legacy/tests/test_numpy.py rename to weave_query/tests/test_numpy.py index 740c281aa9e..fe326102c14 100644 --- a/weave/legacy/tests/test_numpy.py +++ b/weave_query/tests/test_numpy.py @@ -1,10 +1,10 @@ import numpy as np -from weave.legacy.weave import artifact_fs, artifact_wandb -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_domain import table +from weave_query import artifact_fs, artifact_wandb +from weave_query import weave_types as types +from weave_query.ops_domain import table -from ...legacy.weave import types_numpy as numpy_types +from weave_query import types_numpy as numpy_types def test_construct_numpy_type(): diff --git a/weave/legacy/tests/test_op.py b/weave_query/tests/test_op.py similarity index 96% rename from weave/legacy/tests/test_op.py rename to weave_query/tests/test_op.py index 76141cc1c79..7bc68f2b4eb 100644 --- a/weave/legacy/tests/test_op.py +++ b/weave_query/tests/test_op.py @@ -2,10 +2,10 @@ import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import context_state, graph, storage, uris, weave_internal -from weave.legacy.weave import context_state as _context_state -from weave.legacy.weave import weave_types as types +from weave_query import api as weave +from weave_query import context_state, graph, storage, uris, weave_internal +from weave_query import context_state as _context_state +from weave_query import weave_types as types from . import test_helpers diff --git a/weave/legacy/tests/test_op_behaviors.py b/weave_query/tests/test_op_behaviors.py similarity index 98% rename from weave/legacy/tests/test_op_behaviors.py rename to weave_query/tests/test_op_behaviors.py index efbc05caf2a..23a89d6b497 100644 --- a/weave/legacy/tests/test_op_behaviors.py +++ b/weave_query/tests/test_op_behaviors.py @@ -11,8 +11,9 @@ import pytest -import weave -from weave.legacy.weave import ( +import weave_query as weave +import weave_query +from weave_query import ( graph, graph_debug, language_nullability, @@ -22,18 +23,18 @@ storage, weave_internal, ) -from weave.legacy.weave.language_features.tagging import make_tag_getter_op -from weave.legacy.weave.language_features.tagging.tagged_value_type import ( +from weave_query.language_features.tagging import make_tag_getter_op +from weave_query.language_features.tagging.tagged_value_type import ( TaggedValueType, ) -from ...legacy.weave import registry_mem -from weave.legacy.tests.util.concrete_tagged_value import ( +from weave_query import registry_mem +from tests.util.concrete_tagged_value import ( TaggedValue, concrete_from_tagstore, concrete_to_tagstore, ) -from weave.legacy.tests.util.op_specs import OP_TEST_SPECS, OpSpec, OpSpecTestCase +from tests.util.op_specs import OP_TEST_SPECS, OpSpec, OpSpecTestCase def assert_equal_with_tags(node: graph.Node, v: typing.Any, expected: typing.Any): @@ -83,7 +84,7 @@ def check_case(called: graph.Node, result_type: weave.types.Type, result: typing ), f"Expected op output type: {result_type}, but got {called.type}" # This is a way to save the final output, preserving tags. - result_ref = weave.use(weave.legacy.weave.ops.save_to_ref(called, None)) + result_ref = weave.use(weave_query.ops.save_to_ref(called, None)) if result_ref == None: actual_result = None else: diff --git a/weave/legacy/tests/test_op_coverage.py b/weave_query/tests/test_op_coverage.py similarity index 99% rename from weave/legacy/tests/test_op_coverage.py rename to weave_query/tests/test_op_coverage.py index f933b3e978d..3f959061858 100644 --- a/weave/legacy/tests/test_op_coverage.py +++ b/weave_query/tests/test_op_coverage.py @@ -1,4 +1,4 @@ -from ...legacy.weave import registry_mem +from weave_query import registry_mem def make_error_message(missing_ops, section_name): diff --git a/weave/legacy/tests/test_op_def.py b/weave_query/tests/test_op_def.py similarity index 92% rename from weave/legacy/tests/test_op_def.py rename to weave_query/tests/test_op_def.py index dc8fa42a100..d1eb14fef0d 100644 --- a/weave/legacy/tests/test_op_def.py +++ b/weave_query/tests/test_op_def.py @@ -5,8 +5,8 @@ import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import context_state +from weave_query import api as weave +from weave_query import context_state _loading_builtins_token = context_state.set_loading_built_ins() @@ -55,7 +55,7 @@ def wrap(obj: typing.Any): context_state.clear_loading_built_ins(_loading_builtins_token) -test_data = json.load(open("./legacy/tests/test_op_def_data.json")) +test_data = json.load(open("./tests/test_op_def_data.json")) def test_op_def_to_dict(): diff --git a/weave/legacy/tests/test_op_def_data.json b/weave_query/tests/test_op_def_data.json similarity index 100% rename from weave/legacy/tests/test_op_def_data.json rename to weave_query/tests/test_op_def_data.json diff --git a/weave/legacy/tests/test_op_def_type.py b/weave_query/tests/test_op_def_type.py similarity index 89% rename from weave/legacy/tests/test_op_def_type.py rename to weave_query/tests/test_op_def_type.py index d6eedd6ab0f..b068c4167b9 100644 --- a/weave/legacy/tests/test_op_def_type.py +++ b/weave_query/tests/test_op_def_type.py @@ -1,6 +1,6 @@ import typing -from weave.legacy.weave import op_def_type +from weave_query import op_def_type class MyTypedDict(typing.TypedDict): diff --git a/weave/legacy/tests/test_op_dispatching.py b/weave_query/tests/test_op_dispatching.py similarity index 93% rename from weave/legacy/tests/test_op_dispatching.py rename to weave_query/tests/test_op_dispatching.py index 4d583e5cf86..a05f4933354 100644 --- a/weave/legacy/tests/test_op_dispatching.py +++ b/weave_query/tests/test_op_dispatching.py @@ -1,11 +1,12 @@ import pytest -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave import graph, weave_internal -from weave.legacy.weave.dispatch import _dispatch_first_arg, _resolve_op_ambiguity -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_domain import wb_domain_types +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query import graph, weave_internal +from weave_query.dispatch import _dispatch_first_arg, _resolve_op_ambiguity +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_domain import wb_domain_types _loading_builtins_token = _context.set_loading_built_ins() @@ -71,7 +72,7 @@ def test_pick_map(): def test_json_pick_map(): - res = weave.legacy.weave.graph.OutputNode.from_json( + res = weave_query.graph.OutputNode.from_json( { "nodeType": "output", "type": {"type": "list", "objectType": "number"}, @@ -169,7 +170,7 @@ def test_nested_js_dict_pick(): def test_dispatch_of_ambiguous_ops(): - artifacts_node = weave.legacy.weave.ops.project("a", "b").artifacts() + artifacts_node = weave_query.ops.project("a", "b").artifacts() # just making this call is the test since it is # not clear if it should be artifact-project or # tag-project diff --git a/weave/legacy/tests/test_op_serialization.py b/weave_query/tests/test_op_serialization.py similarity index 91% rename from weave/legacy/tests/test_op_serialization.py rename to weave_query/tests/test_op_serialization.py index c666770a379..6ca63612482 100644 --- a/weave/legacy/tests/test_op_serialization.py +++ b/weave_query/tests/test_op_serialization.py @@ -1,9 +1,10 @@ import pytest -import weave -import weave.legacy.weave +import weave_query as weave +import weave_query +import weave_query -ops = weave.legacy.weave.registry_mem.memory_registry.list_ops() +ops = weave_query.registry_mem.memory_registry.list_ops() def output_type_dict_is_const_function_node(output_type_dict): diff --git a/weave/legacy/tests/test_panel_coverage.py b/weave_query/tests/test_panel_coverage.py similarity index 95% rename from weave/legacy/tests/test_panel_coverage.py rename to weave_query/tests/test_panel_coverage.py index f1518968b5b..9c83382dec8 100644 --- a/weave/legacy/tests/test_panel_coverage.py +++ b/weave_query/tests/test_panel_coverage.py @@ -1,4 +1,5 @@ -import weave +import weave_query as weave +import weave_query def inheritors(klass): @@ -14,7 +15,7 @@ def inheritors(klass): def all_panels(): - return inheritors(weave.legacy.weave.panel.Panel) + return inheritors(weave_query.panel.Panel) def test_panel_coverage(): diff --git a/weave/legacy/tests/test_panel_time_series.py b/weave_query/tests/test_panel_time_series.py similarity index 74% rename from weave/legacy/tests/test_panel_time_series.py rename to weave_query/tests/test_panel_time_series.py index 6b0faab5cbe..dc89e74203e 100644 --- a/weave/legacy/tests/test_panel_time_series.py +++ b/weave_query/tests/test_panel_time_series.py @@ -2,8 +2,9 @@ import wandb -import weave -from weave.legacy.weave.ecosystem.wandb.panel_time_series import TimeSeries +import weave_query as weave +import weave_query +from weave_query.ecosystem.wandb.panel_time_series import TimeSeries def test_panel_timeseries(user_by_api_key_in_env): @@ -14,7 +15,7 @@ def test_panel_timeseries(user_by_api_key_in_env): run.finish() history_node = ( - weave.legacy.weave.ops.project(run.entity, run.project).run(run.id).history2() + weave_query.ops.project(run.entity, run.project).run(run.id).history2() ) panel = TimeSeries(history_node) init_config_node = panel.initialize() diff --git a/weave/legacy/tests/test_panels.py b/weave_query/tests/test_panels.py similarity index 78% rename from weave/legacy/tests/test_panels.py rename to weave_query/tests/test_panels.py index 1f309042751..f97def63a44 100644 --- a/weave/legacy/tests/test_panels.py +++ b/weave_query/tests/test_panels.py @@ -1,11 +1,12 @@ import pytest -import weave -from weave.legacy.weave import storage, weave_internal -from weave.legacy.weave.panels import panel_plot +import weave_query as weave +import weave_query +from weave_query import storage, weave_internal +from weave_query.panels import panel_plot -from ...legacy.weave.panels.panel_group import Group -from ...legacy.weave.panels.panel_slider import Slider +from weave_query.panels.panel_group import Group +from weave_query.panels.panel_slider import Slider def test_panel_id(): @@ -82,7 +83,7 @@ def test_synced(): def test_object_picker_choice_type(): ints = weave.save([1, 2, 3], name="my-ints") - panel = weave.legacy.weave.panels.ObjectPicker(ints) + panel = weave_query.panels.ObjectPicker(ints) panel_node = weave_internal.make_var_node(weave.type_of(panel), "panel") choice = panel_node.config.choice assert choice.type == weave.types.Function({}, weave.types.Int()) @@ -92,17 +93,17 @@ def test_facet_selected(): data = weave.save( [{"guess": "dog", "truth": "cat"}, {"guess": "dog", "truth": "dog"}] ) - facet = weave.legacy.weave.panels.Group( + facet = weave_query.panels.Group( equalSize=True, items={ - "confusion": weave.legacy.weave.panels.Facet( + "confusion": weave_query.panels.Facet( data, x=lambda row: row["guess"], y=lambda row: row["truth"], - select=lambda row: weave.legacy.weave.panels.Group( + select=lambda row: weave_query.panels.Group( layered=True, items={ - "color": weave.legacy.weave.panels.Color(row.count() / 50), + "color": weave_query.panels.Color(row.count() / 50), "count": row.count(), }, ), @@ -115,11 +116,11 @@ def test_facet_selected(): def test_board(): # Just make sure it runs for now. - weave.legacy.weave.panels.Board( + weave_query.panels.Board( { - "nums": weave.legacy.weave.ops.range(0, 3, 1), + "nums": weave_query.ops.range(0, 3, 1), }, - [weave.legacy.weave.panels.BoardPanel(id="panel0", panel=lambda nums: nums)], + [weave_query.panels.BoardPanel(id="panel0", panel=lambda nums: nums)], ) @@ -130,6 +131,6 @@ def test_plot_constants_assign(): def test_plot_assign(): - assert weave.legacy.weave.panels.Plot.WeaveType().assign_type( - weave.type_of(weave.legacy.weave.panels.Plot([{"a": 5}])) + assert weave_query.panels.Plot.WeaveType().assign_type( + weave.type_of(weave_query.panels.Plot([{"a": 5}])) ) diff --git a/weave/legacy/tests/test_partial_object.py b/weave_query/tests/test_partial_object.py similarity index 98% rename from weave/legacy/tests/test_partial_object.py rename to weave_query/tests/test_partial_object.py index 6a1955f23fe..e8b6901f3e4 100644 --- a/weave/legacy/tests/test_partial_object.py +++ b/weave_query/tests/test_partial_object.py @@ -1,10 +1,10 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import compile, ops -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.project_ops import root_all_projects -from weave.legacy.weave.ops_domain.report_ops import root_all_reports +from weave_query import api as weave +from weave_query import compile, ops +from weave_query import weave_types as types +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.project_ops import root_all_projects +from weave_query.ops_domain.report_ops import root_all_reports from .test_wb import table_mock1_no_display_name diff --git a/weave/legacy/tests/test_plot.py b/weave_query/tests/test_plot.py similarity index 98% rename from weave/legacy/tests/test_plot.py rename to weave_query/tests/test_plot.py index 93ce632dd1e..5e6c755dec0 100644 --- a/weave/legacy/tests/test_plot.py +++ b/weave_query/tests/test_plot.py @@ -3,10 +3,11 @@ import pytest -import weave -from weave.legacy.weave import graph, storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.panels.panel_plot import Plot, PlotConstants, Series +import weave_query as weave +import weave_query +from weave_query import graph, storage +from weave_query import weave_types as types +from weave_query.panels.panel_plot import Plot, PlotConstants, Series from .test_run_segment import create_experiment @@ -38,11 +39,11 @@ def test_multi_series_plot_config_with_grouping(): weave.save(last_segment) plot = Plot(last_segment.experiment()) plot.set_x( - lambda row: weave.legacy.weave.ops.number_bin( - row["step"], weave.legacy.weave.ops.numbers_bins_equal([1, 2000], 2) + lambda row: weave_query.ops.number_bin( + row["step"], weave_query.ops.numbers_bins_equal([1, 2000], 2) ) ) - plot.set_y(lambda row: weave.legacy.weave.ops.numbers_avg(row["metric0"])) + plot.set_y(lambda row: weave_query.ops.numbers_avg(row["metric0"])) plot.groupby_x() plot.set_mark_constant("line") @@ -50,8 +51,8 @@ def test_multi_series_plot_config_with_grouping(): series2 = plot.config.series[0].clone() plot.add_series(series2) - series2.set_y(lambda row: weave.legacy.weave.ops.numbers_min(row["metric0"])) - series2.set_y2(lambda row: weave.legacy.weave.ops.numbers_max(row["metric0"])) + series2.set_y(lambda row: weave_query.ops.numbers_min(row["metric0"])) + series2.set_y2(lambda row: weave_query.ops.numbers_max(row["metric0"])) series2.set_mark_constant("area") plot.groupby_x() @@ -69,20 +70,20 @@ def test_multi_series_grouping(): weave.save(last_segment) plot = Plot(last_segment.experiment()) plot.set_x( - lambda row: weave.legacy.weave.ops.number_bin( - row["step"], weave.legacy.weave.ops.numbers_bins_equal([1, 2000], 2) + lambda row: weave_query.ops.number_bin( + row["step"], weave_query.ops.numbers_bins_equal([1, 2000], 2) ) ) plot.groupby_x() - plot.set_y(lambda row: weave.legacy.weave.ops.numbers_avg(row["metric0"])) + plot.set_y(lambda row: weave_query.ops.numbers_avg(row["metric0"])) plot.set_mark_constant("line") series2 = plot.config.series[0].clone() plot.add_series(series2) - series2.set_y(lambda row: weave.legacy.weave.ops.numbers_min(row["metric0"])) - series2.set_y2(lambda row: weave.legacy.weave.ops.numbers_max(row["metric0"])) + series2.set_y(lambda row: weave_query.ops.numbers_min(row["metric0"])) + series2.set_y2(lambda row: weave_query.ops.numbers_max(row["metric0"])) series2.set_mark_constant("area") plot2 = copy.deepcopy(plot) @@ -100,8 +101,8 @@ def test_multi_series_setting(): weave.save(last_segment) plot = Plot(last_segment.experiment()) plot.set_x( - lambda row: weave.legacy.weave.ops.number_bin( - row["step"], weave.legacy.weave.ops.numbers_bins_equal([1, 2000], 2) + lambda row: weave_query.ops.number_bin( + row["step"], weave_query.ops.numbers_bins_equal([1, 2000], 2) ) ) @@ -156,18 +157,18 @@ def test_actual_config_value(fixed_random_seed): weave.save(last_segment) plot = Plot(last_segment.experiment()) plot.set_x( - lambda row: weave.legacy.weave.ops.number_bin( - row["step"], weave.legacy.weave.ops.numbers_bins_equal([1, 2000], 2) + lambda row: weave_query.ops.number_bin( + row["step"], weave_query.ops.numbers_bins_equal([1, 2000], 2) ) ) - plot.set_y(lambda row: weave.legacy.weave.ops.numbers_avg(row["metric0"])) + plot.set_y(lambda row: weave_query.ops.numbers_avg(row["metric0"])) plot.set_mark_constant("line") series2 = plot.config.series[0].clone() plot.add_series(series2) - series2.set_y(lambda row: weave.legacy.weave.ops.numbers_min(row["metric0"])) - series2.set_y2(lambda row: weave.legacy.weave.ops.numbers_max(row["metric0"])) + series2.set_y(lambda row: weave_query.ops.numbers_min(row["metric0"])) + series2.set_y2(lambda row: weave_query.ops.numbers_max(row["metric0"])) series2.set_mark_constant("area") assert storage.to_python(plot.config) == { "_type": { @@ -1766,7 +1767,7 @@ def test_actual_config_value(fixed_random_seed): def test_panel_plot_scale_serialization(): # checks a problem case where scale would not be serialized correctly as an AxisScale object - plot = weave.legacy.weave.panels.Plot( + plot = weave_query.panels.Plot( [1, 2, 3, 4], x=lambda row: row, x_title="x", diff --git a/weave/legacy/tests/test_projection_timeout.py b/weave_query/tests/test_projection_timeout.py similarity index 87% rename from weave/legacy/tests/test_projection_timeout.py rename to weave_query/tests/test_projection_timeout.py index 302b2247226..cf70c31a5df 100644 --- a/weave/legacy/tests/test_projection_timeout.py +++ b/weave_query/tests/test_projection_timeout.py @@ -1,9 +1,9 @@ import numpy as np import pytest -from weave.legacy.weave.ops_primitives import projection_utils +from weave_query.ops_primitives import projection_utils -from ... import errors +from weave_query import errors def test_projection_timeout(): diff --git a/weave/legacy/tests/test_publish_flow.py b/weave_query/tests/test_publish_flow.py similarity index 90% rename from weave/legacy/tests/test_publish_flow.py rename to weave_query/tests/test_publish_flow.py index c7fe8c38172..17d18640d01 100644 --- a/weave/legacy/tests/test_publish_flow.py +++ b/weave_query/tests/test_publish_flow.py @@ -2,21 +2,22 @@ import pytest -import weave -from weave.legacy.weave import panels, storage -from weave.legacy.weave.artifact_fs import BranchPointType, FilesystemArtifactRef -from weave.legacy.weave.artifact_local import ( +import weave_query as weave +import weave_query +from weave_query import panels, storage +from weave_query.artifact_fs import BranchPointType, FilesystemArtifactRef +from weave_query.artifact_local import ( LocalArtifact, LocalArtifactRef, WeaveLocalArtifactURI, ) -from weave.legacy.weave.artifact_wandb import ( +from weave_query.artifact_wandb import ( WandbArtifact, WandbArtifactRef, WeaveWBArtifactURI, likely_commit_hash, ) -from weave.legacy.weave.uris import WeaveURI +from weave_query.uris import WeaveURI def test_publish_values(user_by_api_key_in_env): @@ -26,7 +27,7 @@ def test_publish_values(user_by_api_key_in_env): def test_publish_panel(user_by_api_key_in_env): - from weave.legacy.weave import panel_util + from weave_query import panel_util table_obj = panels.Table( panel_util.make_node( @@ -321,12 +322,12 @@ def _perform_post_persist_assertions( expected_uri_with_branch = f"wandb-artifact:///{target_entity}/{target_project_name}/{target_artifact_name}:{branch_name}/obj" # Data Assertions - get_op = weave.legacy.weave.ops.get(expected_uri_with_hash) + get_op = weave_query.ops.get(expected_uri_with_hash) get_res = weave.use(get_op) assert p_ref.obj == get_res == data # Only check branch if expected_uri_with_branch is not None if expected_uri_with_branch: - get_op = weave.legacy.weave.ops.get(expected_uri_with_branch) + get_op = weave_query.ops.get(expected_uri_with_branch) get_res = weave.use(get_op) assert get_res == data @@ -379,7 +380,7 @@ def test_mutate_remote_with_commit_hash(user_by_api_key_in_env): assert p_ref.version == expected_commit_hash - obj = weave.legacy.weave.ops.get(p_ref.uri)[0] + obj = weave_query.ops.get(p_ref.uri)[0] obj.set(new_data[0]) new_branch_name = f"user-{p_ref.version}" new_uri = f"local-artifact:///{target_artifact_name}:{new_branch_name}/obj" @@ -422,7 +423,7 @@ def test_mutate_remote_with_branch(user_by_api_key_in_env): assert p_ref.version == expected_commit_hash assert branch_name in p_ref.branch_uri - obj = weave.legacy.weave.ops.get(p_ref.branch_uri)[0] + obj = weave_query.ops.get(p_ref.branch_uri)[0] obj.set(new_data[0]) new_branch_name = f"user-{branch_name}" new_p_ref = LocalArtifactRef.from_str( @@ -461,7 +462,7 @@ def test_mutate_local_with_commit_hash(user_by_api_key_in_env, new_branch_name=N assert p_ref.version == expected_commit_hash - obj = weave.legacy.weave.ops.get(p_ref.uri)[0] + obj = weave_query.ops.get(p_ref.uri)[0] if new_branch_name == None: obj.set(new_data[0]) new_branch_name = new_commit_hash @@ -513,14 +514,14 @@ def test_mutate_local_with_commit_hash_and_branchpoint( assert p_ref.version == expected_commit_hash assert branch_name in p_ref.branch_uri - obj = weave.legacy.weave.ops.get(p_ref.branch_uri)[0] + obj = weave_query.ops.get(p_ref.branch_uri)[0] obj.set("PLACEHOLDER") mod_ref = LocalArtifactRef.from_uri( WeaveLocalArtifactURI.parse( f"local-artifact:///{target_artifact_name}:user-{branch_name}/obj" ) ) - obj = weave.legacy.weave.ops.get(mod_ref.branch_uri)[0] + obj = weave_query.ops.get(mod_ref.branch_uri)[0] if new_branch_name == None: obj.set(new_data[0]) branch_name = None @@ -571,7 +572,7 @@ def test_mutate_local_with_branch(user_by_api_key_in_env, new_branch_name=None): assert p_ref.version == expected_commit_hash - obj = weave.legacy.weave.ops.get(p_ref.branch_uri)[0] + obj = weave_query.ops.get(p_ref.branch_uri)[0] if new_branch_name == None: obj.set(new_data[0]) new_branch_name = new_commit_hash @@ -622,9 +623,9 @@ def test_mutate_local_with_branch_and_branchpoint(user_by_api_key_in_env): assert p_ref.version == expected_commit_hash assert branch_name in p_ref.branch_uri - obj = weave.legacy.weave.ops.get(p_ref.branch_uri)[0] + obj = weave_query.ops.get(p_ref.branch_uri)[0] obj.set("PLACEHOLDER") - obj = weave.legacy.weave.ops.get( + obj = weave_query.ops.get( f"local-artifact:///{target_artifact_name}:user-{branch_name}/obj" )[0] obj.set(new_data[0]) @@ -655,8 +656,8 @@ def test_merge_from_local_with_commit_hash_onto_remote_with_commit_hash( ): test_mutate_remote_with_commit_hash(user_by_api_key_in_env) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") ) assert merged_uri.startswith("wandb-artifact://") @@ -681,8 +682,8 @@ def test_merge_from_local_with_commit_hash_onto_remote_with_branch( ): test_mutate_remote_with_branch(user_by_api_key_in_env) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") ) assert merged_uri.startswith("wandb-artifact://") @@ -707,8 +708,8 @@ def test_merge_from_local_with_commit_hash_onto_local_with_commit_hash( ): test_mutate_local_with_commit_hash(user_by_api_key_in_env, "new_branch_name") - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") ) assert merged_uri.startswith("local-artifact://") @@ -739,8 +740,8 @@ def test_merge_from_local_with_commit_hash_onto_local_with_branch( ): test_mutate_local_with_branch(user_by_api_key_in_env, "new_branch_name") - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") ) assert merged_uri.startswith("local-artifact://") @@ -765,8 +766,8 @@ def test_merge_from_local_with_commit_hash_onto_local_with_branch_and_branchpoin user_by_api_key_in_env, "new_branch_name" ) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:61f78c8877df22942d23/obj") ) assert merged_uri.startswith("local-artifact://") @@ -788,7 +789,7 @@ def test_merge_from_local_with_commit_hash_onto_local_with_branch_and_branchpoin ), ) - merged_uri_2 = weave.legacy.weave.ops.merge_artifact(weave.legacy.weave.ops.get(merged_uri)) + merged_uri_2 = weave_query.ops.merge_artifact(weave_query.ops.get(merged_uri)) new_p_ref_2 = WandbArtifactRef.from_str(merged_uri_2) assert merged_uri_2.startswith("wandb-artifact://") @@ -816,8 +817,8 @@ def test_merge_from_local_with_branch_onto_remote_with_commit_hash( ): test_mutate_remote_with_commit_hash(user_by_api_key_in_env) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get( + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get( "local-artifact:///test_artifact:user-74d5ba98aca469b59e18/obj" ) ) @@ -842,8 +843,8 @@ def test_merge_from_local_with_branch_onto_remote_with_commit_hash( def test_merge_from_local_with_branch_onto_remote_with_branch(user_by_api_key_in_env): test_mutate_remote_with_branch(user_by_api_key_in_env) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:user-remote_branch/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:user-remote_branch/obj") ) assert merged_uri.startswith("wandb-artifact://") @@ -868,8 +869,8 @@ def test_merge_from_local_with_branch_onto_local_with_commit_hash( ): test_mutate_local_with_commit_hash(user_by_api_key_in_env, "new_branch_name") - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:new_branch_name/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:new_branch_name/obj") ) assert merged_uri.startswith("local-artifact://") @@ -898,8 +899,8 @@ def test_merge_from_local_with_branch_onto_local_with_commit_hash( def test_merge_from_local_with_branch_onto_local_with_branch(user_by_api_key_in_env): test_mutate_local_with_branch(user_by_api_key_in_env, "new_branch_name") - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:new_branch_name/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:new_branch_name/obj") ) assert merged_uri.startswith("local-artifact://") @@ -924,8 +925,8 @@ def test_merge_from_local_with_branch_onto_local_with_branch_and_branchpoint( user_by_api_key_in_env, "new_branch_name" ) - merged_uri = weave.legacy.weave.ops.merge_artifact( - weave.legacy.weave.ops.get("local-artifact:///test_artifact:new_branch_name/obj") + merged_uri = weave_query.ops.merge_artifact( + weave_query.ops.get("local-artifact:///test_artifact:new_branch_name/obj") ) assert merged_uri.startswith("local-artifact://") @@ -947,7 +948,7 @@ def test_merge_from_local_with_branch_onto_local_with_branch_and_branchpoint( ), ) - merged_uri_2 = weave.legacy.weave.ops.merge_artifact(weave.legacy.weave.ops.get(merged_uri)) + merged_uri_2 = weave_query.ops.merge_artifact(weave_query.ops.get(merged_uri)) new_p_ref_2 = WandbArtifactRef.from_str(merged_uri_2) assert merged_uri_2.startswith("wandb-artifact://") @@ -976,7 +977,7 @@ def test_publish_saved_node(user_by_api_key_in_env): assert saved.from_op.inputs["uri"].val.startswith("local-artifact://") assert weave.use(saved) == data - published_art_uri = weave.legacy.weave.ops.publish_artifact(saved, "my_list", None, None) + published_art_uri = weave_query.ops.publish_artifact(saved, "my_list", None, None) assert published_art_uri.startswith("wandb-artifact://") assert weave.use(weave.get(published_art_uri)) == data @@ -997,7 +998,7 @@ def _replace_uri_version(uri: str, new_version: str) -> str: return uri.replace(_get_uri_version(uri), new_version) -def _get_uri_from_get_node(node: weave.legacy.weave.graph.Node) -> str: +def _get_uri_from_get_node(node: weave_query.graph.Node) -> str: return node.from_op.inputs["uri"].val # type: ignore @@ -1011,44 +1012,44 @@ def test_end_to_end_save_and_publish_flow(user_by_api_key_in_env): assert weave.use(saved_node) == data # Step 2: Make a branching mutation. - weave.legacy.weave.ops.set( + weave_query.ops.set( saved_node[0], "test_publish_saved_node_execution_2", root_args={"branch": "my-branch"}, ) branched_data = ["test_publish_saved_node_execution_2"] branched_uri = saved_uri.replace(saved_version, "my-branch") - branched_node = weave.legacy.weave.ops.get(branched_uri) + branched_node = weave_query.ops.get(branched_uri) assert weave.use(branched_node) == branched_data # Step 3: Merge the change back into the main branch. - merged_uri = weave.legacy.weave.ops.merge_artifact(branched_node) + merged_uri = weave_query.ops.merge_artifact(branched_node) assert merged_uri.startswith("local-artifact://") assert merged_uri != saved_uri != branched_uri - merged_node = weave.legacy.weave.ops.get(merged_uri) + merged_node = weave_query.ops.get(merged_uri) assert weave.use(merged_node) == branched_data # Step 4: Publish the new version remotely - published_uri = weave.legacy.weave.ops.publish_artifact( + published_uri = weave_query.ops.publish_artifact( merged_node, "my_list", None, None ) assert published_uri.startswith("wandb-artifact://") assert weave.use(weave.get(published_uri)) == branched_data # Step 5: Modify the remote version - weave.legacy.weave.ops.set( - weave.legacy.weave.ops.get(published_uri)[0], + weave_query.ops.set( + weave_query.ops.get(published_uri)[0], "test_publish_saved_node_execution_3", root_args={"branch": "my-branch-2"}, ) published_branched_data = ["test_publish_saved_node_execution_3"] published_branched_uri = "local-artifact:///my_list:my-branch-2/obj" - published_branched_node = weave.legacy.weave.ops.get(published_branched_uri) + published_branched_node = weave_query.ops.get(published_branched_uri) assert weave.use(published_branched_node) == published_branched_data # Step 6: Merge the remote change back into the main branch. - published_merged_uri = weave.legacy.weave.ops.merge_artifact(published_branched_node) + published_merged_uri = weave_query.ops.merge_artifact(published_branched_node) assert published_merged_uri.startswith("wandb-artifact://") assert published_merged_uri != published_uri - published_merged_node = weave.legacy.weave.ops.get(published_merged_uri) + published_merged_node = weave_query.ops.get(published_merged_uri) assert weave.use(published_merged_node) == published_branched_data diff --git a/weave/legacy/tests/test_pydantic.py b/weave_query/tests/test_pydantic.py similarity index 56% rename from weave/legacy/tests/test_pydantic.py rename to weave_query/tests/test_pydantic.py index 720ec1c1d0b..df8e6b3bf1b 100644 --- a/weave/legacy/tests/test_pydantic.py +++ b/weave_query/tests/test_pydantic.py @@ -2,8 +2,9 @@ import pydantic -import weave -from weave.legacy.weave import weave_types as types +import weave_query as weave +import weave_query +from weave_query import weave_types as types def test_pydantic_type_inference(): @@ -32,30 +33,6 @@ class TestPydanticClass(pydantic.BaseModel): assert recovered.a == 1 -def test_pydantic_saveload(client): - class Object(pydantic.BaseModel): - name: Optional[str] = "hello" - description: Optional[str] = None - - class A(Object): - model_name: str - - class B(A): - pass - - a = B(name="my-a", model_name="my-model") - - a_type = weave.type_of(a) - assert a_type.root_type_class().__name__ == "A" - - weave.publish(a, name="my-a") - - a2 = weave.ref("my-a").get() - assert a2.name == "my-a" - assert a2.description is None - assert a2.model_name == "my-model" - - def test_pydantic_nested_type(): class Child(pydantic.BaseModel): a: str @@ -82,21 +59,3 @@ class Parent(pydantic.BaseModel): }, "b": "int", } - - -def test_pydantic_v1(client): - from pydantic import v1 - - class MyV1Object(v1.BaseModel): - val: int - - class MyWeaveObject(weave.Object): - inner: Any - # inner: MyV1Object # v1 properties not yet supported - - @weave.op - def get_inner(obj: MyWeaveObject) -> int: - return obj.inner.val - - res = get_inner(MyWeaveObject(inner=MyV1Object(val=1))) - assert res == 1 diff --git a/weave/legacy/tests/test_ref_tracking.py b/weave_query/tests/test_ref_tracking.py similarity index 90% rename from weave/legacy/tests/test_ref_tracking.py rename to weave_query/tests/test_ref_tracking.py index 61b97d769be..e60024116cf 100644 --- a/weave/legacy/tests/test_ref_tracking.py +++ b/weave_query/tests/test_ref_tracking.py @@ -1,6 +1,7 @@ -import weave -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types +import weave_query as weave +import weave_query +from weave_query import storage +from weave_query import weave_types as types def test_reffed_type(ref_tracking): diff --git a/weave/legacy/tests/test_refs.py b/weave_query/tests/test_refs.py similarity index 94% rename from weave/legacy/tests/test_refs.py rename to weave_query/tests/test_refs.py index a9b6d7c589e..3b0d6f296ce 100644 --- a/weave/legacy/tests/test_refs.py +++ b/weave_query/tests/test_refs.py @@ -1,11 +1,11 @@ import pytest -import weave -from weave.flow.obj import Object -from weave.legacy.weave import artifact_local, storage -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave import ref_util -from weave.legacy.weave.ref_util import ( +import weave_query as weave +import weave_query +from weave_query import artifact_local, storage +from weave_query import ops_arrow as arrow +from weave_query import ref_util +from weave_query.ref_util import ( DICT_KEY_EDGE_NAME, LIST_INDEX_EDGE_NAME, OBJECT_ATTR_EDGE_NAME, @@ -250,19 +250,9 @@ class CustomObjectB: return CustomObjectA, CustomObjectB -def make_custom_object_classes_pydantic(): - class CustomObjectA(Object): - inner_a: int - - class CustomObjectB(Object): - inner_b: CustomObjectA - - return CustomObjectA, CustomObjectB - - @pytest.mark.parametrize( "get_custom_object_classes", - [make_custom_object_classes_classic_type, make_custom_object_classes_pydantic], + [make_custom_object_classes_classic_type], ) def test_ref_extra_object(ref_tracking, get_custom_object_classes): CustomObjectA, CustomObjectB = get_custom_object_classes() @@ -307,7 +297,7 @@ def test_ref_extra_table(ref_tracking): @pytest.mark.parametrize( "get_custom_object_classes", - [make_custom_object_classes_classic_type, make_custom_object_classes_pydantic], + [make_custom_object_classes_classic_type], ) def test_ref_extra_table_very_nested(ref_tracking, get_custom_object_classes): CustomObjectA, CustomObjectB = get_custom_object_classes() @@ -388,7 +378,7 @@ def test_refs_across_artifacts(ref_tracking): @pytest.mark.parametrize( "get_custom_object_classes", - [make_custom_object_classes_classic_type, make_custom_object_classes_pydantic], + [make_custom_object_classes_classic_type], ) def test_ref_objects_across_artifacts_nocross(ref_tracking, get_custom_object_classes): CustomObjectA, CustomObjectB = get_custom_object_classes() diff --git a/weave/legacy/tests/test_relpath_no_syscalls.py b/weave_query/tests/test_relpath_no_syscalls.py similarity index 97% rename from weave/legacy/tests/test_relpath_no_syscalls.py rename to weave_query/tests/test_relpath_no_syscalls.py index 66ce63b1af0..1694e6082ce 100644 --- a/weave/legacy/tests/test_relpath_no_syscalls.py +++ b/weave_query/tests/test_relpath_no_syscalls.py @@ -1,6 +1,6 @@ import pytest -from weave.legacy.weave.util import relpath_no_syscalls +from weave_query.util import relpath_no_syscalls @pytest.mark.parametrize( diff --git a/weave/legacy/tests/test_run_segment.py b/weave_query/tests/test_run_segment.py similarity index 98% rename from weave/legacy/tests/test_run_segment.py rename to weave_query/tests/test_run_segment.py index cf918473b88..6eb1721bce2 100644 --- a/weave/legacy/tests/test_run_segment.py +++ b/weave_query/tests/test_run_segment.py @@ -5,11 +5,12 @@ import pyarrow as pa import pytest -import weave -from weave.legacy.weave import api, ops, storage, weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_arrow import ArrowWeaveList, arrow_as_array -from weave.legacy.weave.ops_domain.run_segment import RunSegment +import weave_query as weave +import weave_query +from weave_query import api, ops, storage, weave_internal +from weave_query import weave_types as types +from weave_query.ops_arrow import ArrowWeaveList, arrow_as_array +from weave_query.ops_domain.run_segment import RunSegment N_NUMERIC_METRICS = 99 # number of numerical columns in the metrics table diff --git a/weave/legacy/tests/test_serialize.py b/weave_query/tests/test_serialize.py similarity index 94% rename from weave/legacy/tests/test_serialize.py rename to weave_query/tests/test_serialize.py index 4a7869e9fe4..73d31b7f8ac 100644 --- a/weave/legacy/tests/test_serialize.py +++ b/weave_query/tests/test_serialize.py @@ -1,13 +1,14 @@ import pytest -import weave -from weave.legacy.weave import api as api -from weave.legacy.weave import graph, op_args, ops, registry_mem, serialize, weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_primitives import list_ -from weave.legacy.weave.weave_internal import make_const_node - -from ...tests import fixture_fakewandb as fwb +import weave_query as weave +import weave_query +from weave_query import api as api +from weave_query import graph, op_args, ops, registry_mem, serialize, weave_internal +from weave_query import weave_types as types +from weave_query.ops_primitives import list_ +from weave_query.weave_internal import make_const_node + +from tests import fixture_fakewandb as fwb response = { "project_518fa79465d8ffaeb91015dce87e092f": { diff --git a/weave/legacy/tests/test_server.py b/weave_query/tests/test_server.py similarity index 83% rename from weave/legacy/tests/test_server.py rename to weave_query/tests/test_server.py index c5aa37a3c74..562cba81fe7 100644 --- a/weave/legacy/tests/test_server.py +++ b/weave_query/tests/test_server.py @@ -6,13 +6,13 @@ import pytest import requests -from weave.legacy.weave import api as weave -from weave.legacy.weave import client as _client -from weave.legacy.weave import context_state, ops -from weave.legacy.weave import server as _server -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.weave_internal import make_const_node +from weave_query import api as weave +from weave_query import client as _client +from weave_query import context_state, ops +from weave_query import server as _server +from weave_query import weave_types as types +from weave_query.decorator_op import op +from weave_query.weave_internal import make_const_node SERVER_TYPES = ["inprocess", "subprocess", "http"] diff --git a/weave/legacy/tests/test_show.py b/weave_query/tests/test_show.py similarity index 90% rename from weave/legacy/tests/test_show.py rename to weave_query/tests/test_show.py index 8d56c86cd0c..8065249398a 100644 --- a/weave/legacy/tests/test_show.py +++ b/weave_query/tests/test_show.py @@ -2,9 +2,9 @@ # The outputs of weave.show (the generated panel urls and their arguments) # need to match what javascript expects. -from weave.legacy.weave import ops +from weave_query import ops -from ...legacy.weave.show import _show_params +from weave_query.show import _show_params from . import test_helpers diff --git a/weave/legacy/tests/test_stitch.py b/weave_query/tests/test_stitch.py similarity index 86% rename from weave/legacy/tests/test_stitch.py rename to weave_query/tests/test_stitch.py index 12e6deb26a5..7fc087d3469 100644 --- a/weave/legacy/tests/test_stitch.py +++ b/weave_query/tests/test_stitch.py @@ -2,14 +2,15 @@ import pytest -import weave -from weave.legacy.weave import compile_domain, compile_table, weave_internal -from weave.legacy.weave import context_state as _context -from weave.legacy.weave.language_features.tagging import make_tag_getter_op -from weave.legacy.weave.ops_domain import run_ops - -from ...legacy.weave import stitch -from ...tests import fixture_fakewandb as fwb +import weave_query as weave +import weave_query +from weave_query import compile_domain, compile_table, weave_internal +from weave_query import context_state as _context +from weave_query.language_features.tagging import make_tag_getter_op +from weave_query.ops_domain import run_ops + +from weave_query import stitch +from tests import fixture_fakewandb as fwb from . import test_wb _loading_builtins_token = _context.set_loading_built_ins() @@ -122,7 +123,7 @@ def test_tag_access_in_filter_expr(): def test_traverse_dict(): obj_node = weave.save(_TestPlanObject("a", 1)) - p = stitch.stitch([weave.legacy.weave.ops.dict_(x=obj_node)["x"].horse()]) + p = stitch.stitch([weave_query.ops.dict_(x=obj_node)["x"].horse()]) obj_recorder = p.get_result(obj_node) assert len(obj_recorder.calls) == 1 assert obj_recorder.calls[0].node.from_op.name == "_TestPlanObject-horse" @@ -130,7 +131,7 @@ def test_traverse_dict(): def test_travese_groupby_dict(): obj_node = weave.save([{"o": {"a": 5}, "x": 1}]) - grouped = obj_node.groupby(lambda row: weave.legacy.weave.ops.dict_(x=row["o"])) + grouped = obj_node.groupby(lambda row: weave_query.ops.dict_(x=row["o"])) output = grouped[0]["x"] groupkey_output = grouped[0].groupkey()["x"]["a"] p = stitch.stitch([output, groupkey_output]) @@ -163,16 +164,16 @@ def test_zero_arg_ops(): def test_shared_fn_node(): - const_list_node = weave.legacy.weave.ops.make_list(a=1, b=2) + const_list_node = weave_query.ops.make_list(a=1, b=2) indexed_node = const_list_node[0] - arr_1_node = weave.legacy.weave.ops.make_list(a=1, b=2, c=3) - arr_2_node = weave.legacy.weave.ops.make_list(a=10, b=20, c=30) + arr_1_node = weave_query.ops.make_list(a=1, b=2, c=3) + arr_2_node = weave_query.ops.make_list(a=10, b=20, c=30) mapped_1_node = arr_1_node.map( - lambda row: weave.legacy.weave.ops.dict_(item=row, const=indexed_node) + lambda row: weave_query.ops.dict_(item=row, const=indexed_node) ) mapped_2_node = arr_2_node.map( - lambda row: weave.legacy.weave.ops.dict_(item=row, const=indexed_node) + lambda row: weave_query.ops.dict_(item=row, const=indexed_node) ) mapped_1_item_node = mapped_1_node["item"] @@ -183,7 +184,7 @@ def test_shared_fn_node(): mapped_2_item_add_node = mapped_2_item_node + 100 mapped_2_const_add_node = mapped_2_const_node + 100 - list_of_list_node = weave.legacy.weave.ops.make_list( + list_of_list_node = weave_query.ops.make_list( a=mapped_1_item_node, b=mapped_1_const_node, c=mapped_2_item_add_node, @@ -218,9 +219,9 @@ def assert_node_calls(node, expected_call_names): def test_stitch_keytypes_override_fetch_all_columns(fake_wandb): fake_wandb.fake_api.add_mock(test_wb.table_mock_filtered) - keytypes_node = weave.legacy.weave.ops.object_keytypes( + keytypes_node = weave_query.ops.object_keytypes( run_ops.run_tag_getter_op( - weave.legacy.weave.ops.project("stacey", "mendeleev") + weave_query.ops.project("stacey", "mendeleev") .filteredRuns("{}", "-createdAt") .limit(50) .summary() @@ -255,15 +256,15 @@ def test_stitch_overlapping_tags(fake_wandb): } } ) - project_node = weave.legacy.weave.ops.project("stacey", "mendeleev") + project_node = weave_query.ops.project("stacey", "mendeleev") filtered_runs_a_node = project_node.filteredRuns("{}", "-createdAt")[0] summary_a_node = filtered_runs_a_node.summary() - tagged_name_a = weave.legacy.weave.ops.run_ops.run_tag_getter_op( + tagged_name_a = weave_query.ops.run_ops.run_tag_getter_op( summary_a_node["a"] ).name() filtered_runs_b_node = project_node.filteredRuns("{}", "+createdAt")[0] summary_b_node = filtered_runs_b_node.summary() - tagged_id_b = weave.legacy.weave.ops.run_ops.run_tag_getter_op(summary_b_node).id() + tagged_id_b = weave_query.ops.run_ops.run_tag_getter_op(summary_b_node).id() p = stitch.stitch([tagged_name_a, tagged_id_b]) @@ -273,9 +274,9 @@ def test_stitch_overlapping_tags(fake_wandb): def test_refine_history_type_included_in_gql(): - project_node = weave.legacy.weave.ops.project("stacey", "mendeleev") + project_node = weave_query.ops.project("stacey", "mendeleev") runs_node = project_node.runs() - map_node = runs_node.map(lambda row: weave.legacy.weave.ops.dict_(variant=row)) + map_node = runs_node.map(lambda row: weave_query.ops.dict_(variant=row)) checkpoint_node = map_node.createIndexCheckpointTag() index_node = checkpoint_node[0] pick_node = index_node["variant"] @@ -286,7 +287,7 @@ def test_refine_history_type_included_in_gql(): def test_stitch_missing_key(): a_node = weave_internal.make_const_node(weave.types.String(), "a") - dict_node = weave.legacy.weave.ops.dict_(a=a_node) + dict_node = weave_query.ops.dict_(a=a_node) picked_valid = dict_node["a"] + "-suffix" picked_missing = dict_node["b"] + "-suffix" diff --git a/weave/legacy/tests/test_storage.py b/weave_query/tests/test_storage.py similarity index 97% rename from weave/legacy/tests/test_storage.py rename to weave_query/tests/test_storage.py index 8183200fa3e..02a7afc23fa 100644 --- a/weave/legacy/tests/test_storage.py +++ b/weave_query/tests/test_storage.py @@ -7,19 +7,19 @@ import pytest import wandb -from weave.legacy.weave import api as weave -from weave.legacy.weave import ( +from weave_query import api as weave +from weave_query import ( artifact_mem, artifact_wandb, mappers_python, ops_arrow, storage, ) -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow import list_ as arrow -from weave.legacy.weave.weave_internal import make_const_node +from weave_query import weave_types as types +from weave_query.arrow import list_ as arrow +from weave_query.weave_internal import make_const_node -from ...legacy.weave.weavejs_fixes import recursively_unwrap_unions +from weave_query.weavejs_fixes import recursively_unwrap_unions from . import test_helpers diff --git a/weave/legacy/tests/test_stream_table.py b/weave_query/tests/test_stream_table.py similarity index 89% rename from weave/legacy/tests/test_stream_table.py rename to weave_query/tests/test_stream_table.py index 7591331e979..0415c40736e 100644 --- a/weave/legacy/tests/test_stream_table.py +++ b/weave_query/tests/test_stream_table.py @@ -1,7 +1,7 @@ import os import time -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +from weave_query.wandb_interface.wandb_stream_table import StreamTable def main(table_name, project_name, entity_name, sample_limit, gap_ms): diff --git a/weave/legacy/tests/test_table_ops.py b/weave_query/tests/test_table_ops.py similarity index 97% rename from weave/legacy/tests/test_table_ops.py rename to weave_query/tests/test_table_ops.py index 2994235eb37..e8203cedd2d 100644 --- a/weave/legacy/tests/test_table_ops.py +++ b/weave_query/tests/test_table_ops.py @@ -3,8 +3,8 @@ import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import ( +from weave_query import api as weave +from weave_query import ( box, context, context_state, @@ -13,10 +13,10 @@ storage, weave_internal, ) -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_domain import table as table_ops +from weave_query import weave_types as types +from weave_query.ops_domain import table as table_ops -from weave.legacy.tests.util import weavejs_ops +from tests.util import weavejs_ops TABLE_TYPES = ["list", "pandas", "sql"] diff --git a/weave/legacy/tests/test_tagging.py b/weave_query/tests/test_tagging.py similarity index 95% rename from weave/legacy/tests/test_tagging.py rename to weave_query/tests/test_tagging.py index 471205b4920..88d24d7ef7d 100644 --- a/weave/legacy/tests/test_tagging.py +++ b/weave_query/tests/test_tagging.py @@ -1,19 +1,20 @@ import pytest -import weave -from weave.legacy.weave import box, weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.artifact_fs import FilesystemArtifactFileType -from weave.legacy.weave.language_features.tagging import ( +import weave_query as weave +import weave_query +from weave_query import box, weave_internal +from weave_query import weave_types as types +from weave_query.artifact_fs import FilesystemArtifactFileType +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, tagged_value_type_helpers, ) -from weave.legacy.weave.ops_domain.run_ops import run_tag_getter_op -from weave.legacy.weave.ops_domain.wb_domain_types import ProjectType, Run, RunType -from weave.legacy.weave.ops_primitives import dict as dict_ops -from weave.legacy.weave.ops_primitives import list_ as list_ops +from weave_query.ops_domain.run_ops import run_tag_getter_op +from weave_query.ops_domain.wb_domain_types import ProjectType, Run, RunType +from weave_query.ops_primitives import dict as dict_ops +from weave_query.ops_primitives import list_ as list_ops def test_tagged_value(): @@ -29,7 +30,7 @@ def test_tagged_types(): class _TestNumber: inner: int - from weave.legacy.weave import context_state + from weave_query import context_state _loading_builtins_token = context_state.set_loading_built_ins() diff --git a/weave/legacy/tests/test_templates.py b/weave_query/tests/test_templates.py similarity index 83% rename from weave/legacy/tests/test_templates.py rename to weave_query/tests/test_templates.py index 6c3e2289295..42ac8157239 100644 --- a/weave/legacy/tests/test_templates.py +++ b/weave_query/tests/test_templates.py @@ -2,11 +2,12 @@ import wandb -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query.wandb_interface.wandb_stream_table import StreamTable -from ...legacy.weave.panels_py import generator_templates +from weave_query.panels_py import generator_templates _loading_builtins_token = _context.set_loading_built_ins() @@ -34,17 +35,17 @@ class DummyBoardConfig: def dummy_board( input_node, config: typing.Optional[DummyBoardConfig] = None, -) -> weave.legacy.weave.panels.Group: +) -> weave_query.panels.Group: assert board_input_type.assign_type(input_node.type) control_items = [ - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( input_node, id="data", ), ] - return weave.legacy.weave.panels.Board(vars=control_items, panels=[]) + return weave_query.panels.Board(vars=control_items, panels=[]) generator_templates.template_registry.register( @@ -77,13 +78,13 @@ def _assert_valid_node_raw(node): output_group = weave.use(dummy_node) # Assert the out template is successfully generated - assert isinstance(output_group, weave.legacy.weave.panels.Group) + assert isinstance(output_group, weave_query.panels.Group) data_node = output_group.config.items["sidebar"].config.items["data"] # assert that the node sent to the generator is the same as the node that is used # Note: this is a heuristic, but probably close enough - assert isinstance(data_node, weave.legacy.weave.graph.OutputNode) + assert isinstance(data_node, weave_query.graph.OutputNode) assert data_node.from_op.name == node.from_op.name assert str(data_node) == str(node) @@ -102,7 +103,7 @@ def test_templates_for_run_logs_valid(user_by_api_key_in_env): run.finish() run_history_node = ( - weave.legacy.weave.ops.project(run.entity, run.project).run(run.id).history() + weave_query.ops.project(run.entity, run.project).run(run.id).history() ) assert_valid_node(run_history_node) @@ -114,7 +115,7 @@ def test_templates_for_run_logs_invalid(user_by_api_key_in_env): run.finish() run_history_node = ( - weave.legacy.weave.ops.project(run.entity, run.project).run(run.id).history() + weave_query.ops.project(run.entity, run.project).run(run.id).history() ) assert_invalid_node(run_history_node) @@ -126,7 +127,7 @@ def test_templates_for_logged_table_valid(user_by_api_key_in_env): run.finish() table_node = ( - weave.legacy.weave.ops.project(run.entity, run.project) + weave_query.ops.project(run.entity, run.project) .run(run.id) .summary()["table"] .table() @@ -142,7 +143,7 @@ def test_templates_for_logged_table_invalid(user_by_api_key_in_env): run.finish() table_node = ( - weave.legacy.weave.ops.project(run.entity, run.project) + weave_query.ops.project(run.entity, run.project) .run(run.id) .summary()["table"] .table() diff --git a/weave/legacy/tests/test_timestamp_bin.py b/weave_query/tests/test_timestamp_bin.py similarity index 83% rename from weave/legacy/tests/test_timestamp_bin.py rename to weave_query/tests/test_timestamp_bin.py index 1e24617baeb..e216b88ab16 100644 --- a/weave/legacy/tests/test_timestamp_bin.py +++ b/weave_query/tests/test_timestamp_bin.py @@ -2,11 +2,12 @@ import pytest -import weave +import weave_query as weave +import weave_query def test_timestamp_bins_fixed(): - bin_fn = weave.legacy.weave.ops.timestamp_bins_fixed(60) + bin_fn = weave_query.ops.timestamp_bins_fixed(60) ts = datetime(2020, 1, 1, 8, 30, 1) called = bin_fn(ts) @@ -19,7 +20,7 @@ def test_timestamp_bins_fixed(): def test_timestamp_bins_nice(): start_ts = datetime(2020, 1, 1, 8, 30, 1) stop_ts = datetime(2020, 1, 1, 12, 30, 0) - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice([start_ts, stop_ts], 100) + bin_fn = weave_query.ops.timestamp_bins_nice([start_ts, stop_ts], 100) ts = datetime(2020, 1, 1, 8, 45, 13) called = bin_fn(ts) @@ -32,7 +33,7 @@ def test_timestamp_bins_nice(): def test_timestamp_bin(): start_ts = datetime(2020, 1, 1, 8, 30, 1) stop_ts = datetime(2020, 1, 1, 12, 30, 0) - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice([start_ts, stop_ts], 100) + bin_fn = weave_query.ops.timestamp_bins_nice([start_ts, stop_ts], 100) ts = datetime(2020, 1, 1, 8, 45, 13) ts_node = weave.save(ts) @@ -45,10 +46,10 @@ def test_timestamp_bin(): def test_timestamp_bin_vector(): start_ts = datetime(2020, 1, 1, 8, 30, 1) stop_ts = datetime(2020, 1, 1, 12, 30, 0) - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice([start_ts, stop_ts], 100) + bin_fn = weave_query.ops.timestamp_bins_nice([start_ts, stop_ts], 100) ts = datetime(2020, 1, 1, 8, 45, 13, tzinfo=timezone.utc) - ts_node = weave.legacy.weave.ops.to_weave_arrow([ts, ts + timedelta(seconds=90)]) + ts_node = weave_query.ops.to_weave_arrow([ts, ts + timedelta(seconds=90)]) # This does not vectorize because mapped ops don't automatically # vectorize! diff --git a/weave/legacy/tests/test_trace.py b/weave_query/tests/test_trace.py similarity index 84% rename from weave/legacy/tests/test_trace.py rename to weave_query/tests/test_trace.py index a809e10a654..dcd5399d741 100644 --- a/weave/legacy/tests/test_trace.py +++ b/weave_query/tests/test_trace.py @@ -1,10 +1,10 @@ import re -from weave.legacy.weave import api as weave -from weave.legacy.weave import graph, storage -from weave.legacy.weave.weave_internal import make_const_node +from weave_query import api as weave +from weave_query import graph, storage +from weave_query.weave_internal import make_const_node -from ...legacy.weave import trace_legacy +from weave_query import trace_legacy def test_node_expr(): diff --git a/weave/legacy/tests/test_typeddict_notrequired.py b/weave_query/tests/test_typeddict_notrequired.py similarity index 87% rename from weave/legacy/tests/test_typeddict_notrequired.py rename to weave_query/tests/test_typeddict_notrequired.py index 7b9c940184d..7886371420e 100644 --- a/weave/legacy/tests/test_typeddict_notrequired.py +++ b/weave_query/tests/test_typeddict_notrequired.py @@ -6,8 +6,8 @@ TypedDict, ) -from weave.legacy.weave import infer_types -from weave.legacy.weave import weave_types as types +from weave_query import infer_types +from weave_query import weave_types as types class _TestNotRequiredTypedDict(TypedDict): diff --git a/weave/legacy/tests/test_uris.py b/weave_query/tests/test_uris.py similarity index 91% rename from weave/legacy/tests/test_uris.py rename to weave_query/tests/test_uris.py index f544d9158a5..2fd12164dfc 100644 --- a/weave/legacy/tests/test_uris.py +++ b/weave_query/tests/test_uris.py @@ -1,7 +1,7 @@ import pytest -from weave.legacy.weave import uris -from weave.legacy.weave.artifact_wandb import WeaveWBArtifactURI +from weave_query import uris +from weave_query.artifact_wandb import WeaveWBArtifactURI URIS = [ "op-get", diff --git a/weave/legacy/tests/test_wb.py b/weave_query/tests/test_wb.py similarity index 98% rename from weave/legacy/tests/test_wb.py rename to weave_query/tests/test_wb.py index b6cc5a11d5d..e347e89ed34 100644 --- a/weave/legacy/tests/test_wb.py +++ b/weave_query/tests/test_wb.py @@ -6,21 +6,21 @@ import pytest import wandb -from weave.legacy.weave import api as weave -from weave.legacy.weave import artifact_fs, artifact_wandb, compile, graph, ops, stitch, uris -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_arrow import ArrowWeaveListType -from weave.legacy.weave.ops_domain import artifact_membership_ops as amo -from weave.legacy.weave.ops_domain import table, wb_util, wbmedia -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_primitives import dict_, list_ -from weave.legacy.weave.ops_primitives.file import _as_w0_dict_ +from weave_query import api as weave +from weave_query import artifact_fs, artifact_wandb, compile, graph, ops, stitch, uris +from weave_query import ops_arrow as arrow +from weave_query import weave_types as types +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_arrow import ArrowWeaveListType +from weave_query.ops_domain import artifact_membership_ops as amo +from weave_query.ops_domain import table, wb_util, wbmedia +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_primitives import dict_, list_ +from weave_query.ops_primitives.file import _as_w0_dict_ from .test_wb_domain_ops import assert_gql_str_equal -from ...tests import fixture_fakewandb as fwb -from weave.legacy.tests.util import weavejs_ops +from tests import fixture_fakewandb as fwb +from tests.util import weavejs_ops file_path_response = { "project_518fa79465d8ffaeb91015dce87e092f": { diff --git a/weave/legacy/tests/test_wb_data_types.py b/weave_query/tests/test_wb_data_types.py similarity index 95% rename from weave/legacy/tests/test_wb_data_types.py rename to weave_query/tests/test_wb_data_types.py index acffa023fdf..1e2b934399b 100644 --- a/weave/legacy/tests/test_wb_data_types.py +++ b/weave_query/tests/test_wb_data_types.py @@ -11,17 +11,18 @@ from wandb.sdk.artifacts.artifact_state import ArtifactState from wandb.sdk.data_types._dtypes import TypeRegistry as SDKTypeRegistry -import weave -from weave.legacy.weave import artifact_fs -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.artifact_wandb import WandbArtifact, WeaveWBArtifactURI -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_domain.wbmedia import ImageArtifactFileRefType -from weave.legacy.weave.ops_primitives import file -from weave.legacy.weave.wandb_client_api import wandb_gql_query -from weave.legacy.weave.wandb_util import weave0_type_json_to_weave1_type +import weave_query as weave +import weave_query +from weave_query import artifact_fs +from weave_query import weave_types as types +from weave_query.artifact_wandb import WandbArtifact, WeaveWBArtifactURI +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_domain.wbmedia import ImageArtifactFileRefType +from weave_query.ops_primitives import file +from weave_query.wandb_client_api import wandb_gql_query +from weave_query.wandb_util import weave0_type_json_to_weave1_type -from ...tests.fixture_fakewandb import FakeApi +from tests.fixture_fakewandb import FakeApi class RandomClass: @@ -109,31 +110,31 @@ def make_molecule(clean_up=True): # ( make_image(), - weave.legacy.weave.ops.ImageArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.ImageArtifactFileRef.WeaveType(), # type: ignore ), ( make_audio(), - weave.legacy.weave.ops.AudioArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.AudioArtifactFileRef.WeaveType(), # type: ignore ), ( make_html(), - weave.legacy.weave.ops.HtmlArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.HtmlArtifactFileRef.WeaveType(), # type: ignore ), ( make_bokeh(), - weave.legacy.weave.ops.BokehArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.BokehArtifactFileRef.WeaveType(), # type: ignore ), ( make_video(), - weave.legacy.weave.ops.VideoArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.VideoArtifactFileRef.WeaveType(), # type: ignore ), ( make_object3d(), - weave.legacy.weave.ops.Object3DArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.Object3DArtifactFileRef.WeaveType(), # type: ignore ), ( make_molecule(), - weave.legacy.weave.ops.MoleculeArtifactFileRef.WeaveType(), # type: ignore + weave_query.ops.MoleculeArtifactFileRef.WeaveType(), # type: ignore ), # See comment in wandb_util.py - this may change in the future # Temporarily disabled until we can figure out how to mock @@ -630,7 +631,7 @@ def test_grouping_on_images(fake_wandb): table_node = file_node.table() table_rows = table_node.rows() grouped = table_rows.groupby( - lambda row: weave.legacy.weave.ops.dict_(g_image=row["image"]) + lambda row: weave_query.ops.dict_(g_image=row["image"]) ) raw_data = weave.use(grouped).to_pylist_notags() @@ -761,7 +762,7 @@ def make_join_table_row_nodes(fake_wandb): def test_join_all_on_images(fake_wandb): table_1_rows, table_2_rows = make_join_table_row_nodes(fake_wandb) - rows = weave.legacy.weave.ops.make_list(a=table_1_rows, b=table_2_rows) + rows = weave_query.ops.make_list(a=table_1_rows, b=table_2_rows) joined = rows.joinAll(lambda row: row["image"], True) @@ -855,12 +856,12 @@ def wait_for(): wait_for_x_times(wait_for) - run_node = weave.legacy.weave.ops.project(run.entity, run.project).run(run.id) + run_node = weave_query.ops.project(run.entity, run.project).run(run.id) for history_op_name in ["history3", "history"]: history_node = run_node._get_op(history_op_name)() mapped_node = history_node.map( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{key: row[key] for key in log_dict.keys()} ) ) diff --git a/weave/legacy/tests/test_wb_domain_ops.py b/weave_query/tests/test_wb_domain_ops.py similarity index 98% rename from weave/legacy/tests/test_wb_domain_ops.py rename to weave_query/tests/test_wb_domain_ops.py index 89c12c8260a..94b1d35534b 100644 --- a/weave/legacy/tests/test_wb_domain_ops.py +++ b/weave_query/tests/test_wb_domain_ops.py @@ -3,14 +3,15 @@ import graphql import wandb -import weave -from weave.legacy.weave import ops -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.ops_domain import wb_domain_types -from weave.legacy.weave.ops_primitives import _dict_utils - -from ...legacy.weave import registry_mem -from ...tests import fixture_fakewandb as fwb +import weave_query as weave +import weave_query +from weave_query import ops +from weave_query.language_features.tagging import tagged_value_type +from weave_query.ops_domain import wb_domain_types +from weave_query.ops_primitives import _dict_utils + +from weave_query import registry_mem +from tests import fixture_fakewandb as fwb """ Tests in this file whould be used to test the graphs that can be constructed diff --git a/weave/legacy/tests/test_wb_domain_types.py b/weave_query/tests/test_wb_domain_types.py similarity index 88% rename from weave/legacy/tests/test_wb_domain_types.py rename to weave_query/tests/test_wb_domain_types.py index 5380e0347e3..d125f5275b2 100644 --- a/weave/legacy/tests/test_wb_domain_types.py +++ b/weave_query/tests/test_wb_domain_types.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_domain import wb_domain_types as wdt +from weave_query import api as weave +from weave_query import storage +from weave_query import weave_types as types +from weave_query.ops_domain import wb_domain_types as wdt def test_with_keys_assignability(): diff --git a/weave/legacy/tests/test_wb_end_to_end.py b/weave_query/tests/test_wb_end_to_end.py similarity index 83% rename from weave/legacy/tests/test_wb_end_to_end.py rename to weave_query/tests/test_wb_end_to_end.py index 2902a34d1aa..5767d87abbd 100644 --- a/weave/legacy/tests/test_wb_end_to_end.py +++ b/weave_query/tests/test_wb_end_to_end.py @@ -1,7 +1,8 @@ import wandb -import weave -from weave.legacy.weave import compile +import weave_query as weave +import weave_query +from weave_query import compile # Example of end to end integration test @@ -11,17 +12,17 @@ def test_run_logging(user_by_api_key_in_env): run.finish() summary_node = ( - weave.legacy.weave.ops.project(run.entity, run.project).run(run.id).summary()["a"] + weave_query.ops.project(run.entity, run.project).run(run.id).summary()["a"] ) summary = weave.use(summary_node) assert summary == 1 - is_none_node = weave.legacy.weave.ops.project(run.entity, run.project).isNone() + is_none_node = weave_query.ops.project(run.entity, run.project).isNone() assert weave.use(is_none_node) == False - is_none_node = weave.legacy.weave.ops.project( + is_none_node = weave_query.ops.project( run.entity, "project_does_not_exist" ).isNone() @@ -60,7 +61,7 @@ def _test_basic_publish(user_fixture): uri == f"wandb-artifact:///{user_fixture.username}/weave/list:0cdf3358dc939f961ca9/obj" ) - assert weave.legacy.weave.ref_base.Ref.from_str(uri).get() == [1, 2, 3] + assert weave_query.ref_base.Ref.from_str(uri).get() == [1, 2, 3] # Example of end to end integration test @@ -74,7 +75,7 @@ def test_run_histories(user_by_api_key_in_env): run.finish() history_node = ( - weave.legacy.weave.ops.project(run.entity, run.project).runs().history().concat()["a"] + weave_query.ops.project(run.entity, run.project).runs().history().concat()["a"] ) history = weave.use(history_node) @@ -89,7 +90,7 @@ def test_run_history_count(user_by_api_key_in_env, cache_mode_minimal): run.log({"a": 2}) run.finish() - run_node = weave.legacy.weave.ops.project(run.entity, run.project).run(run.id) + run_node = weave_query.ops.project(run.entity, run.project).run(run.id) h_count_node = run_node.history().count() history_count = weave.use(h_count_node) assert history_count == 2 diff --git a/weave/legacy/tests/test_wb_history_loading_compatability.py b/weave_query/tests/test_wb_history_loading_compatability.py similarity index 96% rename from weave/legacy/tests/test_wb_history_loading_compatability.py rename to weave_query/tests/test_wb_history_loading_compatability.py index da2571fac1b..7675d29f681 100644 --- a/weave/legacy/tests/test_wb_history_loading_compatability.py +++ b/weave_query/tests/test_wb_history_loading_compatability.py @@ -7,14 +7,15 @@ import pytest from PIL import Image -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave.ops_domain.run_history.context import ( +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query.ops_domain.run_history.context import ( error_on_non_vectorized_history_transform, ) -from weave.legacy.weave.ops_domain.run_history.history_op_common import _without_tags -from weave.legacy.weave.wandb_client_api import wandb_gql_query -from weave.legacy.weave.wandb_interface import wandb_stream_table +from weave_query.ops_domain.run_history.history_op_common import _without_tags +from weave_query.wandb_client_api import wandb_gql_query +from weave_query.wandb_interface import wandb_stream_table HISTORY_OP_NAME = "history3" @@ -180,7 +181,7 @@ def do_batch_test(username, rows, do_assertion): row_accumulator, st, user_logged_keys = do_logging(username, rows) row_type = weave.types.TypeRegistry.type_of([{}, *row_accumulator]) - run_node = weave.legacy.weave.ops.project(st._entity_name, st._project_name).run( + run_node = weave_query.ops.project(st._entity_name, st._project_name).run( st._table_name ) @@ -392,7 +393,7 @@ def test_stream_table_perf(user_by_api_key_in_env, n_rows, n_cols): timings["log"] += time.time() print(f"Log Time: {timings['log']}") - run_node = weave.legacy.weave.ops.project(st._entity_name, st._project_name).run( + run_node = weave_query.ops.project(st._entity_name, st._project_name).run( st._table_name ) diff --git a/weave/legacy/tests/test_wb_stream_table.py b/weave_query/tests/test_wb_stream_table.py similarity index 91% rename from weave/legacy/tests/test_wb_stream_table.py rename to weave_query/tests/test_wb_stream_table.py index 55bf16953ff..bbfb7ccd1c6 100644 --- a/weave/legacy/tests/test_wb_stream_table.py +++ b/weave_query/tests/test_wb_stream_table.py @@ -4,9 +4,10 @@ import pytest from PIL import Image -import weave -from weave.legacy.weave import context, execute, gql_json_cache, wandb_api, weave_types -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +import weave_query as weave +import weave_query +from weave_query import context, execute, gql_json_cache, wandb_api, weave_types +from weave_query.wandb_interface.wandb_stream_table import StreamTable def make_stream_table(*args, **kwargs): @@ -26,7 +27,7 @@ def test_stream_logging(user_by_api_key_in_env): st.finish() hist_node = ( - weave.legacy.weave.ops.project(user_by_api_key_in_env.username, "stream-tables") + weave_query.ops.project(user_by_api_key_in_env.username, "stream-tables") .run("test_table") .history3() ) @@ -56,7 +57,7 @@ def test_bytes_read_from_arrow_reporting(user_by_api_key_in_env): st.finish() hist_node = ( - weave.legacy.weave.ops.project(user_by_api_key_in_env.username, "stream-tables") + weave_query.ops.project(user_by_api_key_in_env.username, "stream-tables") .run("test_table") .history3() ) @@ -90,7 +91,7 @@ def image(): time.sleep(5) hist_node = ( - weave.legacy.weave.ops.project(user_by_api_key_in_env.username, "stream-tables") + weave_query.ops.project(user_by_api_key_in_env.username, "stream-tables") .run("test_table-8") .history2() ) @@ -121,7 +122,7 @@ def test_multi_writers_sequential(user_by_api_key_in_env): def do_asserts(): hist_node = ( - weave.legacy.weave.ops.project(user_by_api_key_in_env.username, "stream-tables") + weave_query.ops.project(user_by_api_key_in_env.username, "stream-tables") .run("test_table") .history2() ) @@ -181,7 +182,7 @@ def test_multi_writers_parallel(user_by_api_key_in_env): st_2.finish() hist_node = ( - weave.legacy.weave.ops.project(entity_name, "stream-tables") + weave_query.ops.project(entity_name, "stream-tables") .run(table_name) .history2() ) diff --git a/weave/legacy/tests/test_wb_tables.py b/weave_query/tests/test_wb_tables.py similarity index 88% rename from weave/legacy/tests/test_wb_tables.py rename to weave_query/tests/test_wb_tables.py index 3dca70237be..4652855b92a 100644 --- a/weave/legacy/tests/test_wb_tables.py +++ b/weave_query/tests/test_wb_tables.py @@ -3,13 +3,14 @@ import numpy as np import wandb -import weave -from weave.legacy.weave.language_features.tagging import make_tag_getter_op -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_arrow.list_ops import filter -from weave.legacy.weave.ops_domain import wbmedia -from weave.legacy.weave.ops_domain.wandb_domain_gql import _make_alias -from weave.legacy.weave.weave_internal import make_const_node +import weave_query as weave +import weave_query +from weave_query.language_features.tagging import make_tag_getter_op +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_arrow.list_ops import filter +from weave_query.ops_domain import wbmedia +from weave_query.ops_domain.wandb_domain_gql import _make_alias +from weave_query.weave_internal import make_const_node def use_static_artifact_node( @@ -18,7 +19,7 @@ def use_static_artifact_node( project_name="test_project", collection_name="joined_table_artifact", version="latest", -) -> weave.legacy.weave.graph.Node: +) -> weave_query.graph.Node: fake_wandb.fake_api.add_mock( lambda q, ndx: { "project_5702147f0293fd7538d402af13069708": { @@ -53,7 +54,7 @@ def use_static_artifact_node( } } ) - return weave.legacy.weave.ops.project(entity_name, project_name).artifactVersion( + return weave_query.ops.project(entity_name, project_name).artifactVersion( collection_name, version ) @@ -242,9 +243,9 @@ def test_metric_table_join(fake_wandb): file_node = art_node.file("table.table.json") table_node = file_node.table() table_rows = table_node.rows().createIndexCheckpointTag() - grouped = table_rows.groupby(lambda row: weave.legacy.weave.ops.dict_(label=row["label"])) + grouped = table_rows.groupby(lambda row: weave_query.ops.dict_(label=row["label"])) sorted = grouped.sort( - lambda row: weave.legacy.weave.ops.make_list(a=row.groupkey()["label"]), ["asc"] + lambda row: weave_query.ops.make_list(a=row.groupkey()["label"]), ["asc"] ) group_col_0 = sorted[0].groupkey()["label"] group_col_1 = sorted[1].groupkey()["label"] @@ -265,9 +266,9 @@ def test_empty_table(fake_wandb): table_node = file_node.table() table_rows = table_node.rows().createIndexCheckpointTag() filtered = filter(table_rows, lambda row: row["label"] == "cat") - grouped = filtered.groupby(lambda row: weave.legacy.weave.ops.dict_(label=row["label"])) + grouped = filtered.groupby(lambda row: weave_query.ops.dict_(label=row["label"])) sorted = grouped.sort( - lambda row: weave.legacy.weave.ops.make_list(a=row.groupkey()["label"]), ["asc"] + lambda row: weave_query.ops.make_list(a=row.groupkey()["label"]), ["asc"] ) res = weave.use(sorted) assert res.to_pylist_raw() == [] @@ -306,14 +307,14 @@ def test_join_group_combo(fake_wandb): art_2_node = fake_wandb.mock_artifact_as_node(art_2) table_1_rows = art_1_node.file("table_1.table.json").table().rows() table_2_rows = art_2_node.file("table_2.table.json").table().rows() - list_of_tables = weave.legacy.weave.ops.make_list(a=table_1_rows, b=table_2_rows).dropna() + list_of_tables = weave_query.ops.make_list(a=table_1_rows, b=table_2_rows).dropna() joined_tables = list_of_tables.joinAll( - lambda row: weave.legacy.weave.ops.make_list(a=row["id"]), False + lambda row: weave_query.ops.make_list(a=row["id"]), False ) indexed = joined_tables.createIndexCheckpointTag() - grouped = indexed.groupby(lambda row: weave.legacy.weave.ops.dict_(label=row["label"][0])) + grouped = indexed.groupby(lambda row: weave_query.ops.dict_(label=row["label"][0])) sorted = grouped.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row.groupkey()["label"]), + lambda row: weave_query.ops.make_list(label=row.groupkey()["label"]), ["asc"], ) assert weave.use(sorted.count()) == 3 @@ -326,7 +327,7 @@ def test_join_group_combo(fake_wandb): join_obj = sorted[0].joinObj()[0] assert weave.use(join_obj) == [1.0] - from weave.legacy.weave import context_state + from weave_query import context_state _loading_builtins_token = context_state.set_loading_built_ins() tag_getter_op = make_tag_getter_op.make_tag_getter_op( @@ -360,7 +361,7 @@ def test_group_by_const(fake_wandb): art_1_node = fake_wandb.mock_artifact_as_node(art_1) table_1_rows = art_1_node.file("table_1.table.json").table().rows() grouped = table_1_rows.groupby( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( a=make_const_node(weave.types.Boolean(), True) ) ) @@ -413,14 +414,14 @@ def test_column_sort(fake_wandb): for col in columns: sorted = rows.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row[col]), ["desc"] + lambda row: weave_query.ops.make_list(label=row[col]), ["desc"] ) assert weave.use(sorted).to_pylist_notags() == [ dict(zip(columns, row)) for row in [row3, row2, row1] ] sorted = sorted.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row[col]), ["asc"] + lambda row: weave_query.ops.make_list(label=row[col]), ["asc"] ) assert weave.use(sorted).to_pylist_notags() == [ dict(zip(columns, row)) for row in data @@ -428,7 +429,7 @@ def test_column_sort(fake_wandb): # Additional test sorting typed timestamps sorted = rows.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row["timestamp"].toTimestamp()), + lambda row: weave_query.ops.make_list(label=row["timestamp"].toTimestamp()), ["desc"], ) assert weave.use(sorted).to_pylist_notags() == [ @@ -436,7 +437,7 @@ def test_column_sort(fake_wandb): ] sorted = sorted.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row["timestamp"].toTimestamp()), + lambda row: weave_query.ops.make_list(label=row["timestamp"].toTimestamp()), ["asc"], ) assert weave.use(sorted).to_pylist_notags() == [ @@ -464,8 +465,8 @@ def test_group_avg_sort_combo(fake_wandb): art_1_node = fake_wandb.mock_artifact_as_node(art_1) rows = art_1_node.file("table_1.table.json").table().rows() - grouped = rows.groupby(lambda row: weave.legacy.weave.ops.dict_(label=row["label"])) + grouped = rows.groupby(lambda row: weave_query.ops.dict_(label=row["label"])) sorted = grouped.sort( - lambda row: weave.legacy.weave.ops.make_list(label=row["score"].avg()), ["asc"] + lambda row: weave_query.ops.make_list(label=row["score"].avg()), ["asc"] ) assert weave.use(sorted[2].groupkey()["label"]) == "C" diff --git a/weave_query/tests/test_weave_api.py b/weave_query/tests/test_weave_api.py new file mode 100644 index 00000000000..b38d29731c4 --- /dev/null +++ b/weave_query/tests/test_weave_api.py @@ -0,0 +1,35 @@ +import os + +import pytest + +import weave_query as weave +import weave_query +import weave_query.context_state +import weave_query.wandb_api + + +def test_create_list_rename_delete(): + os.environ["WEAVE_CACHE_MODE"] = "minimal" + + # create + art_node = weave_query.ops.get("local-artifact:///my-data:latest/obj") + art_node.set("foo") + assert weave.use(art_node) == "foo" + + # list + arts = weave.use(weave_query.ops.local_artifacts()) + assert len(arts) == 1 + assert arts[0].name == "my-data" + + # rename + weave_query.ops.rename_artifact(art_node, "my-data2") + arts = weave.use(weave_query.ops.local_artifacts()) + assert len(arts) == 1 + assert arts[0].name == "my-data2" + + # delete + art_node = weave_query.ops.get("local-artifact:///my-data2:latest/obj") + weave_query.ops.delete_artifact(art_node) + arts = weave.use(weave_query.ops.local_artifacts()) + assert len(arts) == 0 + diff --git a/weave/legacy/tests/test_weave_types.py b/weave_query/tests/test_weave_types.py similarity index 83% rename from weave/legacy/tests/test_weave_types.py rename to weave_query/tests/test_weave_types.py index 070d1791465..917c000ad3c 100644 --- a/weave/legacy/tests/test_weave_types.py +++ b/weave_query/tests/test_weave_types.py @@ -2,15 +2,16 @@ import pytest -import weave -import weave.legacy.weave -import weave.legacy.weave.weave_types -from weave.legacy.weave import _dict_utils, runs -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.ops_domain import wbmedia +import weave_query as weave +import weave_query +import weave_query +import weave_query.weave_types +from weave_query import _dict_utils, runs +from weave_query import weave_types as types +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.ops_domain import wbmedia -from ... import errors +from weave_query import errors def test_typeof_string(): @@ -155,23 +156,23 @@ def test_typeof_list_dict_merge(): def test_typeof_nested_dict_merge(): """Tests that nested merging is disabled.""" - t1 = weave.legacy.weave.weave_types.TypedDict( - {"a": weave.legacy.weave.weave_types.TypedDict({"b": types.Int()})} + t1 = weave_query.weave_types.TypedDict( + {"a": weave_query.weave_types.TypedDict({"b": types.Int()})} ) - t2 = weave.legacy.weave.weave_types.TypedDict( - {"a": weave.legacy.weave.weave_types.TypedDict({"c": types.String()})} + t2 = weave_query.weave_types.TypedDict( + {"a": weave_query.weave_types.TypedDict({"c": types.String()})} ) merged_type = _dict_utils.typeddict_merge_output_type({"self": t1, "other": t2}) - assert merged_type == weave.legacy.weave.weave_types.TypedDict( - {"a": weave.legacy.weave.weave_types.TypedDict({"c": types.String()})} + assert merged_type == weave_query.weave_types.TypedDict( + {"a": weave_query.weave_types.TypedDict({"c": types.String()})} ) def test_dict_without_key_type(): - fully_typed = weave.legacy.weave.weave_types.TypeRegistry.type_from_dict( + fully_typed = weave_query.weave_types.TypeRegistry.type_from_dict( {"type": "dict", "keyType": "string", "objectType": "number"} ) - partial_typed = weave.legacy.weave.weave_types.TypeRegistry.type_from_dict( + partial_typed = weave_query.weave_types.TypeRegistry.type_from_dict( {"type": "dict", "objectType": "number"} ) assert fully_typed.assign_type(partial_typed) @@ -179,24 +180,24 @@ def test_dict_without_key_type(): # def test_union_unknown(): # assert ( -# weave.legacy.weave.weave_types.union( -# weave.legacy.weave.weave_types.String(), weave.legacy.weave.weave_types.UnknownType() +# weave_query.weave_types.union( +# weave_query.weave_types.String(), weave_query.weave_types.UnknownType() # ) -# == weave.legacy.weave.weave_types.String() +# == weave_query.weave_types.String() # ) # assert ( -# weave.legacy.weave.weave_types.union( -# weave.legacy.weave.weave_types.UnknownType(), weave.legacy.weave.weave_types.UnknownType() +# weave_query.weave_types.union( +# weave_query.weave_types.UnknownType(), weave_query.weave_types.UnknownType() # ) -# == weave.legacy.weave.weave_types.UnknownType() +# == weave_query.weave_types.UnknownType() # ) # assert ( -# weave.legacy.weave.weave_types.union( -# weave.legacy.weave.weave_types.UnknownType(), -# weave.legacy.weave.weave_types.UnknownType(), +# weave_query.weave_types.union( +# weave_query.weave_types.UnknownType(), +# weave_query.weave_types.UnknownType(), # weave.types.String(), # ) -# == weave.legacy.weave.weave_types.String() +# == weave_query.weave_types.String() # ) @@ -204,78 +205,78 @@ def test_union_access(): ### Type return # Not all members have props - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), - weave.legacy.weave.weave_types.List(weave.legacy.weave.weave_types.String()), + unioned = weave_query.weave_types.union( + weave_query.weave_types.String(), + weave_query.weave_types.List(weave_query.weave_types.String()), ) with pytest.raises(AttributeError): unioned.object_type # Combined dicts - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.List(weave.legacy.weave.weave_types.String()), - weave.legacy.weave.weave_types.List(weave.legacy.weave.weave_types.Number()), + unioned = weave_query.weave_types.union( + weave_query.weave_types.List(weave_query.weave_types.String()), + weave_query.weave_types.List(weave_query.weave_types.Number()), ) - assert unioned.object_type == weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), weave.legacy.weave.weave_types.Number() + assert unioned.object_type == weave_query.weave_types.union( + weave_query.weave_types.String(), weave_query.weave_types.Number() ) # Nullable type - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.NoneType(), - weave.legacy.weave.weave_types.List(weave.legacy.weave.weave_types.String()), + unioned = weave_query.weave_types.union( + weave_query.weave_types.NoneType(), + weave_query.weave_types.List(weave_query.weave_types.String()), ) - assert unioned.object_type == weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), weave.legacy.weave.weave_types.NoneType() + assert unioned.object_type == weave_query.weave_types.union( + weave_query.weave_types.String(), weave_query.weave_types.NoneType() ) ### Dict Return # Not all members have props - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), - weave.legacy.weave.weave_types.TypedDict({"a": weave.legacy.weave.weave_types.String()}), + unioned = weave_query.weave_types.union( + weave_query.weave_types.String(), + weave_query.weave_types.TypedDict({"a": weave_query.weave_types.String()}), ) with pytest.raises(AttributeError): unioned.property_types # Combined dicts - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.TypedDict( + unioned = weave_query.weave_types.union( + weave_query.weave_types.TypedDict( { - "same": weave.legacy.weave.weave_types.Number(), - "solo_a": weave.legacy.weave.weave_types.Number(), - "differ": weave.legacy.weave.weave_types.Number(), + "same": weave_query.weave_types.Number(), + "solo_a": weave_query.weave_types.Number(), + "differ": weave_query.weave_types.Number(), } ), - weave.legacy.weave.weave_types.TypedDict( + weave_query.weave_types.TypedDict( { - "same": weave.legacy.weave.weave_types.Number(), - "solo_b": weave.legacy.weave.weave_types.String(), - "differ": weave.legacy.weave.weave_types.String(), + "same": weave_query.weave_types.Number(), + "solo_b": weave_query.weave_types.String(), + "differ": weave_query.weave_types.String(), } ), ) assert unioned.property_types == { - "same": weave.legacy.weave.weave_types.Number(), - "solo_a": weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.Number(), weave.legacy.weave.weave_types.NoneType() + "same": weave_query.weave_types.Number(), + "solo_a": weave_query.weave_types.union( + weave_query.weave_types.Number(), weave_query.weave_types.NoneType() ), - "solo_b": weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), weave.legacy.weave.weave_types.NoneType() + "solo_b": weave_query.weave_types.union( + weave_query.weave_types.String(), weave_query.weave_types.NoneType() ), - "differ": weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.Number(), weave.legacy.weave.weave_types.String() + "differ": weave_query.weave_types.union( + weave_query.weave_types.Number(), weave_query.weave_types.String() ), } # Nullable type - unioned = weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.NoneType(), - weave.legacy.weave.weave_types.TypedDict({"a": weave.legacy.weave.weave_types.String()}), + unioned = weave_query.weave_types.union( + weave_query.weave_types.NoneType(), + weave_query.weave_types.TypedDict({"a": weave_query.weave_types.String()}), ) assert unioned.property_types == { - "a": weave.legacy.weave.weave_types.union( - weave.legacy.weave.weave_types.String(), weave.legacy.weave.weave_types.NoneType() + "a": weave_query.weave_types.union( + weave_query.weave_types.String(), weave_query.weave_types.NoneType() ) } @@ -713,7 +714,7 @@ def test_deserializes_single_member_union(): def test_wbrun_not_assignable_to_weave_run(): - from weave.legacy.weave.ops_domain import wb_domain_types + from weave_query.ops_domain import wb_domain_types assert not weave.types.optional(wb_domain_types.Run().WeaveType()).assign_type( weave.types.RunType( diff --git a/weave/legacy/tests/test_weavejs_fixes.py b/weave_query/tests/test_weavejs_fixes.py similarity index 96% rename from weave/legacy/tests/test_weavejs_fixes.py rename to weave_query/tests/test_weavejs_fixes.py index 9f6cf60b1f7..25d438b1600 100644 --- a/weave/legacy/tests/test_weavejs_fixes.py +++ b/weave_query/tests/test_weavejs_fixes.py @@ -2,7 +2,7 @@ import pytest -from weave.legacy.weave import ( +from weave_query import ( api, context_state, mappers_python, @@ -10,7 +10,7 @@ weave_internal, weavejs_fixes, ) -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types @pytest.mark.skip( diff --git a/weave/legacy/tests/test_weavify.py b/weave_query/tests/test_weavify.py similarity index 92% rename from weave/legacy/tests/test_weavify.py rename to weave_query/tests/test_weavify.py index 9335160bdac..db138bca188 100644 --- a/weave/legacy/tests/test_weavify.py +++ b/weave_query/tests/test_weavify.py @@ -1,10 +1,10 @@ import pytest -from weave.legacy.weave import graph, ops, weave_internal -from weave.legacy.weave import weave_types as types +from weave_query import graph, ops, weave_internal +from weave_query import weave_types as types -from ...legacy.weave import weavify -from weave.legacy.tests.util import geom +from weave_query import weavify +from tests.util import geom @pytest.mark.parametrize( diff --git a/weave/legacy/tests/test_with_columns.py b/weave_query/tests/test_with_columns.py similarity index 96% rename from weave/legacy/tests/test_with_columns.py rename to weave_query/tests/test_with_columns.py index e68b8e10435..3ac885e583e 100644 --- a/weave/legacy/tests/test_with_columns.py +++ b/weave_query/tests/test_with_columns.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow def test_with_columns_basic(): diff --git a/weave/legacy/tests/__init__.py b/weave_query/tests/util/__init__.py similarity index 100% rename from weave/legacy/tests/__init__.py rename to weave_query/tests/util/__init__.py diff --git a/weave/legacy/tests/util/concrete_tagged_value.py b/weave_query/tests/util/concrete_tagged_value.py similarity index 94% rename from weave/legacy/tests/util/concrete_tagged_value.py rename to weave_query/tests/util/concrete_tagged_value.py index 403ab8fa21f..245e5107bd8 100644 --- a/weave/legacy/tests/util/concrete_tagged_value.py +++ b/weave_query/tests/util/concrete_tagged_value.py @@ -5,8 +5,8 @@ import dataclasses import typing -from weave.legacy.weave import box -from weave.legacy.weave.language_features.tagging import tag_store +from weave_query import box +from weave_query.language_features.tagging import tag_store @dataclasses.dataclass diff --git a/weave/legacy/tests/util/geom.py b/weave_query/tests/util/geom.py similarity index 88% rename from weave/legacy/tests/util/geom.py rename to weave_query/tests/util/geom.py index 46cbdb7e44e..eaa978e6491 100644 --- a/weave/legacy/tests/util/geom.py +++ b/weave_query/tests/util/geom.py @@ -2,9 +2,10 @@ import math import typing -import weave -from weave.legacy.weave import context_state as _context_state -from weave.legacy.weave import panels +import weave_query as weave +import weave_query +from weave_query import context_state as _context_state +from weave_query import panels _loading_builtins_token = _context_state.set_loading_built_ins() diff --git a/weave/legacy/tests/util/list_arrow_test_helpers.py b/weave_query/tests/util/list_arrow_test_helpers.py similarity index 82% rename from weave/legacy/tests/util/list_arrow_test_helpers.py rename to weave_query/tests/util/list_arrow_test_helpers.py index c130ba5cde0..66097b49392 100644 --- a/weave/legacy/tests/util/list_arrow_test_helpers.py +++ b/weave_query/tests/util/list_arrow_test_helpers.py @@ -1,6 +1,6 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import ops_arrow as arrow -from weave.legacy.weave.ops_primitives import list_ +from weave_query import api as weave +from weave_query import ops_arrow as arrow +from weave_query.ops_primitives import list_ class ListLikeNodeInterface: diff --git a/weave/legacy/tests/util/op_specs.py b/weave_query/tests/util/op_specs.py similarity index 98% rename from weave/legacy/tests/util/op_specs.py rename to weave_query/tests/util/op_specs.py index 9924f60754b..24053f8051d 100644 --- a/weave/legacy/tests/util/op_specs.py +++ b/weave_query/tests/util/op_specs.py @@ -2,10 +2,11 @@ import datetime import typing -import weave -from weave.legacy.weave import op_def, ops_primitives -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.timestamp import PY_DATETIME_MAX_MS, PY_DATETIME_MIN_MS +import weave_query as weave +import weave_query +from weave_query import op_def, ops_primitives +from weave_query.language_features.tagging import tagged_value_type +from weave_query.timestamp import PY_DATETIME_MAX_MS, PY_DATETIME_MIN_MS from .concrete_tagged_value import TaggedValue diff --git a/weave/legacy/tests/util/tag_test_util.py b/weave_query/tests/util/tag_test_util.py similarity index 70% rename from weave/legacy/tests/util/tag_test_util.py rename to weave_query/tests/util/tag_test_util.py index bfed6da0b88..7d2f2ec7f4e 100644 --- a/weave/legacy/tests/util/tag_test_util.py +++ b/weave_query/tests/util/tag_test_util.py @@ -1,9 +1,10 @@ -import weave -from weave.legacy.weave import box, graph -from weave.legacy.weave import context_state as _context_state -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import tag_store -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType +import weave_query as weave +import weave_query +from weave_query import box, graph +from weave_query import context_state as _context_state +from weave_query import weave_types as types +from weave_query.language_features.tagging import tag_store +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType tag_adders = 0 @@ -34,6 +35,6 @@ def custom_tagger(obj): # type: ignore[no-untyped-def] def make_get_tag(tag_name: str): # type: ignore[no-untyped-def] - from weave.legacy.weave.language_features.tagging import make_tag_getter_op + from weave_query.language_features.tagging import make_tag_getter_op return make_tag_getter_op.make_tag_getter_op(f"_ct_{tag_name}", types.String()) diff --git a/weave/legacy/tests/util/weavejs_ops.py b/weave_query/tests/util/weavejs_ops.py similarity index 91% rename from weave/legacy/tests/util/weavejs_ops.py rename to weave_query/tests/util/weavejs_ops.py index afaab26438b..e7f42e9a246 100644 --- a/weave/legacy/tests/util/weavejs_ops.py +++ b/weave_query/tests/util/weavejs_ops.py @@ -1,10 +1,10 @@ # WeaveJS ops used for testing. These are not used in production. -from weave.legacy.weave import graph, weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave._dict_utils import typeddict_pick_output_type -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.language_features.tagging.tagging_op_logic import ( +from weave_query import graph, weave_internal +from weave_query import weave_types as types +from weave_query._dict_utils import typeddict_pick_output_type +from weave_query.language_features.tagging import tagged_value_type +from weave_query.language_features.tagging.tagging_op_logic import ( op_get_tag_type_resolver, op_make_type_tagged_resolver, ) diff --git a/weave_query/tests/wandb_system_tests_conftest.py b/weave_query/tests/wandb_system_tests_conftest.py new file mode 100644 index 00000000000..6e4f8e29746 --- /dev/null +++ b/weave_query/tests/wandb_system_tests_conftest.py @@ -0,0 +1,431 @@ +import contextlib +import dataclasses +import os +import platform +import secrets +import string +import subprocess +import time +import unittest.mock +import urllib.parse +from typing import Any, Generator, Literal, Optional, Union + +import filelock +import pytest +import requests +import wandb + +from weave_query.wandb_api import ( + WandbApiContext, + from_environment, + wandb_api_context, +) + + +# The following code snippet was copied from: +# https://github.com/pytest-dev/pytest-xdist/issues/84#issuecomment-617566804 +# +# The purpose of the `serial` fixture is to ensure that any test with `serial` +# must be run serially. This is critical for tests which use environment +# variables for auth since the low level W&B API state ends up being shared +# between tests. +@pytest.fixture(scope="session") +def lock(tmp_path_factory): + base_temp = tmp_path_factory.getbasetemp() + lock_file = base_temp.parent / "serial.lock" + yield filelock.FileLock(lock_file=str(lock_file)) + with contextlib.suppress(OSError): + os.remove(path=lock_file) + + +@pytest.fixture() +def serial(lock): + with lock.acquire(poll_interval=0.1): + yield + + +# End of copied code snippet + + +@dataclasses.dataclass +class LocalBackendFixturePayload: + username: str + password: str + api_key: str + base_url: str + cookie: str + + +def determine_scope(fixture_name, config): + return config.getoption("--user-scope") + + +@pytest.fixture(scope=determine_scope) +def bootstrap_user( + worker_id: str, fixture_fn, base_url, wandb_debug +) -> Generator[LocalBackendFixturePayload, None, None]: + username = f"user-{worker_id}-{random_string()}" + command = UserFixtureCommand(command="up", username=username) + fixture_fn(command) + command = UserFixtureCommand( + command="password", username=username, password=username + ) + fixture_fn(command) + + with unittest.mock.patch.dict( + os.environ, + { + "WANDB_BASE_URL": base_url, + }, + ): + yield LocalBackendFixturePayload( + username=username, + password=username, + api_key=username, + base_url=base_url, + cookie="NOT-IMPLEMENTED", + ) + + +@pytest.fixture(scope=determine_scope) +def user_by_api_key_in_context( + bootstrap_user: LocalBackendFixturePayload, +) -> Generator[LocalBackendFixturePayload, None, None]: + with wandb_api_context(WandbApiContext(api_key=bootstrap_user.api_key)): + yield bootstrap_user + + +@pytest.fixture(scope=determine_scope) +def user_by_http_headers_in_context( + bootstrap_user: LocalBackendFixturePayload, +) -> Generator[LocalBackendFixturePayload, None, None]: + headers = { + "use-admin-privileges": "true", + "cookie": f"wandb={bootstrap_user.cookie};", + } + cookies = {"wandb": bootstrap_user.cookie} + with wandb_api_context(WandbApiContext(headers=headers, cookies=cookies)): + yield bootstrap_user + + +@pytest.fixture(scope=determine_scope) +def user_by_api_key_in_env( + bootstrap_user: LocalBackendFixturePayload, serial +) -> Generator[LocalBackendFixturePayload, None, None]: + with unittest.mock.patch.dict( + os.environ, + { + "WANDB_API_KEY": bootstrap_user.api_key, + }, + ): + with from_environment(): + wandb.teardown() # type: ignore + yield bootstrap_user + wandb.teardown() # type: ignore + + +@pytest.fixture(scope=determine_scope) +def user_by_api_key_netrc( + bootstrap_user: LocalBackendFixturePayload, +) -> Generator[LocalBackendFixturePayload, None, None]: + netrc_path = os.path.expanduser("~/.netrc") + old_netrc = None + if os.path.exists(netrc_path): + with open(netrc_path, "r") as f: + old_netrc = f.read() + try: + with open(netrc_path, "w") as f: + url = urllib.parse.urlparse(bootstrap_user.base_url).netloc + f.write( + f"machine {url}\n login user\n password {bootstrap_user.api_key}\n" + ) + with from_environment(): + yield bootstrap_user + finally: + if old_netrc is None: + os.remove(netrc_path) + else: + with open(netrc_path, "w") as f: + f.write(old_netrc) + + +################################################################## +## The following code is a selection copied from the wandb sdk. ## +## wandb/tests/unit_tests/conftest.py ## +################################################################## + + +# # `local-testcontainer` ports +LOCAL_BASE_PORT = "8080" +SERVICES_API_PORT = "8083" +FIXTURE_SERVICE_PORT = "9015" +WB_SERVER_HOST = "http://localhost" + + +def pytest_addoption(parser): + # note: we default to "function" scope to ensure the environment is + # set up properly when running the tests in parallel with pytest-xdist. + if os.environ.get("WB_SERVER_HOST"): + wandb_server_host = os.environ["WB_SERVER_HOST"] + else: + wandb_server_host = WB_SERVER_HOST + + parser.addoption( + "--user-scope", + default="function", # or "function" or "session" or "module" + help='cli to set scope of fixture "user-scope"', + ) + + parser.addoption( + "--job-num", + default=None, + help='cli to set "job-num"', + ) + + parser.addoption( + "--base-url", + default=f"{wandb_server_host}:{LOCAL_BASE_PORT}", + help='cli to set "base-url"', + ) + parser.addoption( + "--wandb-server-tag", + default="master", + help="Image tag to use for the wandb server", + ) + parser.addoption( + "--wandb-server-pull", + action="store_true", + default=False, + help="Force pull the latest wandb server image", + ) + # debug option: creates an admin account that can be used to log in to the + # app and inspect the test runs. + parser.addoption( + "--wandb-debug", + action="store_true", + default=False, + help="Run tests in debug mode", + ) + + parser.addoption( + "--weave-server", + action="store", + default="sqlite", + help="Specify the client object to use: sqlite or clickhouse", + ) + + +def random_string(length: int = 12) -> str: + """Generate a random string of a given length. + + :param length: Length of the string to generate. + :return: Random string. + """ + return "".join( + secrets.choice(string.ascii_lowercase + string.digits) for _ in range(length) + ) + + +@pytest.fixture(scope="session") +def base_url(request): + return request.config.getoption("--base-url") + + +@pytest.fixture(scope="session") +def wandb_server_tag(request): + return request.config.getoption("--wandb-server-tag") + + +@pytest.fixture(scope="session") +def wandb_server_pull(request): + if request.config.getoption("--wandb-server-pull"): + return "always" + return "missing" + + +@pytest.fixture(scope="session") +def wandb_debug(request): + return request.config.getoption("--wandb-debug", default=False) + + +def check_server_health( + base_url: str, endpoint: str, num_retries: int = 1, sleep_time: int = 1 +) -> bool: + """Check if wandb server is healthy. + + :param base_url: + :param num_retries: + :param sleep_time: + :return: + """ + for _ in range(num_retries): + try: + response = requests.get(urllib.parse.urljoin(base_url, endpoint)) + if response.status_code == 200: + return True + time.sleep(sleep_time) + except requests.exceptions.ConnectionError: + time.sleep(sleep_time) + + print( + f"Server not healthy @ {urllib.parse.urljoin(base_url, endpoint)}: no response" + ) + return False + + +def check_server_up( + base_url: str, + wandb_server_tag: str = "master", + wandb_server_pull: Literal["missing", "always"] = "missing", +) -> bool: + """Check if wandb server is up and running. + + If not on the CI and the server is not running, then start it first. + + :param base_url: + :param wandb_server_tag: + :param wandb_server_pull: + :return: + """ + app_health_endpoint = "healthz" + fixture_url = base_url.replace(LOCAL_BASE_PORT, FIXTURE_SERVICE_PORT) + fixture_health_endpoint = "health" + + if os.environ.get("CI") == "true": + return check_server_health(base_url=base_url, endpoint=app_health_endpoint) + + if not check_server_health(base_url=base_url, endpoint=app_health_endpoint): + # start wandb server locally and expose necessary ports to the host + command = [ + "docker", + "run", + "--pull", + wandb_server_pull, + "--rm", + "-v", + "wandb:/vol", + "-p", + f"{LOCAL_BASE_PORT}:{LOCAL_BASE_PORT}", + "-p", + f"{SERVICES_API_PORT}:{SERVICES_API_PORT}", + "-p", + f"{FIXTURE_SERVICE_PORT}:{FIXTURE_SERVICE_PORT}", + "-e", + "WANDB_ENABLE_TEST_CONTAINER=true", + *( + ["-e", "PARQUET_ENABLED=true"] + if os.environ.get("PARQUET_ENABLED") + else [] + ), + "--name", + "wandb-local", + "--platform", + "linux/amd64", + ( + "us-central1-docker.pkg.dev/wandb-production/images/local-testcontainer:tim-franken_branch_parquet" + if os.environ.get("PARQUET_ENABLED") + else f"us-central1-docker.pkg.dev/wandb-production/images/local-testcontainer:{wandb_server_tag}" + ), + ] + subprocess.Popen(command) + # wait for the server to start + server_is_up = check_server_health( + base_url=base_url, endpoint=app_health_endpoint, num_retries=30 + ) + if not server_is_up: + return False + # check that the fixture service is accessible + return check_server_health( + base_url=fixture_url, endpoint=fixture_health_endpoint, num_retries=30 + ) + + return check_server_health( + base_url=fixture_url, endpoint=fixture_health_endpoint, num_retries=10 + ) + + +@dataclasses.dataclass +class UserFixtureCommand: + command: Literal["up", "down", "down_all", "logout", "login", "password"] + username: Optional[str] = None + password: Optional[str] = None + admin: bool = False + endpoint: str = "db/user" + port: str = FIXTURE_SERVICE_PORT + method: Literal["post"] = "post" + + +@dataclasses.dataclass +class AddAdminAndEnsureNoDefaultUser: + email: str + password: str + endpoint: str = "api/users-admin" + port: str = SERVICES_API_PORT + method: Literal["put"] = "put" + + +@pytest.fixture(scope="session") +def fixture_fn(base_url, wandb_server_tag, wandb_server_pull): + def fixture_util( + cmd: Union[UserFixtureCommand, AddAdminAndEnsureNoDefaultUser], + ) -> bool: + endpoint = urllib.parse.urljoin( + base_url.replace(LOCAL_BASE_PORT, cmd.port), + cmd.endpoint, + ) + data: Any + if isinstance(cmd, UserFixtureCommand): + data = {"command": cmd.command} + if cmd.username: + data["username"] = cmd.username + if cmd.password: + data["password"] = cmd.password + if cmd.admin is not None: + data["admin"] = cmd.admin + elif isinstance(cmd, AddAdminAndEnsureNoDefaultUser): + data = [ + {"email": f"{cmd.email}@wandb.com", "password": cmd.password}, + ] + else: + raise NotImplementedError(f"{cmd} is not implemented") + # trigger fixture + print(f"Triggering fixture on {endpoint}: {data}") + response = getattr(requests, cmd.method)(endpoint, json=data) + if response.status_code != 200: + print(response.json()) + return False + return True + + # todo: remove this once testcontainer is available on Win + if platform.system() == "Windows": + pytest.skip("testcontainer is not available on Win") + + if not check_server_up(base_url, wandb_server_tag, wandb_server_pull): + pytest.fail("wandb server is not running") + + yield fixture_util + + +@pytest.fixture(scope=determine_scope) +def dev_only_admin_env_override() -> Generator[None, None, None]: + new_env = {} + admin_path = "../config/.admin.env" + if not os.path.exists(admin_path): + print( + f"WARNING: Could not find admin env file at {admin_path}. Please follow instructions in README.md to create one." + ) + yield + return + with open(admin_path) as file: + for line in file: + # skip comments and blank lines + if line.startswith("#") or line.strip().__len__() == 0: + continue + # otherwise treat lines as environment variables in a KEY=VALUE combo + key, value = line.split("=", 1) + new_env[key.strip()] = value.strip() + with unittest.mock.patch.dict( + os.environ, + new_env, + ): + yield diff --git a/weave_query/wb_schema.gql b/weave_query/wb_schema.gql new file mode 100644 index 00000000000..ce587bb0ee9 --- /dev/null +++ b/weave_query/wb_schema.gql @@ -0,0 +1,716 @@ +# This file is a hand-selected subset of the W&B GQL spec that is used by weave python. +# On the backend, it's used by gql_to_weave.py to convert GQL queries to weave types. +# On the frontend, it's used for autogenerating TypeScript definitions for GQL queries. +# If you need to support a new GQL op in weave, you must add the relevant type definitions here. + +schema { + query: Query + mutation: Mutation +} + +directive @audit on FIELD_DEFINITION +directive @constraints( + min: Int + max: Int + pattern: String +) on INPUT_FIELD_DEFINITION | FIELD_DEFINITION +directive @accessibleIf( + cond: String + restrictEvenAdmins: Boolean +) on FIELD_DEFINITION + +type Query { + user(id: ID, userName: String): User + entity(name: String, login: Boolean): Entity + viewer(entityName: String): User + users( + query: String + before: String + after: String + first: Int + last: Int + usernames: [String!] + ids: [ID!] + ): UserConnection + project(name: String, entityName: String): Project + projects( + entityName: String + order: String + anonymous: Boolean + before: String + after: String + first: Int + last: Int + ): ProjectConnection + entities( + order: String + before: String + after: String + first: Int + last: Int + ): EntityConnection + view(id: ID!, type: String): View + views(ids: [ID!]!): ViewConnection + organizations( + ids: [ID!] + emailDomain: String + query: String + before: String + after: String + first: Int + last: Int + ): OrganizationConnection! + organization(id: ID, name: String): Organization + artifact(id: ID!): Artifact + artifactCollection(id: ID!): ArtifactCollection + artifactSequence(id: ID!): ArtifactSequence + instance: WBInstance + repoInsightsPlotData( + plotName: String! + repoName: String! + filters: JSONString + order: String + groupKeys: [String!] + columns: [String!] + before: String + after: String + first: Int + last: Int + ): RepoInsightsRowConnection + repo(id: ID!): Repo +} + +input UpdateUserInput { + id: ID # null implies "self" -- only admins can edit others + primaryEmail: String + defaultEntity: String + defaultFramework: String # deprecated + photoUrl: String + code: String + name: String @constraints(max: 64) + userInfo: JSONString + hideTeamsFromPublic: Boolean + settingsVisited: Boolean + galleryVisited: Boolean + onboardingHidden: Boolean + private: Boolean + admin: Boolean + password: String + clientMutationId: String +} + +type UpdateUserPayload { + user: User + clientMutationId: String +} + +type Mutation { + updateUser(input: UpdateUserInput!): UpdateUserPayload @audit + deleteView(input: DeleteViewInput!): DeleteViewPayload + upsertView(input: UpsertViewInput!): UpsertViewPayload @audit + updateArtifactSequence( + input: UpdateArtifactSequenceInput! + ): UpdateArtifactCollectionPayload + deleteArtifactSequence( + input: DeleteArtifactSequenceInput! + ): DeleteArtifactCollectionPayload +} + +scalar DateTime +scalar JSONString +scalar JSON +scalar Duration +scalar Int64 + +type WBInstance { + entities: [Entity!]! + views(first: Int): ViewConnection! + artifactSequences(first: Int): ArtifactSequenceConnection + projects(first: Int): ProjectConnection +} + +interface Node { + id: ID! +} + +type PageInfo { + hasNextPage: Boolean! + hasPreviousPage: Boolean! + startCursor: String + endCursor: String +} + +input TimeWindow { + start: DateTime! + end: DateTime! +} + +type PublicImageUploadInfo { + uploadUrl: String! + imageUrl: String! + uploadHeaders: [String!]! +} + +enum ArtifactCollectionType { + SEQUENCE + PORTFOLIO +} + +input ProjectIdentifierInput { + Name: String + EntityName: String +} + +type User implements Node { + id: ID! + name: String! + username: String + email: String @accessibleIf(cond: "viewerCanReadEmail") + photoUrl: String + deletedAt: DateTime + teams(before: String, after: String, first: Int, last: Int): EntityConnection +} + +type UserConnection { + pageInfo: PageInfo! + edges: [UserEdge!]! +} + +type UserEdge { + node: User + cursor: String! +} + +union Initiator = Run | User + +type Project implements Node { + createdAt: DateTime! + updatedAt: DateTime + id: ID! + name: String! + runs(filters: JSONString, order: String, first: Int): RunConnection + entity: Entity! + # groups(fields: [String], level: String, filters: JSONString, order: String, historyFields: [String], before: String, after: String, first: Int, last: Int): GroupConnection + user: User + run(name: String!): Run + artifactType(name: String!): ArtifactType + artifactTypes(first: Int): ArtifactTypeConnection! + artifact(name: String!): Artifact + artifactCollection(name: String!): ArtifactCollection + artifactCollections(first: Int): ArtifactCollectionConnection + runQueues: [RunQueue!]! +} + +type RunQueue { + id: ID! +} + +type ProjectConnection { + pageInfo: PageInfo! + edges: [ProjectEdge!]! +} + +type ProjectEdge { + node: Project + cursor: String! +} + +type ParquetHistory { + liveData: [JSON!]! + parquetUrls: [String!]! +} + +type Run implements Node { + createdAt: DateTime! + name: String! + jobType: String + config(keys: [String!]): JSONString + summaryMetrics(keys: [String!]): JSONString + displayName: String + heartbeatAt: DateTime + user: User + project: Project + id: ID! + outputArtifacts(first: Int): ArtifactConnection + inputArtifacts(first: Int): InputArtifactConnection + history(minStep: Int64, maxStep: Int64): [String!]! + historyLineCount: Int + historyKeys: JSON + computeSeconds: Duration! + parquetHistory(liveKeys: [String!]!): ParquetHistory! +} + +type RunConnection { + totalCount: Int! + pageInfo: PageInfo! + edges: [RunEdge!]! +} + +type RunEdge { + node: Run! + cursor: String! +} + +type RepoInsightsRowConnection { + totalCount: Int! + pageInfo: PageInfo! + schema: JSON! + edges: [RowEdge!]! + isNormalizedUserCount: Boolean! +} + +type RowConnection { + totalCount: Int! + pageInfo: PageInfo! + schema: JSON! + edges: [RowEdge!]! +} + +type RowEdge { + node: RowType +} + +type RowType { + row: JSON! +} + +type Entity implements Node { + id: ID! + name: String! + isTeam: Boolean! + projects( + before: String + after: String + first: Int + last: Int + order: String + ): ProjectConnection + organization: Organization + artifactCollections( + before: String + after: String + first: Int + last: Int + order: String + filters: JSONString + collectionTypes: [ArtifactCollectionType!] + ): ArtifactCollectionConnection +} + +type EntityConnection { + edges: [EntityEdge!]! +} + +type EntityEdge { + node: Entity + cursor: String! +} + +type RepoConnection { + edges: [RepoEdge!]! +} + +type RepoEdge { + node: Repo + cursor: String! +} + +type Repo implements Node { + id: ID! + entity: Entity! + displayName: String! +} + +enum OrgType { + ORGANIZATION + PERSONAL +} + +type OrganizationConnection { + pageInfo: PageInfo! + edges: [OrganizationEdge!]! +} + +type OrganizationEdge { + node: Organization! + cursor: String! +} + +type Organization implements Node { + id: ID! + name: String! + views(first: Int): ViewConnection! + artifactCollections(first: Int): ArtifactCollectionConnection + projects(first: Int): ProjectConnection +} + +type ArtifactTypeConnection { + pageInfo: PageInfo! + edges: [ArtifactTypeEdge!]! +} + +type ArtifactTypeEdge { + node: ArtifactType + cursor: String! +} + +type ArtifactType { + id: ID! + name: String! + project: Project! + artifactCollections(first: Int): ArtifactCollectionConnection + artifact(name: String!): Artifact +} + +type ArtifactCollectionConnection { + totalCount: Int! + pageInfo: PageInfo! + edges: [ArtifactCollectionEdge!]! +} + +type ArtifactCollectionEdge { + node: ArtifactCollection + cursor: String! +} + +interface ArtifactCollection { + id: ID! + name: String! + description: String + createdAt: DateTime! + project: Project! + defaultArtifactType: ArtifactType! + + artifacts(first: Int): VersionedArtifactConnection + aliases(first: Int): ArtifactAliasConnection! + artifactMemberships(first: Int): ArtifactCollectionMembershipConnection! + artifactMembership(aliasName: String!): ArtifactCollectionMembership + + tags: TagConnection! +} + +type TagConnection { + pageInfo: PageInfo! + edges: [TagEdge!]! +} + +type TagEdge { + node: Tag! + cursor: String! +} + +type Tag { + id: ID! + name: String! + attributes: JSONString! + tagCategoryName: String! +} + +type ArtifactSequenceConnection { + totalCount: Int! + pageInfo: PageInfo! + edges: [ArtifactSequenceEdge!]! +} + +type ArtifactSequenceEdge { + node: ArtifactSequence + cursor: String! +} + +type ArtifactSequence implements ArtifactCollection { + id: ID! + name: String! + description: String + createdAt: DateTime! + project: Project! + defaultArtifactType: ArtifactType! + artifacts(first: Int): VersionedArtifactConnection! + aliases(first: Int): ArtifactAliasConnection! + artifactMemberships(first: Int): ArtifactCollectionMembershipConnection! + # aliasName can be an alias (latest, v0, custom_alias), commitHash, or digest + artifactMembership(aliasName: String!): ArtifactCollectionMembership +} + +type ArtifactPortfolio implements ArtifactCollection { + id: ID! + name: String! + description: String + createdAt: DateTime! + project: Project! + defaultArtifactType: ArtifactType! + artifacts(first: Int): VersionedArtifactConnection! + aliases(first: Int): ArtifactAliasConnection! + artifactMemberships(first: Int): ArtifactCollectionMembershipConnection! + artifactMembership(aliasName: String!): ArtifactCollectionMembership +} + +type ArtifactCollectionMembershipConnection { + pageInfo: PageInfo! + edges: [ArtifactCollectionMembershipEdge!]! +} + +type ArtifactCollectionMembershipEdge { + node: ArtifactCollectionMembership + cursor: String! +} + +type ArtifactCollectionMembership { + id: ID! + artifactCollection: ArtifactCollection + artifact: Artifact + createdAt: DateTime! + commitHash: String + versionIndex: Int + aliases: [ArtifactAlias!]! +} + +interface ArtifactConnectionType { + totalCount: Int! + pageInfo: PageInfo! + edges: [ArtifactEdgeType!]! +} + +type ArtifactConnection implements ArtifactConnectionType { + totalCount: Int! + pageInfo: PageInfo! + edges: [ArtifactEdge!]! +} + +type VersionedArtifactConnection implements ArtifactConnectionType { + totalCount: Int! + pageInfo: PageInfo! + edges: [VersionedArtifactEdge!]! +} + +type InputArtifactConnection implements ArtifactConnectionType { + totalCount: Int! + pageInfo: PageInfo! + edges: [InputArtifactEdge!]! +} + +interface ArtifactEdgeType { + node: Artifact + cursor: String! +} + +type ArtifactEdge implements ArtifactEdgeType { + node: Artifact + cursor: String! +} + +type VersionedArtifactEdge implements ArtifactEdgeType { + node: Artifact! + version: String! + cursor: String! +} + +type InputArtifactEdge implements ArtifactEdgeType { + node: Artifact + cursor: String! + usedAs: [String!]! +} + +enum ArtifactState { + PENDING + COMMITTED + DELETED +} + +type ArtifactAliasConnection { + pageInfo: PageInfo! + edges: [ArtifactAliasEdge!]! +} + +type ArtifactAliasEdge { + node: ArtifactAlias + cursor: String! +} + +type ArtifactAlias { + id: ID! + artifact: Artifact + alias: String! + artifactCollection: ArtifactCollection + artifactCollectionName: String! +} + +type Artifact { + id: ID! + digest: String! + description: String + commitHash(artifactCollectionName: String): String + versionIndex(artifactCollectionName: String): Int + aliases(artifactCollectionName: String): [ArtifactAlias!]! + labels: JSONString + metadata: JSONString + state: ArtifactState! + size: Int64! + storageBytes: Int64! + fileCount: Int64! + artifactType: ArtifactType! + artifactCollections: ArtifactCollectionConnection! + artifactMemberships: ArtifactCollectionMembershipConnection! + artifactSequence: ArtifactSequence! + createdAt: DateTime! + updatedAt: DateTime + createdBy: Initiator + usedCount: Int! + usedBy( + filters: JSONString + order: String + before: String + after: String + first: Int + last: Int + ): RunConnection! + currentManifest: ArtifactManifest + historyStep: Int64 + ttlDurationSeconds: Int64! + tags: [Tag!]! +} + +type ArtifactManifestConnection { + pageInfo: PageInfo! + edges: [ArtifactManifestEdge!]! +} + +type ArtifactManifestEdge { + node: ArtifactManifest + cursor: String! +} + +enum ArtifactManifestType { + FULL + PATCH + INCREMENTAL +} + +type ArtifactManifest { + id: ID! + type: ArtifactManifestType! + createdAt: DateTime! + digest: String! + artifact: Artifact! +} + +type ImageUrl { + url: String + publicUrl: String + path: String +} + +enum ViewSource { + WANDB_UI + WANDB_UI_SHARE_PANEL + WANDB_SDK + WEAVE_UI +} + +type View implements Node { + createdAt: DateTime! + updatedAt: DateTime + updatedBy: User + id: ID! + name: String + displayName: String + type: String + userId: Int + projectId: Int + description: String + imageUploadUrl(name: String!): ImageUrl! + uploadHeaders: [String!]! + previewUrl: String + coverUrl: String + spec: JSONString + user: User + project: Project + entity: Entity + entityName: String! + projectName: String! + starCount(from: DateTime, to: DateTime): Int! + starred: Boolean + children: ViewConnection + parentId: ID + locked: Boolean! + viewCount: Int! + showcasedAt: DateTime + createdUsing: ViewSource! +} + +type ViewConnection { + totalCount: Int! + pageInfo: PageInfo! + edges: [ViewEdge!]! +} + +type ViewEdge { + node: View + cursor: String! +} + +input DeleteViewInput { + id: ID + deleteDrafts: Boolean = false + clientMutationId: String +} + +type DeleteViewPayload { + success: Boolean + pendingDrafts: Boolean + clientMutationId: String +} + +input UpsertViewInput { + id: ID + entityName: String + projectName: String + name: String @constraints(max: 128) + displayName: String @constraints(max: 128) + description: String + type: String + spec: String + parentId: ID + locked: Boolean + previewUrl: String @constraints(max: 256) + coverUrl: String @constraints(max: 256) + clientMutationId: String + showcasedAt: DateTime + createdUsing: ViewSource +} + +type UpsertViewPayload { + view: View + inserted: Boolean + clientMutationId: String +} + +input UpdateArtifactSequenceInput { + artifactSequenceID: ID! + name: String @constraints(max: 128) + description: String + clientMutationId: String +} + +type UpdateArtifactCollectionPayload { + artifactCollection: ArtifactCollection! + clientMutationId: String +} + +input DeleteArtifactSequenceInput { + artifactSequenceID: ID! + clientMutationId: String +} + +type DeleteArtifactCollectionPayload { + artifactCollection: ArtifactCollection! + clientMutationId: String +} + +interface Error { + message: String! +} + +enum ErrorSeverity { + WARN + ERROR +} diff --git a/weave_query/weave_query/__init__.py b/weave_query/weave_query/__init__.py new file mode 100644 index 00000000000..0398ea8a15a --- /dev/null +++ b/weave_query/weave_query/__init__.py @@ -0,0 +1,55 @@ +"""The top-level functions and classes for working with Weave.""" + +import sys + +# We track what modules were loaded before importing weave, so we can ensure +# that someone doesn't introduce auto-importing loading weave.weave_query.ops or weave.weave_query.panels +# (because they are slow to import and have more dependencies, and they are part of +# the engine and UI layers which should be kept separate from the core layer). +pre_init_modules = set(sys.modules.keys()) + +from weave_query import context_state as _context_state + +_loading_builtins_token = _context_state.set_loading_built_ins() + +from weave_query import weave_types as types +from weave_query import storage + +from weave_query.api import * +from weave_query.decorators import op + +from weave_query.errors import * + +from weave_query import mappers_python_def + +from weave_query import wandb_api as _wandb_api + +from weave_query import version + +_wandb_api.init() + +# Ensure there is a client available for eager mode +from weave_query import context as _context + + +_context_state.clear_loading_built_ins(_loading_builtins_token) + +__version__ = version.VERSION + +# See the comment above pre_init_modules above. This is check to ensure we don't accidentally +# introduce loading weave.weave_query.ops or weave.weave_query.panels when importing weave. +newly_added_modules = set(sys.modules.keys()) - pre_init_modules +ops_modules = [] +panels_modules = [] +for module_name in newly_added_modules: + if module_name.startswith("weave.weave_query.ops"): + ops_modules.append(module_name) + if module_name.startswith("weave.weave_query.panels"): + panels_modules.append(module_name) +if ops_modules or panels_modules: + all_invalid_modules = ops_modules + panels_modules + invalid_submodules = set([".".join(m.split(".")[:2]) for m in all_invalid_modules]) + raise errors.WeaveInternalError( + "importing weave should not import weave.weave_query.ops or weave.weave_query.panels, but the following modules were imported: " + + ", ".join(invalid_submodules) + ) \ No newline at end of file diff --git a/weave/legacy/weave/_dict_utils.py b/weave_query/weave_query/_dict_utils.py similarity index 97% rename from weave/legacy/weave/_dict_utils.py rename to weave_query/weave_query/_dict_utils.py index 4636d46037f..6a210aeb672 100644 --- a/weave/legacy/weave/_dict_utils.py +++ b/weave_query/weave_query/_dict_utils.py @@ -1,10 +1,10 @@ import typing -from weave.legacy.weave import box -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type +from weave_query import box +from weave_query.language_features.tagging import tag_store, tagged_value_type -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types +from weave_query import errors +from weave_query import weave_types as types def typeddict_pick_output_type(input_types): diff --git a/weave/legacy/weave/api.py b/weave_query/weave_query/api.py similarity index 79% rename from weave/legacy/weave/api.py rename to weave_query/weave_query/api.py index 6fa1726b37e..a396d00d7bf 100644 --- a/weave/legacy/weave/api.py +++ b/weave_query/weave_query/api.py @@ -2,48 +2,48 @@ import typing -from weave.legacy.weave import graph as _graph -from weave.legacy.weave.graph import Node +from weave_query import graph as _graph +from weave_query.graph import Node # If this is not imported, serialization of Weave Nodes is incorrect! -from weave.legacy.weave import graph_mapper as _graph_mapper +from weave_query import graph_mapper as _graph_mapper from . import storage as _storage from . import ref_base as _ref_base -from weave.legacy.weave import wandb_api as _wandb_api +from weave_query import wandb_api as _wandb_api -from weave.legacy.weave import weave_internal as _weave_internal +from weave_query import weave_internal as _weave_internal -from weave.legacy.weave import util as _util +from weave_query import util as _util -from weave.legacy.weave import context as _context +from weave_query import context as _context # exposed as part of api -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types # needed to enable automatic numpy serialization from . import types_numpy as _types_numpy -from weave.legacy.weave import errors -from weave.legacy.weave.decorators import weave_class, mutation, type +from weave_query import errors +from weave_query.decorators import weave_class, mutation, type -from weave.legacy.weave import usage_analytics -from weave.legacy.weave.context import ( +from weave_query import usage_analytics +from weave_query.context import ( use_fixed_server_port, use_frontend_devmode, # eager_execution, use_lazy_execution, ) -from weave.legacy.weave.panel import Panel +from weave_query.panel import Panel -from weave.legacy.weave.arrow.list_ import ArrowWeaveList as WeaveList +from weave_query.arrow.list_ import ArrowWeaveList as WeaveList # TODO: This is here because the op overloaded... -from weave.legacy.weave.decorator_op import op +from weave_query.decorator_op import op def save(node_or_obj, name=None): # type: ignore - from weave.legacy.weave.ops_primitives.weave_api import get, save + from weave_query.ops_primitives.weave_api import get, save if isinstance(node_or_obj, _graph.Node): return save(node_or_obj, name=name) diff --git a/weave/legacy/tests/util/__init__.py b/weave_query/weave_query/arrow/__init__.py similarity index 100% rename from weave/legacy/tests/util/__init__.py rename to weave_query/weave_query/arrow/__init__.py diff --git a/weave/legacy/weave/arrow/arrow.py b/weave_query/weave_query/arrow/arrow.py similarity index 97% rename from weave/legacy/weave/arrow/arrow.py rename to weave_query/weave_query/arrow/arrow.py index b6cc10e8790..43d639e9661 100644 --- a/weave/legacy/weave/arrow/arrow.py +++ b/weave_query/weave_query/arrow/arrow.py @@ -11,9 +11,9 @@ py_type = type -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import artifact_fs, partial_object +from weave_query import errors +from weave_query import weave_types as types +from weave_query import artifact_fs, partial_object def arrow_type_to_weave_type(pa_type: pa.DataType) -> types.Type: @@ -184,7 +184,7 @@ def save_instance(self, obj, artifact, name): ) # v1 AWL format - # from weave.legacy.weave.arrow import convert + # from weave_query.arrow import convert # parquet_friendly = convert.to_parquet_friendly(obj) # table = pa.table({"arr": parquet_friendly._arrow_data}) @@ -223,7 +223,7 @@ def load_instance( with artifact.open(f"{name}.ArrowWeaveList.type.json") as f: object_type = json.load(f) object_type = types.TypeRegistry.type_from_dict(object_type) - from weave.legacy.weave.arrow import list_ + from weave_query.arrow import list_ if "_weave_awl_format" not in artifact.metadata: # v1 AWL format @@ -232,7 +232,7 @@ def load_instance( arr = table["arr"].combine_chunks() with list_.unsafe_awl_construction("load_from_parquet"): l = self.instance_class(arr, object_type=object_type, artifact=artifact) # type: ignore - from weave.legacy.weave.arrow import convert + from weave_query.arrow import convert res = convert.from_parquet_friendly(l) elif artifact.metadata["_weave_awl_format"] == 2: @@ -366,7 +366,7 @@ def rewrite_weavelist_refs(arrow_data, object_type, source_artifact, target_arti def _object_type_has_props(object_type): - from weave.legacy.weave.language_features.tagging import tagged_value_type + from weave_query.language_features.tagging import tagged_value_type return ( isinstance(object_type, types.TypedDict) @@ -376,7 +376,7 @@ def _object_type_has_props(object_type): def _object_type_prop_types(object_type): - from weave.legacy.weave.language_features.tagging import tagged_value_type + from weave_query.language_features.tagging import tagged_value_type if isinstance(object_type, tagged_value_type.TaggedValueType): return { diff --git a/weave/legacy/weave/arrow/arrow_tags.py b/weave_query/weave_query/arrow/arrow_tags.py similarity index 93% rename from weave/legacy/weave/arrow/arrow_tags.py rename to weave_query/weave_query/arrow/arrow_tags.py index 3fb27314a00..46cac7251bf 100644 --- a/weave/legacy/weave/arrow/arrow_tags.py +++ b/weave_query/weave_query/arrow/arrow_tags.py @@ -3,10 +3,10 @@ import pyarrow as pa from pyarrow import compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.arrow import offsets_starting_at_zero -from weave.legacy.weave.language_features.tagging import ( +from weave_query import weave_types as types +from weave_query.arrow import convert +from weave_query.arrow.arrow import offsets_starting_at_zero +from weave_query.language_features.tagging import ( process_opdef_output_type, tag_store, ) @@ -109,7 +109,7 @@ def awl_add_arrow_tags( new_object_type = process_opdef_output_type.op_make_type_tagged_resolver( l.object_type, tag_type ) - from weave.legacy.weave.arrow.list_ import ArrowWeaveList + from weave_query.arrow.list_ import ArrowWeaveList res: ArrowWeaveList = ArrowWeaveList(new_value, new_object_type, l._artifact) if tag_store.is_tagged(l): diff --git a/weave/legacy/weave/arrow/concat.py b/weave_query/weave_query/arrow/concat.py similarity index 98% rename from weave/legacy/weave/arrow/concat.py rename to weave_query/weave_query/arrow/concat.py index d383a9c09c9..0de3d0622a7 100644 --- a/weave/legacy/weave/arrow/concat.py +++ b/weave_query/weave_query/arrow/concat.py @@ -12,9 +12,9 @@ import pyarrow as pa from pyarrow import compute as pc -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow.list_ import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.arrow.list_ import ( ArrowWeaveList, ArrowWeaveListGeneric, is_list_arrowweavelist, @@ -26,11 +26,11 @@ offsets_starting_at_zero, unsafe_awl_construction, ) -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query.language_features.tagging import tagged_value_type DEBUG = False -from weave.legacy.weave import engine_trace +from weave_query import engine_trace tracer = engine_trace.tracer() diff --git a/weave/legacy/weave/arrow/constructors.py b/weave_query/weave_query/arrow/constructors.py similarity index 90% rename from weave/legacy/weave/arrow/constructors.py rename to weave_query/weave_query/arrow/constructors.py index 6beeb475d92..7ac0bb645ea 100644 --- a/weave/legacy/weave/arrow/constructors.py +++ b/weave_query/weave_query/arrow/constructors.py @@ -3,13 +3,13 @@ import pyarrow as pa -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import artifact_base, box -from weave.legacy.weave.arrow import arrow_tags, convert -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType, arrow_as_array -from weave.legacy.weave.arrow.list_ import ArrowWeaveList -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type +from weave_query import errors +from weave_query import weave_types as types +from weave_query import artifact_base, box +from weave_query.arrow import arrow_tags, convert +from weave_query.arrow.arrow import ArrowWeaveListType, arrow_as_array +from weave_query.arrow.list_ import ArrowWeaveList +from weave_query.language_features.tagging import tag_store, tagged_value_type def repeat(value: typing.Any, count: int) -> pa.Array: diff --git a/weave/legacy/weave/arrow/convert.py b/weave_query/weave_query/arrow/convert.py similarity index 98% rename from weave/legacy/weave/arrow/convert.py rename to weave_query/weave_query/arrow/convert.py index a53a610fd01..84f4a1fa53c 100644 --- a/weave/legacy/weave/arrow/convert.py +++ b/weave_query/weave_query/arrow/convert.py @@ -3,19 +3,19 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import api as api -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import errors, arrow_util, artifact_base, artifact_mem, box, mappers_arrow -from weave.legacy.weave.arrow.arrow import ( +from weave_query import api as api +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import errors, arrow_util, artifact_base, artifact_mem, box, mappers_arrow +from weave_query.arrow.arrow import ( ArrowWeaveListType, ) -from weave.legacy.weave.arrow.list_ import ( +from weave_query.arrow.list_ import ( ArrowWeaveList, PathType, unsafe_awl_construction, ) -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type +from weave_query.language_features.tagging import tag_store, tagged_value_type # Hmm... this doesn't work on ObjectType, which contains a Union of Struct... # We need that because our ImageFileArtifactRefType has a union of structs @@ -502,7 +502,7 @@ def simple_to_string(arr: pa.Array): def to_compare_safe(awl: ArrowWeaveList) -> ArrowWeaveList: """Converts any ArrowWeaveList to simple type that pa.compute.equal can compare.""" - from weave.legacy.weave.ops_domain.wbmedia import ArtifactAssetType + from weave_query.ops_domain.wbmedia import ArtifactAssetType # Returns a number of string arrow weave list, possibly with Nones def _to_compare_safe( diff --git a/weave/legacy/weave/arrow/list_.py b/weave_query/weave_query/arrow/list_.py similarity index 98% rename from weave/legacy/weave/arrow/list_.py rename to weave_query/weave_query/arrow/list_.py index 9a6a28b80ad..3cd1932b60d 100644 --- a/weave/legacy/weave/arrow/list_.py +++ b/weave_query/weave_query/arrow/list_.py @@ -10,8 +10,8 @@ import pyarrow.compute as pc import typing_extensions -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( weave_internal, errors, _dict_utils, @@ -25,7 +25,7 @@ node_ref, ref_base, ) -from weave.legacy.weave.arrow.arrow import ( +from weave_query.arrow.arrow import ( ArrowWeaveListType, arrow_as_array, arrow_zip, @@ -33,11 +33,11 @@ pretty_print_arrow_type, safe_is_null, ) -from weave.legacy.weave.language_features.tagging import ( +from weave_query.language_features.tagging import ( tag_store, tagged_value_type, ) -from weave.legacy.weave import ref_util +from weave_query import ref_util def reverse_dict(d: dict) -> dict: @@ -494,7 +494,7 @@ def unsafe_awl_construction(reason: str): def dict_of_columns_to_awl(d: dict[str, typing.Any]) -> "ArrowWeaveList": - from weave.legacy.weave.arrow import constructors + from weave_query.arrow import constructors cols = {} for k, v in d.items(): @@ -522,7 +522,7 @@ def __init__( artifact: typing.Optional[artifact_base.Artifact] = None, invalid_reason=None, ) -> None: - from weave.legacy.weave.arrow import constructors, convert + from weave_query.arrow import constructors, convert # Do not dictionary decode this array! That will break performance. # Note we combine chunks here, to make the internal interface easy @@ -610,7 +610,7 @@ def __add__(self, other) -> "ArrowWeaveList": if not isinstance(other, ArrowWeaveList): raise TypeError(f"Expected list or ArrowWeaveList, got {type(other)}") - from weave.legacy.weave.arrow import concat + from weave_query.arrow import concat return concat.concatenate(self, other) @@ -901,7 +901,7 @@ def _map_column( type_codes, pa.scalar(i, pa.int8()), ) - from weave.legacy.weave.arrow import concat + from weave_query.arrow import concat members[i] = concat.concatenate(member_i, member_j) members[j] = None @@ -1499,12 +1499,12 @@ def apply( self, fn: typing.Union[typing.Callable[[typing.Any], typing.Any], graph.Node] ): fn = self._make_lambda_node(fn) - from weave.legacy.weave.ops_arrow.vectorize import _apply_fn_node_with_tag_pushdown + from weave_query.ops_arrow.vectorize import _apply_fn_node_with_tag_pushdown return _apply_fn_node_with_tag_pushdown(self, fn) # type: ignore def concat(self, other: "ArrowWeaveList") -> "ArrowWeaveList": - from weave.legacy.weave.arrow import concat + from weave_query.arrow import concat return concat.concatenate(self, other) @@ -1518,7 +1518,7 @@ def join2( leftOuter: bool = False, rightOuter: bool = False, ): - from weave.legacy.weave.ops_arrow import list_join + from weave_query.ops_arrow import list_join join1Fn = self._make_lambda_node(join1Fn) join2Fn = other._make_lambda_node(join2Fn) @@ -1666,7 +1666,7 @@ def make_vec_taggedvalue( def awl_zip(*arrs: ArrowWeaveList) -> ArrowWeaveList: if not arrs: raise ValueError("Cannot zip empty list") - from weave.legacy.weave.arrow import convert + from weave_query.arrow import convert arrs = convert.unify_types(*arrs) zipped = arrow_zip(*[a._arrow_data for a in arrs]) diff --git a/weave/legacy/weave/arrow_util.py b/weave_query/weave_query/arrow_util.py similarity index 100% rename from weave/legacy/weave/arrow_util.py rename to weave_query/weave_query/arrow_util.py diff --git a/weave/legacy/weave/artifact_base.py b/weave_query/weave_query/artifact_base.py similarity index 95% rename from weave/legacy/weave/artifact_base.py rename to weave_query/weave_query/artifact_base.py index 3d1b56de86d..4256c033c62 100644 --- a/weave/legacy/weave/artifact_base.py +++ b/weave_query/weave_query/artifact_base.py @@ -7,8 +7,8 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ref_base +from weave_query import weave_types as types +from weave_query import ref_base class Artifact: diff --git a/weave/legacy/weave/artifact_fs.py b/weave_query/weave_query/artifact_fs.py similarity index 97% rename from weave/legacy/weave/artifact_fs.py rename to weave_query/weave_query/artifact_fs.py index 206d1bf487d..6eff6e68448 100644 --- a/weave/legacy/weave/artifact_fs.py +++ b/weave_query/weave_query/artifact_fs.py @@ -6,14 +6,14 @@ import os import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import artifact_base, file_base, object_context, ref_base, uris -from weave.legacy.weave.language_features.tagging import tag_store -from weave.legacy.weave import ref_util +from weave_query import errors +from weave_query import weave_types as types +from weave_query import artifact_base, file_base, object_context, ref_base, uris +from weave_query.language_features.tagging import tag_store +from weave_query import ref_util if typing.TYPE_CHECKING: - from weave.legacy.weave import graph + from weave_query import graph class FilesystemArtifactType(types.Type): @@ -85,7 +85,7 @@ def get(self, key: str, type_: types.Type) -> typing.Any: return self.ref_from_local_str(key, type_).get() def as_node(self) -> "graph.Node": - from weave.legacy.weave.ops_primitives.weave_api import get as op_get + from weave_query.ops_primitives.weave_api import get as op_get return op_get(str(self)) @@ -267,7 +267,7 @@ def type(self) -> types.Type: ot = self._outer_type if self.extra is not None: - from weave.legacy.weave import types_numpy + from weave_query import types_numpy if not types.is_list_like(ot) and isinstance( ot, types_numpy.NumpyArrayType @@ -451,7 +451,7 @@ def size(self) -> int: return self.artifact.size(self.path) def digest(self) -> typing.Optional[str]: - from weave.legacy.weave.artifact_wandb import WandbArtifact + from weave_query.artifact_wandb import WandbArtifact if isinstance(self.artifact, WandbArtifact): # we can get the digest from the manifest (much faster) diff --git a/weave/legacy/weave/artifact_local.py b/weave_query/weave_query/artifact_local.py similarity index 99% rename from weave/legacy/weave/artifact_local.py rename to weave_query/weave_query/artifact_local.py index fc49c4c187e..3361a25957d 100644 --- a/weave/legacy/weave/artifact_local.py +++ b/weave_query/weave_query/artifact_local.py @@ -9,9 +9,9 @@ import typing from datetime import datetime -from weave.legacy.weave import filesystem -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import filesystem +from weave_query import weave_types as types +from weave_query import ( artifact_fs, artifact_wandb, environment, diff --git a/weave/legacy/weave/artifact_mem.py b/weave_query/weave_query/artifact_mem.py similarity index 90% rename from weave/legacy/weave/artifact_mem.py rename to weave_query/weave_query/artifact_mem.py index 44fb3f9ff0e..079067e8af8 100644 --- a/weave/legacy/weave/artifact_mem.py +++ b/weave_query/weave_query/artifact_mem.py @@ -1,9 +1,9 @@ import typing from . import artifact_base -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import errors -from weave.legacy.weave import ref_base +from weave_query import weave_types as types +from weave_query import errors +from weave_query import ref_base class MemArtifact(artifact_base.Artifact): diff --git a/weave/legacy/weave/artifact_wandb.py b/weave_query/weave_query/artifact_wandb.py similarity index 99% rename from weave/legacy/weave/artifact_wandb.py rename to weave_query/weave_query/artifact_wandb.py index a19a33af7ef..00a02111d0c 100644 --- a/weave/legacy/weave/artifact_wandb.py +++ b/weave_query/weave_query/artifact_wandb.py @@ -13,8 +13,8 @@ from wandb.apis.public import api as wb_public from wandb.sdk.lib.hashutil import b64_to_hex_id, hex_to_b64_id -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( filesystem, urls, errors, @@ -28,10 +28,10 @@ wandb_client_api, util, ) -from weave.legacy.weave.wandb_interface import wandb_artifact_pusher +from weave_query.wandb_interface import wandb_artifact_pusher if typing.TYPE_CHECKING: - from weave.legacy.weave.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun + from weave_query.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun from .run_streamtable_span import RunStreamTableSpan @@ -417,7 +417,7 @@ def __init__( ] ] = None, ): - from weave.legacy.weave import io_service + from weave_query import io_service self.io_service = io_service.get_sync_client() self.name = name @@ -857,7 +857,7 @@ def from_uri(cls, uri: uris.WeaveURI) -> "WandbArtifactRef": @property def ui_url(self): root_type = self.type.root_type_class() - from weave.legacy.weave.op_def_type import OpDefType + from weave_query.op_def_type import OpDefType if issubclass(root_type, OpDefType): return urls.op_version_path( diff --git a/weave/legacy/weave/async_demo.py b/weave_query/weave_query/async_demo.py similarity index 96% rename from weave/legacy/weave/async_demo.py rename to weave_query/weave_query/async_demo.py index 1e1f7a3d28a..3d10743cabc 100644 --- a/weave/legacy/weave/async_demo.py +++ b/weave_query/weave_query/async_demo.py @@ -2,8 +2,9 @@ import time -import weave -from weave.legacy.weave import context_state as _context_state +import weave_query as weave +import weave_query +from weave_query import context_state as _context_state _loading_builtins_token = _context_state.set_loading_built_ins() diff --git a/weave/legacy/weave/async_map.py b/weave_query/weave_query/async_map.py similarity index 100% rename from weave/legacy/weave/async_map.py rename to weave_query/weave_query/async_map.py diff --git a/weave/legacy/weave/async_queue.py b/weave_query/weave_query/async_queue.py similarity index 100% rename from weave/legacy/weave/async_queue.py rename to weave_query/weave_query/async_queue.py diff --git a/weave/legacy/weave/box.py b/weave_query/weave_query/box.py similarity index 98% rename from weave/legacy/weave/box.py rename to weave_query/weave_query/box.py index 893707e6b26..0db5e47732d 100644 --- a/weave/legacy/weave/box.py +++ b/weave_query/weave_query/box.py @@ -4,8 +4,8 @@ import numpy as np -from weave.legacy.weave import ref_util -from weave.legacy.weave import context_state +from weave_query import ref_util +from weave_query import context_state def make_id() -> int: diff --git a/weave/legacy/weave/cache.py b/weave_query/weave_query/cache.py similarity index 98% rename from weave/legacy/weave/cache.py rename to weave_query/weave_query/cache.py index 5db00184bfa..690aff8545b 100644 --- a/weave/legacy/weave/cache.py +++ b/weave_query/weave_query/cache.py @@ -6,8 +6,8 @@ import time import typing -from weave.legacy.weave import errors -from weave.legacy.weave import context_state, environment, wandb_api, engine_trace +from weave_query import errors +from weave_query import context_state, environment, wandb_api, engine_trace statsd = engine_trace.statsd() # type: ignore logger = logging.getLogger("root") diff --git a/weave/legacy/weave/client.py b/weave_query/weave_query/client.py similarity index 91% rename from weave/legacy/weave/client.py rename to weave_query/weave_query/client.py index 9c10cd2f455..52d36373b34 100644 --- a/weave/legacy/weave/client.py +++ b/weave_query/weave_query/client.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_types -from weave.legacy.weave import storage +from weave_query import weave_types +from weave_query import storage class Client: diff --git a/weave/legacy/weave/client_interface.py b/weave_query/weave_query/client_interface.py similarity index 100% rename from weave/legacy/weave/client_interface.py rename to weave_query/weave_query/client_interface.py diff --git a/weave/legacy/weave/codifiable_value_mixin.py b/weave_query/weave_query/codifiable_value_mixin.py similarity index 100% rename from weave/legacy/weave/codifiable_value_mixin.py rename to weave_query/weave_query/codifiable_value_mixin.py diff --git a/weave/legacy/weave/codify.py b/weave_query/weave_query/codify.py similarity index 91% rename from weave/legacy/weave/codify.py rename to weave_query/weave_query/codify.py index 0e6b5c273b6..510d2a2a082 100644 --- a/weave/legacy/weave/codify.py +++ b/weave_query/weave_query/codify.py @@ -6,8 +6,8 @@ import black -from weave.legacy.weave import weave_types -from weave.legacy.weave import storage, graph, registry_mem +from weave_query import weave_types +from weave_query import storage, graph, registry_mem from . import codifiable_value_mixin @@ -97,7 +97,7 @@ def _try_otc_using_codifiable_mixin(obj: typing.Any) -> typing.Optional[str]: # assert weave_types.type_name_to_type(obj_type.name)() == obj_type # d = obj_type.instance_to_dict(obj) # obj_type_name = obj_type.name -# return f"""weave.legacy.weave.codify.load_type({obj_type_name}, {d})""" +# return f"""weave_query.codify.load_type({obj_type_name}, {d})""" # return None @@ -128,7 +128,7 @@ def _try_otc_using_dataclasses(obj: typing.Any) -> typing.Optional[str]: if class_type.__module__.startswith("weave.decorator_type") and issubclass( class_type, weave_types.Type ): - qualified_classpath = "weave.legacy.weave.weave_types" + qualified_classpath = "weave_query.weave_types" qualified_classname = f"type_name_to_type('{class_type.name}')" else: qualified_classpath = _module_name_corrections(class_type.__module__) @@ -162,7 +162,7 @@ def _try_otc_using_dataclasses(obj: typing.Any) -> typing.Optional[str]: def _otc_using_storage_fallback(obj: typing.Any) -> str: - return f"""weave.legacy.weave.codify.load({storage.to_python(obj)})""" + return f"""weave_query.codify.load({storage.to_python(obj)})""" # Helpers @@ -170,8 +170,8 @@ def _otc_using_storage_fallback(obj: typing.Any) -> str: # Hack: def _module_name_corrections(qualified_name: str) -> str: - if qualified_name == "weave.legacy.weave.ops_primitives.file_local": - return "weave.legacy.weave.ops" + if qualified_name == "weave_query.ops_primitives.file_local": + return "weave_query.ops" elif qualified_name.startswith("weave.decorator_class"): raise ValueError("Decorator classes are not supported.") elif qualified_name.startswith("weave.decorator_type"): @@ -201,7 +201,7 @@ def _node_to_code(node: graph.Node, wrap_const_node: bool = True) -> str: if current_frame is not None and node.name in current_frame: return node.name - return f"weave.legacy.weave.weave_internal.make_var_node({_type_to_code(node.type)}, '{node.name}')" + return f"weave_query.weave_internal.make_var_node({_type_to_code(node.type)}, '{node.name}')" elif isinstance(node, graph.ConstNode): if isinstance(node.type, weave_types.Function): vars = list(node.type.input_types.keys()) @@ -209,7 +209,7 @@ def _node_to_code(node: graph.Node, wrap_const_node: bool = True) -> str: else: val_as_code = object_to_code_no_format(node.val) if wrap_const_node: - return f"weave.legacy.weave.weave_internal.const({val_as_code})" + return f"weave_query.weave_internal.const({val_as_code})" else: return val_as_code elif isinstance(node, graph.OutputNode): @@ -226,7 +226,7 @@ def _node_to_code(node: graph.Node, wrap_const_node: bool = True) -> str: ) if len(node.from_op.inputs) > 0: args += "," - return f"weave.legacy.weave.ops_primitives.dict.dict_({args})" + return f"weave_query.ops_primitives.dict.dict_({args})" elif node.from_op.name == "list": args = ",".join( [ @@ -236,7 +236,7 @@ def _node_to_code(node: graph.Node, wrap_const_node: bool = True) -> str: ) if len(node.from_op.inputs) > 0: args += "," - return f"weave.legacy.weave.ops_primitives.list_.make_list({args})" + return f"weave_query.ops_primitives.list_.make_list({args})" is_root = len(inputs) == 0 or not isinstance( inputs[0], (graph.OutputNode, graph.VarNode) diff --git a/weave/legacy/weave/compile.py b/weave_query/weave_query/compile.py similarity index 99% rename from weave/legacy/weave/compile.py rename to weave_query/weave_query/compile.py index 318e980ee39..33a03ae9106 100644 --- a/weave/legacy/weave/compile.py +++ b/weave_query/weave_query/compile.py @@ -5,8 +5,8 @@ import re import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( weave_internal, errors, engine_trace, @@ -28,8 +28,8 @@ stitch, value_or_error, ) -from weave.legacy.weave.language_features.tagging import tagged_value_type_helpers -from weave.legacy.weave.op_def import OpDef +from weave_query.language_features.tagging import tagged_value_type_helpers +from weave_query.op_def import OpDef # These call_* functions must match the actual op implementations. # But we don't want to import the op definitions themselves here, since @@ -41,7 +41,7 @@ def _dispatch_error_is_client_error( op_name: str, input_types: dict[str, types.Type] ) -> bool: - from weave.legacy.weave.ops_domain import wbmedia + from weave_query.ops_domain import wbmedia if op_name in set( ( @@ -268,7 +268,7 @@ def _simple_optimizations(node: graph.Node) -> typing.Optional[graph.Node]: node.type, "ArrowWeaveListTypedDict-columnNames", {"self": awl_node} ) elif isinstance(node, graph.OutputNode) and node.from_op.name == "flatten": - from weave.legacy.weave.arrow.arrow import ArrowWeaveListType + from weave_query.arrow.arrow import ArrowWeaveListType from .ops_arrow.list_ops import _concat_output_type @@ -284,7 +284,7 @@ def _simple_optimizations(node: graph.Node) -> typing.Optional[graph.Node]: {"arr": arr_node}, ) elif isinstance(node, graph.OutputNode) and node.from_op.name == "concat": - from weave.legacy.weave.arrow.arrow import ArrowWeaveListType + from weave_query.arrow.arrow import ArrowWeaveListType from .ops_arrow.list_ops import flatten_return_type @@ -487,7 +487,7 @@ def compile_dedupe( nodes: dict[str, graph.Node] = {} def _dedupe(node: graph.Node) -> graph.Node: - from weave.legacy.weave import serialize + from weave_query import serialize node_id = serialize.node_id(node) if node_id in nodes: diff --git a/weave/legacy/weave/compile_domain.py b/weave_query/weave_query/compile_domain.py similarity index 97% rename from weave/legacy/weave/compile_domain.py rename to weave_query/weave_query/compile_domain.py index fa002b254c3..72cc1183a83 100644 --- a/weave/legacy/weave/compile_domain.py +++ b/weave_query/weave_query/compile_domain.py @@ -2,13 +2,13 @@ import graphql -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import gql_op_plugin, gql_to_weave, graph, op_args, stitch, registry_mem -from weave.legacy.weave.input_provider import InputAndStitchProvider +from weave_query import errors +from weave_query import weave_types as types +from weave_query import gql_op_plugin, gql_to_weave, graph, op_args, stitch, registry_mem +from weave_query.input_provider import InputAndStitchProvider if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def + from weave_query import op_def def fragment_to_query(fragment: str) -> str: diff --git a/weave/legacy/weave/compile_table.py b/weave_query/weave_query/compile_table.py similarity index 92% rename from weave/legacy/weave/compile_table.py rename to weave_query/weave_query/compile_table.py index bbf9f868b49..1c3af69b0ea 100644 --- a/weave/legacy/weave/compile_table.py +++ b/weave_query/weave_query/compile_table.py @@ -2,8 +2,8 @@ import typing -from weave.legacy.weave import errors -from weave.legacy.weave import stitch +from weave_query import errors +from weave_query import stitch KeyTree = typing.Dict[str, "KeyTree"] # type:ignore @@ -20,7 +20,7 @@ def tree_merge(a: KeyTree, b: KeyTree) -> None: def get_projection(obj: stitch.ObjectRecorder) -> KeyTree: """Given an object returned by stitch, return a tree of all accessed columns.""" - from weave.legacy.weave import _dict_utils + from weave_query import _dict_utils cols: KeyTree = {} all_keys = False diff --git a/weave/legacy/weave/context.py b/weave_query/weave_query/context.py similarity index 88% rename from weave/legacy/weave/context.py rename to weave_query/weave_query/context.py index c45c255f83b..083638f6486 100644 --- a/weave/legacy/weave/context.py +++ b/weave_query/weave_query/context.py @@ -4,15 +4,15 @@ import typing from urllib.parse import urlparse -from weave.legacy.weave import util -from weave.legacy.weave import urls, client, context_state -from weave.legacy.weave.client_interface import ClientInterface +from weave_query import util +from weave_query import urls, client, context_state +from weave_query.client_interface import ClientInterface @contextlib.contextmanager def execution_client(): """Returns a client for use by the execution engine and op resolvers.""" - from weave.legacy.weave import server + from weave_query import server # Force in process execution with context_state.client(client.NonCachingClient(server.InProcessServer())): @@ -22,7 +22,7 @@ def execution_client(): @contextlib.contextmanager def local_http_client(): - from weave.legacy.weave import server + from weave_query import server s = server.HttpServer() s.start() @@ -34,7 +34,7 @@ def local_http_client(): @contextlib.contextmanager def weavejs_client(): - from weave.legacy.weave import server + from weave_query import server s = server.HttpServer() s.start() @@ -48,7 +48,7 @@ def use_fixed_server_port(): # s = server.HttpServer(port=9994) # s.start() # _weave_client.set(server.HttpServerClient(s.url)) - from weave.legacy.weave import server + from weave_query import server context_state.set_client(server.HttpServerClient("http://localhost:9994")) @@ -70,7 +70,7 @@ def use_lazy_execution(): def _make_default_client(): - from weave.legacy.weave import server + from weave_query import server if util.is_notebook(): serv = context_state.get_server() @@ -105,7 +105,7 @@ def get_client() -> typing.Optional[ClientInterface]: def get_frontend_url(): - from weave.legacy.weave import server + from weave_query import server url = os.environ.get("WEAVE_FRONTEND_URL", context_state.get_frontend_url()) if url is None: diff --git a/weave/legacy/weave/context_state.py b/weave_query/weave_query/context_state.py similarity index 98% rename from weave/legacy/weave/context_state.py rename to weave_query/weave_query/context_state.py index 2cf1c86247f..cdf90d6efcc 100644 --- a/weave/legacy/weave/context_state.py +++ b/weave_query/weave_query/context_state.py @@ -3,11 +3,11 @@ import dataclasses import typing -from weave.legacy.weave import server_interface +from weave_query import server_interface if typing.TYPE_CHECKING: - from weave.legacy.weave import client_interface, uris - from weave.legacy.weave.graph_client import GraphClient + from weave_query import client_interface, uris + from weave_query.graph_client import GraphClient # colab currently runs ipykernel < 6.0. This resets context on every diff --git a/weave_query/weave_query/core_types/__init__.py b/weave_query/weave_query/core_types/__init__.py new file mode 100644 index 00000000000..de23de38330 --- /dev/null +++ b/weave_query/weave_query/core_types/__init__.py @@ -0,0 +1 @@ +from weave_query.core_types.stream_table_type import StreamTableType diff --git a/weave/legacy/weave/core_types/stream_table_type.py b/weave_query/weave_query/core_types/stream_table_type.py similarity index 78% rename from weave/legacy/weave/core_types/stream_table_type.py rename to weave_query/weave_query/core_types/stream_table_type.py index 40a2250511e..afb4fd261c5 100644 --- a/weave/legacy/weave/core_types/stream_table_type.py +++ b/weave_query/weave_query/core_types/stream_table_type.py @@ -1,4 +1,4 @@ -from weave.legacy.weave import decorator_type +from weave_query import decorator_type @decorator_type.type( diff --git a/weave/legacy/weave/debug.py b/weave_query/weave_query/debug.py similarity index 100% rename from weave/legacy/weave/debug.py rename to weave_query/weave_query/debug.py diff --git a/weave/legacy/weave/debug_compile.py b/weave_query/weave_query/debug_compile.py similarity index 95% rename from weave/legacy/weave/debug_compile.py rename to weave_query/weave_query/debug_compile.py index c5d75e8ff77..e84aa24fbb1 100644 --- a/weave/legacy/weave/debug_compile.py +++ b/weave_query/weave_query/debug_compile.py @@ -1,5 +1,5 @@ -from weave import types -from weave.legacy.weave import graph +from weave_query import types +from weave_query import graph from . import debug_types diff --git a/weave/legacy/weave/debug_types.py b/weave_query/weave_query/debug_types.py similarity index 97% rename from weave/legacy/weave/debug_types.py rename to weave_query/weave_query/debug_types.py index 4449bfef71c..aae411643c0 100644 --- a/weave/legacy/weave/debug_types.py +++ b/weave_query/weave_query/debug_types.py @@ -1,7 +1,7 @@ import textwrap -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.weave_types import * +from weave_query.language_features.tagging import tagged_value_type +from weave_query.weave_types import * def short_type(type: Type) -> str: diff --git a/weave/legacy/weave/decorator_arrow_op.py b/weave_query/weave_query/decorator_arrow_op.py similarity index 96% rename from weave/legacy/weave/decorator_arrow_op.py rename to weave_query/weave_query/decorator_arrow_op.py index 0b9ba138c69..aca23fb4a43 100644 --- a/weave/legacy/weave/decorator_arrow_op.py +++ b/weave_query/weave_query/decorator_arrow_op.py @@ -1,9 +1,9 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import op_def -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query import op_def +from weave_query.arrow.arrow import ArrowWeaveListType +from weave_query.language_features.tagging import tagged_value_type from .decorator_op import op diff --git a/weave/legacy/weave/decorator_class.py b/weave_query/weave_query/decorator_class.py similarity index 93% rename from weave/legacy/weave/decorator_class.py rename to weave_query/weave_query/decorator_class.py index 7f6d82f2728..f688e7f4dd8 100644 --- a/weave/legacy/weave/decorator_class.py +++ b/weave_query/weave_query/decorator_class.py @@ -1,9 +1,9 @@ import inspect import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import context_state, derive_op, op_def, registry_mem +from weave_query import errors +from weave_query import weave_types as types +from weave_query import context_state, derive_op, op_def, registry_mem # Contrary to the way it is read, the weave.class() decorator runs AFTER the # inner methods are defined. Therefore, this function runs after the ops are diff --git a/weave/legacy/weave/decorator_mutation.py b/weave_query/weave_query/decorator_mutation.py similarity index 100% rename from weave/legacy/weave/decorator_mutation.py rename to weave_query/weave_query/decorator_mutation.py diff --git a/weave/legacy/weave/decorator_op.py b/weave_query/weave_query/decorator_op.py similarity index 93% rename from weave/legacy/weave/decorator_op.py rename to weave_query/weave_query/decorator_op.py index e7a156614d6..7a567797c3f 100644 --- a/weave/legacy/weave/decorator_op.py +++ b/weave_query/weave_query/decorator_op.py @@ -4,11 +4,11 @@ from typing_extensions import ParamSpec -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import context_state, derive_op, op_args, op_def, pyfunc_type_util, registry_mem +from weave_query import weave_types as types +from weave_query import context_state, derive_op, op_args, op_def, pyfunc_type_util, registry_mem if typing.TYPE_CHECKING: - from weave.legacy.weave.gql_op_plugin import GqlOpPlugin + from weave_query.gql_op_plugin import GqlOpPlugin # Important usability note @@ -104,7 +104,7 @@ def wrap(f: Callable[P, R]) -> Callable[P, R]: mutation=mutation, ) if weavify: - from weave.legacy.weave.weavify import op_to_weave_fn + from weave_query.weavify import op_to_weave_fn op.weave_fn = op_to_weave_fn(op) diff --git a/weave/legacy/weave/decorator_type.py b/weave_query/weave_query/decorator_type.py similarity index 95% rename from weave/legacy/weave/decorator_type.py rename to weave_query/weave_query/decorator_type.py index 1e437a30c2c..a06e7e93557 100644 --- a/weave/legacy/weave/decorator_type.py +++ b/weave_query/weave_query/decorator_type.py @@ -2,9 +2,9 @@ import inspect import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import context_state, decorator_class, object_type_ref_util, infer_types +from weave_query import errors +from weave_query import weave_types as types +from weave_query import context_state, decorator_class, object_type_ref_util, infer_types _py_type = type @@ -93,7 +93,7 @@ def wrap(target): # and deserialize them along with the data attached to the object if relocatable: for name, member in inspect.getmembers(target): - from weave.legacy.weave import op_def, op_def_type + from weave_query import op_def, op_def_type if isinstance(member, op_def.BoundOpDef): static_property_types[name] = op_def_type.OpDefType() diff --git a/weave/legacy/weave/decorator_type.pyi b/weave_query/weave_query/decorator_type.pyi similarity index 100% rename from weave/legacy/weave/decorator_type.pyi rename to weave_query/weave_query/decorator_type.pyi diff --git a/weave/legacy/weave/decorators.py b/weave_query/weave_query/decorators.py similarity index 100% rename from weave/legacy/weave/decorators.py rename to weave_query/weave_query/decorators.py diff --git a/weave/legacy/weave/derive_op.py b/weave_query/weave_query/derive_op.py similarity index 98% rename from weave/legacy/weave/derive_op.py rename to weave_query/weave_query/derive_op.py index d95e38bb342..1df38fe0c40 100644 --- a/weave/legacy/weave/derive_op.py +++ b/weave_query/weave_query/derive_op.py @@ -6,8 +6,8 @@ import inspect import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( storage, weave_internal, errors, @@ -21,7 +21,7 @@ op_def, op_policy, ) -from weave.legacy.weave.language_features.tagging import tag_store +from weave_query.language_features.tagging import tag_store USE_PARALLEL_DOWNLOAD = True USE_PARALLEL_REFINE = True @@ -195,7 +195,7 @@ def make_output_type(input_types): raise errors.WeaveMakeFunctionError( "output_type function must return a node." ) - from weave.legacy.weave.ops_primitives.list_ import make_list + from weave_query.ops_primitives.list_ import make_list return types.List.make( { diff --git a/weave/legacy/weave/dispatch.py b/weave_query/weave_query/dispatch.py similarity index 98% rename from weave/legacy/weave/dispatch.py rename to weave_query/weave_query/dispatch.py index 3017187613b..ffc79888800 100644 --- a/weave/legacy/weave/dispatch.py +++ b/weave_query/weave_query/dispatch.py @@ -5,11 +5,11 @@ import typing from dataclasses import dataclass -from weave.legacy.weave import util -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph, memo, op_args, op_def, pyfunc_type_util, registry_mem, errors -from weave.legacy.weave.language_features.tagging.is_tag_getter import is_tag_getter -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query import util +from weave_query import weave_types as types +from weave_query import graph, memo, op_args, op_def, pyfunc_type_util, registry_mem, errors +from weave_query.language_features.tagging.is_tag_getter import is_tag_getter +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType # I originally wrote this thinking that we could always choose the more specific diff --git a/weave/legacy/weave/eager.py b/weave_query/weave_query/eager.py similarity index 93% rename from weave/legacy/weave/eager.py rename to weave_query/weave_query/eager.py index 393e23ad23f..fcc72983c2b 100644 --- a/weave/legacy/weave/eager.py +++ b/weave_query/weave_query/eager.py @@ -1,9 +1,9 @@ import typing -from weave.legacy.weave import context_state, graph +from weave_query import context_state, graph -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types +from weave_query import weave_internal +from weave_query import weave_types as types WeaveIterObjectType = typing.TypeVar("WeaveIterObjectType") @@ -81,7 +81,7 @@ def __iter__(self) -> typing.Iterator[WeaveIterObjectType]: def select_all(node: graph.Node) -> graph.Node: if not types.TypedDict().assign_type(node.type): raise ValueError("only TypedDict supported for now") - from weave.legacy.weave.ops_primitives import dict_ + from weave_query.ops_primitives import dict_ node_type = typing.cast(types.TypedDict, node.type) return dict_(**{k: node[k] for k in node_type.property_types}) # type: ignore diff --git a/weave_query/weave_query/ecosystem/__init__.py b/weave_query/weave_query/ecosystem/__init__.py new file mode 100644 index 00000000000..f40aebf361a --- /dev/null +++ b/weave_query/weave_query/ecosystem/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.root import * diff --git a/weave/legacy/weave/ecosystem/all.py b/weave_query/weave_query/ecosystem/all.py similarity index 90% rename from weave/legacy/weave/ecosystem/all.py rename to weave_query/weave_query/ecosystem/all.py index e1e5c1d39f6..8fbe2f37df4 100644 --- a/weave/legacy/weave/ecosystem/all.py +++ b/weave_query/weave_query/ecosystem/all.py @@ -4,7 +4,7 @@ import typing from collections import Counter, defaultdict -from weave.legacy.weave import context_state +from weave_query import context_state logger = logging.getLogger(__name__) @@ -38,11 +38,11 @@ LOAD_RESULTS: typing.DefaultDict[str, list[str]] = defaultdict(list[str]) try: - logger.info("Loading weave.legacy.weave.ecosystem") + logger.info("Loading weave_query.ecosystem") for module in ALL_MODULES: try: globals()[module] = importlib.import_module( - f"weave.legacy.weave.ecosystem.{module}" + f"weave_query.ecosystem.{module}" ) LOAD_RESULTS["loaded"].append(module) except ImportError as exc: diff --git a/weave_query/weave_query/ecosystem/bertviz/__init__.py b/weave_query/weave_query/ecosystem/bertviz/__init__.py new file mode 100644 index 00000000000..e171c8191b6 --- /dev/null +++ b/weave_query/weave_query/ecosystem/bertviz/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.bertviz.panels import * diff --git a/weave/legacy/weave/ecosystem/bertviz/panels.py b/weave_query/weave_query/ecosystem/bertviz/panels.py similarity index 83% rename from weave/legacy/weave/ecosystem/bertviz/panels.py rename to weave_query/weave_query/ecosystem/bertviz/panels.py index 36a6a63c0c9..f5468e3c4c1 100644 --- a/weave/legacy/weave/ecosystem/bertviz/panels.py +++ b/weave_query/weave_query/ecosystem/bertviz/panels.py @@ -1,11 +1,12 @@ import bertviz -import weave -from weave.legacy.weave.ecosystem import huggingface +import weave_query as weave +import weave_query +from weave_query.ecosystem import huggingface @weave.op() -def head_view(attention: huggingface.ModelOutputAttention) -> weave.legacy.weave.ops.Html: +def head_view(attention: huggingface.ModelOutputAttention) -> weave_query.ops.Html: # All the information we need is attached to the ModelOutputAttention object. # This is important. In Weave, types should "stand alone", meaning they should # contain references to any information that is necessary for their use. @@ -27,7 +28,7 @@ def head_view(attention: huggingface.ModelOutputAttention) -> weave.legacy.weave # The .data attribute contains the html string. Wrap it in the weave Html type. # TODO: this would read better as weave.types.Html I think. - return weave.legacy.weave.ops.Html(html.data) + return weave_query.ops.Html(html.data) @weave.type() @@ -37,18 +38,18 @@ class BertvizHeadView(weave.Panel): input_node: weave.Node[huggingface.ModelOutputAttention] @weave.op() - def render(self) -> weave.legacy.weave.panels.PanelHtml: + def render(self) -> weave_query.panels.PanelHtml: # This is a lazy call! It doesn't execute anything html = head_view(self.input_node) # We add the lazy call as input to the returned Html panel. Nothing has been # computed so far. The UI's Html panel will perform a useNodeValue operation on its # input node. Only then will the head_view function finally be called. - return weave.legacy.weave.panels.PanelHtml(html) + return weave_query.panels.PanelHtml(html) @weave.op() -def model_view(attention: huggingface.ModelOutputAttention) -> weave.legacy.weave.ops.Html: +def model_view(attention: huggingface.ModelOutputAttention) -> weave_query.ops.Html: # Parallels head_view() to visualize the full matrix of attention heads as rows # and layers as columns for each attention map @@ -61,7 +62,7 @@ def model_view(attention: huggingface.ModelOutputAttention) -> weave.legacy.weav html = bertviz.model_view(attention._attention, tokens, html_action="return") # TODO: this would read better as weave.types.Html I think. - return weave.legacy.weave.ops.Html(html.data) + return weave_query.ops.Html(html.data) @weave.type() @@ -71,6 +72,6 @@ class BertvizModelView(weave.Panel): input_node: weave.Node[huggingface.ModelOutputAttention] @weave.op() - def model_view_panel_render(self) -> weave.legacy.weave.panels.PanelHtml: + def model_view_panel_render(self) -> weave_query.panels.PanelHtml: html = model_view(self.input_node) - return weave.legacy.weave.panels.PanelHtml(html) + return weave_query.panels.PanelHtml(html) diff --git a/weave_query/weave_query/ecosystem/craiyon/__init__.py b/weave_query/weave_query/ecosystem/craiyon/__init__.py new file mode 100644 index 00000000000..bd9a8fe455f --- /dev/null +++ b/weave_query/weave_query/ecosystem/craiyon/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.craiyon.ops import * diff --git a/weave/legacy/weave/ecosystem/craiyon/ops.py b/weave_query/weave_query/ecosystem/craiyon/ops.py similarity index 93% rename from weave/legacy/weave/ecosystem/craiyon/ops.py rename to weave_query/weave_query/ecosystem/craiyon/ops.py index d6ba0c9ad97..88b7dca8154 100644 --- a/weave/legacy/weave/ecosystem/craiyon/ops.py +++ b/weave_query/weave_query/ecosystem/craiyon/ops.py @@ -2,7 +2,8 @@ import io import requests from PIL import Image -import weave +import weave_query as weave +import weave_query class ServiceError(Exception): diff --git a/weave/legacy/weave/ecosystem/umap/__init__.py b/weave_query/weave_query/ecosystem/example/__init__.py similarity index 74% rename from weave/legacy/weave/ecosystem/umap/__init__.py rename to weave_query/weave_query/ecosystem/example/__init__.py index e3feb039824..939878dcab8 100644 --- a/weave/legacy/weave/ecosystem/umap/__init__.py +++ b/weave_query/weave_query/ecosystem/example/__init__.py @@ -2,13 +2,13 @@ import logging -from weave.legacy.weave import context_state +from weave_query import context_state logging.getLogger("ecosystem_example").setLevel(logging.ERROR) loading_builtins_token = context_state.set_loading_built_ins() try: - from weave.legacy.weave.ecosystem.umap.ops import * + from weave_query.ecosystem.example import ops finally: context_state.clear_loading_built_ins(loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/example/ops.py b/weave_query/weave_query/ecosystem/example/ops.py similarity index 76% rename from weave/legacy/weave/ecosystem/example/ops.py rename to weave_query/weave_query/ecosystem/example/ops.py index 55b407d2fe1..4c31f029e27 100644 --- a/weave/legacy/weave/ecosystem/example/ops.py +++ b/weave_query/weave_query/ecosystem/example/ops.py @@ -1,6 +1,7 @@ # Put your types, ops and panels here. -import weave +import weave_query as weave +import weave_query @weave.op() diff --git a/weave/legacy/weave/ecosystem/example/__init__.py b/weave_query/weave_query/ecosystem/hdbscan/__init__.py similarity index 73% rename from weave/legacy/weave/ecosystem/example/__init__.py rename to weave_query/weave_query/ecosystem/hdbscan/__init__.py index 2ae52ad30e0..5c08037d370 100644 --- a/weave/legacy/weave/ecosystem/example/__init__.py +++ b/weave_query/weave_query/ecosystem/hdbscan/__init__.py @@ -2,13 +2,13 @@ import logging -from weave.legacy.weave import context_state +from weave_query import context_state logging.getLogger("ecosystem_example").setLevel(logging.ERROR) loading_builtins_token = context_state.set_loading_built_ins() try: - from weave.legacy.weave.ecosystem.example import ops + from weave_query.ecosystem.hdbscan.ops import * finally: context_state.clear_loading_built_ins(loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/hdbscan/ops.py b/weave_query/weave_query/ecosystem/hdbscan/ops.py similarity index 90% rename from weave/legacy/weave/ecosystem/hdbscan/ops.py rename to weave_query/weave_query/ecosystem/hdbscan/ops.py index e12213661a9..52db6821eed 100644 --- a/weave/legacy/weave/ecosystem/hdbscan/ops.py +++ b/weave_query/weave_query/ecosystem/hdbscan/ops.py @@ -9,8 +9,9 @@ TypedDict, ) -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow class HDBSCANOptions(TypedDict): diff --git a/weave_query/weave_query/ecosystem/huggingface/__init__.py b/weave_query/weave_query/ecosystem/huggingface/__init__.py new file mode 100644 index 00000000000..47c297b8f04 --- /dev/null +++ b/weave_query/weave_query/ecosystem/huggingface/__init__.py @@ -0,0 +1,12 @@ +from weave_query import context_state as _context + +_loading_builtins_token = _context.set_loading_built_ins() + +from weave_query.ecosystem.huggingface.hfmodel import ModelOutputAttention +from weave_query.ecosystem.huggingface.huggingface_datasets import * +from weave_query.ecosystem.huggingface.huggingface_models import * +from weave_query.ecosystem.huggingface.model_textclassification import ( + FullTextClassificationPipelineOutput, +) + +_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/huggingface/hfmodel.py b/weave_query/weave_query/ecosystem/huggingface/hfmodel.py similarity index 95% rename from weave/legacy/weave/ecosystem/huggingface/hfmodel.py rename to weave_query/weave_query/ecosystem/huggingface/hfmodel.py index 7a521299a8e..ea799639d56 100644 --- a/weave/legacy/weave/ecosystem/huggingface/hfmodel.py +++ b/weave_query/weave_query/ecosystem/huggingface/hfmodel.py @@ -6,9 +6,10 @@ import torch import transformers -import weave -from weave.legacy.weave import op_def_type -from weave.legacy.weave.ecosystem import pytorch +import weave_query as weave +import weave_query +from weave_query import op_def_type +from weave_query.ecosystem import pytorch # This tells Weave how to serialize BaseModelOutput @@ -72,7 +73,7 @@ def tokenizer(self): return transformers.AutoTokenizer.from_pretrained(self._id) @weave.op() - def readme(self) -> weave.legacy.weave.ops.Markdown: + def readme(self) -> weave_query.ops.Markdown: readme = huggingface_hub.hf_hub_download(self._id, "README.md") # quick hack: remove the metadata header from the readme readme_contents = "" @@ -85,7 +86,7 @@ def readme(self) -> weave.legacy.weave.ops.Markdown: # if we failed to parse out the header if len(readme_contents) < 1: readme_contents = open(readme).read() - return weave.legacy.weave.ops.Markdown(readme_contents) + return weave_query.ops.Markdown(readme_contents) @weave.op() def id(self) -> str: diff --git a/weave/legacy/weave/ecosystem/huggingface/huggingface_datasets.py b/weave_query/weave_query/ecosystem/huggingface/huggingface_datasets.py similarity index 96% rename from weave/legacy/weave/ecosystem/huggingface/huggingface_datasets.py rename to weave_query/weave_query/ecosystem/huggingface/huggingface_datasets.py index f29bf154d78..22294d39a67 100644 --- a/weave/legacy/weave/ecosystem/huggingface/huggingface_datasets.py +++ b/weave_query/weave_query/ecosystem/huggingface/huggingface_datasets.py @@ -3,7 +3,8 @@ import datasets import huggingface_hub -import weave +import weave_query as weave +import weave_query class HFDatasetInfoTypedDict(typing.TypedDict): @@ -41,7 +42,7 @@ def hf_feature_type_to_type(type_): elif isinstance(type_, datasets.features.features.Sequence): return weave.types.List(hf_feature_type_to_type(type_.feature)) elif isinstance(type_, datasets.features.features.Image): - return weave.legacy.weave.ops.PILImageType() + return weave_query.ops.PILImageType() elif isinstance(type_, datasets.features.features.ClassLabel): # TODO: this should be a classes type!!!!! return weave.types.Int() diff --git a/weave/legacy/weave/ecosystem/huggingface/huggingface_models.py b/weave_query/weave_query/ecosystem/huggingface/huggingface_models.py similarity index 77% rename from weave/legacy/weave/ecosystem/huggingface/huggingface_models.py rename to weave_query/weave_query/ecosystem/huggingface/huggingface_models.py index 8fa4865628b..8974df5f8eb 100644 --- a/weave/legacy/weave/ecosystem/huggingface/huggingface_models.py +++ b/weave_query/weave_query/ecosystem/huggingface/huggingface_models.py @@ -6,9 +6,10 @@ import torch import transformers -import weave -from weave.legacy.weave.ecosystem import pytorch -from weave.legacy.weave.ecosystem.huggingface import ( +import weave_query as weave +import weave_query +from weave_query.ecosystem import pytorch +from weave_query.ecosystem.huggingface import ( hfmodel, model_textclassification, model_textgeneration, @@ -40,11 +41,11 @@ class HuggingfaceModelsPanel(weave.Panel): input_node: weave.Node[list[hfmodel.HFModel]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( + def render(self) -> weave_query.panels.Table: + return weave_query.panels.Table( self.input_node, columns=[ - lambda model_row: weave.legacy.weave.panels.WeaveLink( + lambda model_row: weave_query.panels.WeaveLink( model_row.id(), to=lambda input: huggingface().model(input), # type: ignore ), @@ -64,24 +65,24 @@ class HuggingfaceModelPanel(weave.Panel): input_node: weave.Node[hfmodel.HFModel] @weave.op(pure=False) - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: model = typing.cast(hfmodel.HFModel, self.input_node) - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=model.id(), subtitle="HuggingFace Hub Model", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Model Card", - content=weave.legacy.weave.panels.PanelMarkdown(model.readme()), # type: ignore + content=weave_query.panels.PanelMarkdown(model.readme()), # type: ignore ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Metadata", - content=weave.legacy.weave.panels.Group( + content=weave_query.panels.Group( items={ - "id": weave.legacy.weave.panels.LabeledItem( + "id": weave_query.panels.LabeledItem( item=model.id(), label="ID" ), - "pipeline_tag": weave.legacy.weave.panels.LabeledItem( + "pipeline_tag": weave_query.panels.LabeledItem( item=model.pipeline_tag(), label="Pipeline tag" ), } @@ -89,10 +90,10 @@ def render(self) -> weave.legacy.weave.panels.Card: ), # Broke in panel refactor. Don't have concrete op name available here so # can't get the right type for the output. - # weave.legacy.weave.panels.CardTab( + # weave_query.panels.CardTab( # name="Inference Logs", - # content=weave.legacy.weave.panels.Table( - # weave.legacy.weave.ops.used_by(model, model.call.op_name()), + # content=weave_query.panels.Table( + # weave_query.ops.used_by(model, model.call.op_name()), # columns=[ # lambda run: run.output.model_input, # lambda run: run.output.model_output[0]["generated_text"], @@ -141,12 +142,12 @@ class HuggingfacePackagePanel(weave.Panel): input_node: weave.Node[HuggingFacePackage] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: pack = typing.cast(HuggingFacePackage, self.input_node) # type: ignore - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title="Huggingface Package", subtitle="Browse Models and Datasets", content=[ - weave.legacy.weave.panels.CardTab(name="Models", content=pack.models()), # type: ignore + weave_query.panels.CardTab(name="Models", content=pack.models()), # type: ignore ], ) diff --git a/weave/legacy/weave/ecosystem/huggingface/model_textclassification.py b/weave_query/weave_query/ecosystem/huggingface/model_textclassification.py similarity index 89% rename from weave/legacy/weave/ecosystem/huggingface/model_textclassification.py rename to weave_query/weave_query/ecosystem/huggingface/model_textclassification.py index 4101b36849e..344d727867e 100644 --- a/weave/legacy/weave/ecosystem/huggingface/model_textclassification.py +++ b/weave_query/weave_query/ecosystem/huggingface/model_textclassification.py @@ -3,8 +3,9 @@ import transformers -import weave -from weave.legacy.weave.ecosystem.huggingface import hfmodel +import weave_query as weave +import weave_query +from weave_query.ecosystem.huggingface import hfmodel # We have to forward-declare the Weave types to avoid circular reference # issues that weave.type() can't resolve yet. @@ -70,13 +71,13 @@ class ClassificationResultPanel(weave.Panel): input_node: weave.Node[list[ClassificationResult]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: - from weave.legacy.weave.ecosystem.huggingface.huggingface_models import huggingface + def render(self) -> weave_query.panels.Table: + from weave_query.ecosystem.huggingface.huggingface_models import huggingface - return weave.legacy.weave.panels.Table( + return weave_query.panels.Table( self.input_node, columns=[ - lambda result_row: weave.legacy.weave.panels.WeaveLink( + lambda result_row: weave_query.panels.WeaveLink( result_row.model_name(), to=lambda input: huggingface().model(input), # type: ignore ), @@ -115,17 +116,17 @@ class FullTextClassificationResultPanel(weave.Panel): input_node: weave.Node[FullTextClassificationPipelineOutput] @weave.op() - def render(self) -> weave.legacy.weave.panels.Group: + def render(self) -> weave_query.panels.Group: output = typing.cast(FullTextClassificationPipelineOutput, self.input_node) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( preferHorizontal=True, items={ - "input": weave.legacy.weave.panels.LabeledItem( + "input": weave_query.panels.LabeledItem( label="input", item=output.model_input ), - "output": weave.legacy.weave.panels.LabeledItem( + "output": weave_query.panels.LabeledItem( label="output", - item=weave.legacy.weave.panels.Plot( + item=weave_query.panels.Plot( input_node=typing.cast(weave.Node, output.model_output), x=lambda class_score: class_score["score"], y=lambda class_score: class_score["label"], diff --git a/weave/legacy/weave/ecosystem/huggingface/model_textgeneration.py b/weave_query/weave_query/ecosystem/huggingface/model_textgeneration.py similarity index 91% rename from weave/legacy/weave/ecosystem/huggingface/model_textgeneration.py rename to weave_query/weave_query/ecosystem/huggingface/model_textgeneration.py index a422e88f1c2..7ac83568b5b 100644 --- a/weave/legacy/weave/ecosystem/huggingface/model_textgeneration.py +++ b/weave_query/weave_query/ecosystem/huggingface/model_textgeneration.py @@ -3,8 +3,9 @@ import transformers -import weave -from weave.legacy.weave.ecosystem.huggingface import hfmodel +import weave_query as weave +import weave_query +from weave_query.ecosystem.huggingface import hfmodel # We have to forward-declare the Weave types to avoid circular reference # issues that weave.type() can't resolve yet. @@ -50,15 +51,15 @@ class FullTextGenerationPanel(weave.Panel): input_node: weave.Node[FullTextGenerationPipelineOutput] @weave.op() - def render(self) -> weave.legacy.weave.panels.Group: + def render(self) -> weave_query.panels.Group: output = typing.cast(FullTextGenerationPipelineOutput, self.input_node) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( preferHorizontal=True, items={ - "input": weave.legacy.weave.panels.LabeledItem( + "input": weave_query.panels.LabeledItem( label="input", item=output.model_input ), - "output": weave.legacy.weave.panels.LabeledItem( + "output": weave_query.panels.LabeledItem( label="output", item=output.model_output ), }, diff --git a/weave/legacy/weave/ecosystem/keras/__init__.py b/weave_query/weave_query/ecosystem/keras/__init__.py similarity index 51% rename from weave/legacy/weave/ecosystem/keras/__init__.py rename to weave_query/weave_query/ecosystem/keras/__init__.py index c27c01c5e63..41e68b5af2d 100644 --- a/weave/legacy/weave/ecosystem/keras/__init__.py +++ b/weave_query/weave_query/ecosystem/keras/__init__.py @@ -1,6 +1,6 @@ -from weave.legacy.weave import context_state as _context +from weave_query import context_state as _context _loading_builtins_token = _context.set_loading_built_ins() -from weave.legacy.weave.ecosystem.keras.model import * +from weave_query.ecosystem.keras.model import * _context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/keras/model.py b/weave_query/weave_query/ecosystem/keras/model.py similarity index 99% rename from weave/legacy/weave/ecosystem/keras/model.py rename to weave_query/weave_query/ecosystem/keras/model.py index 455b1f50ef8..16bdbe77b01 100644 --- a/weave/legacy/weave/ecosystem/keras/model.py +++ b/weave_query/weave_query/ecosystem/keras/model.py @@ -27,7 +27,8 @@ from keras.engine import keras_tensor from tensorflow.python.framework import dtypes -import weave +import weave_query as weave +import weave_query class DTYPE_NAME(Enum): diff --git a/weave/legacy/weave/ecosystem/langchain/__init__.py b/weave_query/weave_query/ecosystem/langchain/__init__.py similarity index 67% rename from weave/legacy/weave/ecosystem/langchain/__init__.py rename to weave_query/weave_query/ecosystem/langchain/__init__.py index 104095d21f5..58f5f2855e6 100644 --- a/weave/legacy/weave/ecosystem/langchain/__init__.py +++ b/weave_query/weave_query/ecosystem/langchain/__init__.py @@ -1,12 +1,12 @@ import logging -from weave.legacy.weave import context_state +from weave_query import context_state logging.getLogger("langchain").setLevel(logging.ERROR) loading_builtins_token = context_state.set_loading_built_ins() try: - from weave.legacy.weave.ecosystem.langchain.lc import * + from weave_query.ecosystem.langchain.lc import * finally: context_state.clear_loading_built_ins(loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/langchain/lc.py b/weave_query/weave_query/ecosystem/langchain/lc.py similarity index 98% rename from weave/legacy/weave/ecosystem/langchain/lc.py rename to weave_query/weave_query/ecosystem/langchain/lc.py index 51fc011c7fb..7de8887c3c6 100644 --- a/weave/legacy/weave/ecosystem/langchain/lc.py +++ b/weave_query/weave_query/ecosystem/langchain/lc.py @@ -40,13 +40,14 @@ from langchain.vectorstores import FAISS, VectorStore from langchain.vectorstores.base import VectorStoreRetriever -import weave -from weave.legacy.weave import storage -from weave.legacy.weave import artifact_base -from weave.legacy.weave.artifact_fs import FilesystemArtifact -from weave.legacy.weave.ecosystem.langchain import util -from weave.legacy.weave.ops_domain import trace_tree -from weave.legacy.weave.weave_types import Type +import weave_query as weave +import weave_query +from weave_query import storage +from weave_query import artifact_base +from weave_query.artifact_fs import FilesystemArtifact +from weave_query.ecosystem.langchain import util +from weave_query.ops_domain import trace_tree +from weave_query.weave_types import Type class WeaveTracer(BaseTracer): diff --git a/weave/legacy/weave/ecosystem/langchain/util.py b/weave_query/weave_query/ecosystem/langchain/util.py similarity index 99% rename from weave/legacy/weave/ecosystem/langchain/util.py rename to weave_query/weave_query/ecosystem/langchain/util.py index b25b592f398..9ba8c23ce66 100644 --- a/weave/legacy/weave/ecosystem/langchain/util.py +++ b/weave_query/weave_query/ecosystem/langchain/util.py @@ -13,7 +13,7 @@ from langchain.callbacks.tracers.schemas import Run, RunTypeEnum -from weave.legacy.weave.ops_domain import trace_tree +from weave_query.ops_domain import trace_tree if TYPE_CHECKING: from langchain.chains.base import Chain diff --git a/weave_query/weave_query/ecosystem/lens/__init__.py b/weave_query/weave_query/ecosystem/lens/__init__.py new file mode 100644 index 00000000000..5710e5934be --- /dev/null +++ b/weave_query/weave_query/ecosystem/lens/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.lens.lens import * diff --git a/weave/legacy/weave/ecosystem/lens/lens.py b/weave_query/weave_query/ecosystem/lens/lens.py similarity index 98% rename from weave/legacy/weave/ecosystem/lens/lens.py rename to weave_query/weave_query/ecosystem/lens/lens.py index 5b2948954d7..d495d0e0d29 100644 --- a/weave/legacy/weave/ecosystem/lens/lens.py +++ b/weave_query/weave_query/ecosystem/lens/lens.py @@ -3,7 +3,8 @@ import matplotlib.pyplot as plt import io from PIL import Image -import weave +import weave_query as weave +import weave_query matplotlib.use("agg") diff --git a/weave_query/weave_query/ecosystem/py/__init__.py b/weave_query/weave_query/ecosystem/py/__init__.py new file mode 100644 index 00000000000..58c34e7d4a2 --- /dev/null +++ b/weave_query/weave_query/ecosystem/py/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.py import pydoc diff --git a/weave/legacy/weave/ecosystem/py/pydoc.py b/weave_query/weave_query/ecosystem/py/pydoc.py similarity index 75% rename from weave/legacy/weave/ecosystem/py/pydoc.py rename to weave_query/weave_query/ecosystem/py/pydoc.py index e558f42a5e5..c53c8ed15dd 100644 --- a/weave/legacy/weave/ecosystem/py/pydoc.py +++ b/weave_query/weave_query/ecosystem/py/pydoc.py @@ -10,7 +10,8 @@ import inspect import types -import weave +import weave_query as weave +import weave_query class PyModule(weave.types.Type): @@ -51,8 +52,8 @@ def module_name(module: types.ModuleType) -> str: @weave.op() -def module_doc(module: types.ModuleType) -> weave.legacy.weave.ops.Markdown: - return weave.legacy.weave.ops.Markdown(module.__doc__ or "") +def module_doc(module: types.ModuleType) -> weave_query.ops.Markdown: + return weave_query.ops.Markdown(module.__doc__ or "") @weave.op() @@ -93,8 +94,8 @@ def pyclass_module(pyclass: type) -> types.ModuleType: @weave.op() -def pyclass_doc(pyclass: type) -> weave.legacy.weave.ops.Markdown: - return weave.legacy.weave.ops.Markdown(pyclass.__doc__ or "") +def pyclass_doc(pyclass: type) -> weave_query.ops.Markdown: + return weave_query.ops.Markdown(pyclass.__doc__ or "") @weave.op() @@ -126,8 +127,8 @@ def function_name(pyfunction: types.FunctionType) -> str: @weave.op() -def function_doc(pyfunction: types.FunctionType) -> weave.legacy.weave.ops.Markdown: - return weave.legacy.weave.ops.Markdown(pyfunction.__doc__ or "") +def function_doc(pyfunction: types.FunctionType) -> weave_query.ops.Markdown: + return weave_query.ops.Markdown(pyfunction.__doc__ or "") @weave.type() @@ -136,34 +137,34 @@ class ModulePanel(weave.Panel): input_node: weave.Node[types.ModuleType] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: module = self.input_node - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=module.module_name(), # type: ignore subtitle="python module", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Description", - content=weave.legacy.weave.panels.PanelMarkdown(module.module_doc()), # type: ignore + content=weave_query.panels.PanelMarkdown(module.module_doc()), # type: ignore ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Classes", - content=weave.legacy.weave.panels.Table( + content=weave_query.panels.Table( module.module_classes(), # type: ignore columns=[ - lambda c: weave.legacy.weave.panels.WeaveLink( + lambda c: weave_query.panels.WeaveLink( c.class_name(), to=lambda inp: module.module_class(inp), # type: ignore ) ], ), ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Functions", - content=weave.legacy.weave.panels.Table( + content=weave_query.panels.Table( module.module_functions(), # type: ignore columns=[ - lambda c: weave.legacy.weave.panels.WeaveLink( + lambda c: weave_query.panels.WeaveLink( c.function_name(), to=lambda inp: module.module_function(inp), # type: ignore ) @@ -180,22 +181,22 @@ class ClassPanel(weave.Panel): input_node: weave.Node[type] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: cls = self.input_node - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=cls.class_name(), # type: ignore subtitle="python class", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Description", - content=weave.legacy.weave.panels.PanelMarkdown(cls.pyclass_doc()), # type: ignore + content=weave_query.panels.PanelMarkdown(cls.pyclass_doc()), # type: ignore ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Methods", - content=weave.legacy.weave.panels.Table( + content=weave_query.panels.Table( cls.class_methods(), # type: ignore columns=[ - lambda m: weave.legacy.weave.panels.WeaveLink( + lambda m: weave_query.panels.WeaveLink( m.function_name(), to=lambda inp: cls.class_method(inp), # type: ignore ) @@ -212,15 +213,15 @@ class FunctionPanel(weave.Panel): input_node: weave.Node[types.FunctionType] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: func = self.input_node - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=func.function_name(), # type: ignore subtitle="python function", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Description", - content=weave.legacy.weave.panels.PanelMarkdown(func.function_doc()), # type: ignore + content=weave_query.panels.PanelMarkdown(func.function_doc()), # type: ignore ), ], ) diff --git a/weave_query/weave_query/ecosystem/pytorch/__init__.py b/weave_query/weave_query/ecosystem/pytorch/__init__.py new file mode 100644 index 00000000000..b3e91b503a8 --- /dev/null +++ b/weave_query/weave_query/ecosystem/pytorch/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.pytorch.model import * diff --git a/weave/legacy/weave/ecosystem/pytorch/model.py b/weave_query/weave_query/ecosystem/pytorch/model.py similarity index 94% rename from weave/legacy/weave/ecosystem/pytorch/model.py rename to weave_query/weave_query/ecosystem/pytorch/model.py index 92bb76be2af..efb095b709f 100644 --- a/weave/legacy/weave/ecosystem/pytorch/model.py +++ b/weave_query/weave_query/ecosystem/pytorch/model.py @@ -1,5 +1,6 @@ import torch -import weave +import weave_query as weave +import weave_query class TorchTensorType(weave.types.Type): diff --git a/weave/legacy/weave/ecosystem/replicate/__init__.py b/weave_query/weave_query/ecosystem/replicate/__init__.py similarity index 57% rename from weave/legacy/weave/ecosystem/replicate/__init__.py rename to weave_query/weave_query/ecosystem/replicate/__init__.py index f957e5b171a..40ead3adf68 100644 --- a/weave/legacy/weave/ecosystem/replicate/__init__.py +++ b/weave_query/weave_query/ecosystem/replicate/__init__.py @@ -1,8 +1,8 @@ -from weave.legacy.weave import context_state +from weave_query import context_state loading_builtins_token = context_state.set_loading_built_ins() try: - from weave.legacy.weave.ecosystem.replicate.rep import * + from weave_query.ecosystem.replicate.rep import * finally: context_state.clear_loading_built_ins(loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/replicate/rep.py b/weave_query/weave_query/ecosystem/replicate/rep.py similarity index 97% rename from weave/legacy/weave/ecosystem/replicate/rep.py rename to weave_query/weave_query/ecosystem/replicate/rep.py index 1d98ab26103..d578fc4a929 100644 --- a/weave/legacy/weave/ecosystem/replicate/rep.py +++ b/weave_query/weave_query/ecosystem/replicate/rep.py @@ -1,7 +1,8 @@ import replicate import os import tempfile -import weave +import weave_query as weave +import weave_query from PIL import Image diff --git a/weave/legacy/weave/ecosystem/root.py b/weave_query/weave_query/ecosystem/root.py similarity index 96% rename from weave/legacy/weave/ecosystem/root.py rename to weave_query/weave_query/ecosystem/root.py index 38fac4b03d4..0593f6cbe17 100644 --- a/weave/legacy/weave/ecosystem/root.py +++ b/weave_query/weave_query/ecosystem/root.py @@ -1,9 +1,9 @@ import typing -from weave.legacy.weave import api as weave +from weave_query import api as weave # TODO: Fix, these should be available from weave -from weave.legacy.weave import context_state, op_def, ops, panel, panels +from weave_query import context_state, op_def, ops, panel, panels loading_builtins_token = context_state.set_loading_built_ins() @@ -22,7 +22,7 @@ """ ) -from weave.legacy.weave import registry_mem +from weave_query import registry_mem op_org_name = registry_mem.memory_registry.get_op("user-name") @@ -63,7 +63,7 @@ def ops(self) -> list[op_def.OpDef]: # objects. @weave.op(name="op-ecosystem", render_info={"type": "function"}) def ecosystem() -> Ecosystem: - from weave.legacy.weave import registry_mem + from weave_query import registry_mem return Ecosystem( _orgs=[], diff --git a/weave/legacy/weave/ecosystem/scenario/__init__.py b/weave_query/weave_query/ecosystem/scenario/__init__.py similarity index 78% rename from weave/legacy/weave/ecosystem/scenario/__init__.py rename to weave_query/weave_query/ecosystem/scenario/__init__.py index d747eae19c6..a8a879fa91e 100644 --- a/weave/legacy/weave/ecosystem/scenario/__init__.py +++ b/weave_query/weave_query/ecosystem/scenario/__init__.py @@ -1,8 +1,9 @@ import typing -import weave -import weave.legacy.weave -from weave.legacy.weave import val_const +import weave_query as weave +import weave_query +import weave_query +from weave_query import val_const class ScenarioResult(typing.TypedDict): @@ -26,14 +27,14 @@ class MetricsBankPanel(weave.Panel): input_node: weave.Node[MetricsBankInput] @weave.op() - def render(self) -> weave.legacy.weave.panels.Each: + def render(self) -> weave_query.panels.Each: input = typing.cast(MetricsBankInput, self.input_node) baseline = input["baseline"] candidate = input["candidate"] - joined = weave.legacy.weave.ops.join_all( - weave.legacy.weave.ops.make_list(l0=baseline, l1=candidate), + joined = weave_query.ops.join_all( + weave_query.ops.make_list(l0=baseline, l1=candidate), lambda row: row["scenario_id"], False, ) @@ -42,17 +43,17 @@ def render(self) -> weave.legacy.weave.panels.Each: joined_keys = joined[0].keys() # The output type of difference is List["metric1" | "metric2" | "metric3"] - metrics = weave.legacy.weave.ops.difference( + metrics = weave_query.ops.difference( joined_keys, [val_const.const("scenario_id")] ) # TODO: broken - return weave.legacy.weave.panels.Each( + return weave_query.panels.Each( metrics, - render=lambda metric_name: weave.legacy.weave.panels.Group( + render=lambda metric_name: weave_query.panels.Group( items={ "title": metric_name, - "plot": weave.legacy.weave.panels.Plot( + "plot": weave_query.panels.Plot( joined, # TODO: bring this back # title=metric_name, diff --git a/weave/legacy/weave/ecosystem/shap/__init__.py b/weave_query/weave_query/ecosystem/shap/__init__.py similarity index 52% rename from weave/legacy/weave/ecosystem/shap/__init__.py rename to weave_query/weave_query/ecosystem/shap/__init__.py index a22de778e34..fe98ddd055a 100644 --- a/weave/legacy/weave/ecosystem/shap/__init__.py +++ b/weave_query/weave_query/ecosystem/shap/__init__.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import context_state as _context +from weave_query import context_state as _context _loading_builtins_token = _context.set_loading_built_ins() -from weave.legacy.weave.ecosystem.shap.shap import * +from weave_query.ecosystem.shap.shap import * _context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/shap/shap.py b/weave_query/weave_query/ecosystem/shap/shap.py similarity index 82% rename from weave/legacy/weave/ecosystem/shap/shap.py rename to weave_query/weave_query/ecosystem/shap/shap.py index 812fcaaf918..e6ff056b145 100644 --- a/weave/legacy/weave/ecosystem/shap/shap.py +++ b/weave_query/weave_query/ecosystem/shap/shap.py @@ -12,9 +12,10 @@ import shap import xgboost -import weave -from weave.legacy.weave.ecosystem import huggingface as hf -from weave.legacy.weave.ecosystem import xgboost as weave_xgb +import weave_query as weave +import weave_query +from weave_query.ecosystem import huggingface as hf +from weave_query.ecosystem import xgboost as weave_xgb @weave.op( @@ -42,7 +43,7 @@ def summary_plot(self): path = "/tmp/shap-%s.png" % random.randrange(0, 1000000) plt.savefig(path) plt.close() - return weave.legacy.weave.ops.LocalFile(path) + return weave_query.ops.LocalFile(path) class ShapExplanationType(weave.types.Type): @@ -76,9 +77,9 @@ def shap_explain( @weave.op() -def shap_plot_text(shap_values: shap.Explanation) -> weave.legacy.weave.ops.Html: +def shap_plot_text(shap_values: shap.Explanation) -> weave_query.ops.Html: html = shap.plots.text(shap_values, display=False) - return weave.legacy.weave.ops.Html(html) + return weave_query.ops.Html(html) @weave.type() @@ -87,5 +88,5 @@ class ShapPlotText(weave.Panel): input_node: weave.Node[shap.Explanation] @weave.op() - def render(self) -> weave.legacy.weave.panels.PanelHtml: - return weave.legacy.weave.panels.PanelHtml(shap_plot_text(self.input_node)) + def render(self) -> weave_query.panels.PanelHtml: + return weave_query.panels.PanelHtml(shap_plot_text(self.input_node)) diff --git a/weave/legacy/weave/ecosystem/spacy/__init__.py b/weave_query/weave_query/ecosystem/shawn/__init__.py similarity index 51% rename from weave/legacy/weave/ecosystem/spacy/__init__.py rename to weave_query/weave_query/ecosystem/shawn/__init__.py index b0e2199ab0e..24797c290f0 100644 --- a/weave/legacy/weave/ecosystem/spacy/__init__.py +++ b/weave_query/weave_query/ecosystem/shawn/__init__.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import context_state as _context +from weave_query import context_state as _context _loading_builtins_token = _context.set_loading_built_ins() -from weave.legacy.weave.ecosystem.spacy.spacy import * +from weave_query.ecosystem.shawn import petdataset, scratch _context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/shawn/petdataset.py b/weave_query/weave_query/ecosystem/shawn/petdataset.py similarity index 95% rename from weave/legacy/weave/ecosystem/shawn/petdataset.py rename to weave_query/weave_query/ecosystem/shawn/petdataset.py index 9c5b85b66fb..317f15fad6b 100644 --- a/weave/legacy/weave/ecosystem/shawn/petdataset.py +++ b/weave_query/weave_query/ecosystem/shawn/petdataset.py @@ -3,7 +3,8 @@ import PIL -import weave +import weave_query as weave +import weave_query class OxfordIIITPetDatasetItem(typing.TypedDict): @@ -71,8 +72,8 @@ class PetDatasetPanel(weave.Panel): input_node: weave.Node[list[OxfordIIITPetDatasetItem]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( + def render(self) -> weave_query.panels.Table: + return weave_query.panels.Table( self.input_node, columns=[ lambda item: item["id"], diff --git a/weave/legacy/weave/ecosystem/shawn/scratch.py b/weave_query/weave_query/ecosystem/shawn/scratch.py similarity index 68% rename from weave/legacy/weave/ecosystem/shawn/scratch.py rename to weave_query/weave_query/ecosystem/shawn/scratch.py index 01614229fa4..ec9b5501379 100644 --- a/weave/legacy/weave/ecosystem/shawn/scratch.py +++ b/weave_query/weave_query/ecosystem/shawn/scratch.py @@ -1,18 +1,19 @@ import dataclasses import typing -import weave -from weave.legacy.weave import panel, panel_util +import weave_query as weave +import weave_query +from weave_query import panel, panel_util @weave.op() def single_distribution( input_node: weave.Node[list[float]], -) -> weave.legacy.weave.panels.Plot: +) -> weave_query.panels.Plot: binned = input_node.groupby(lambda v: round(v * 10) / 10).map( # type: ignore - lambda group: weave.legacy.weave.ops.dict_(value=group.key(), count=group.count()) + lambda group: weave_query.ops.dict_(value=group.key(), count=group.count()) ) - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( binned, x=lambda row: row["value"], y=lambda row: row["count"], @@ -23,7 +24,7 @@ def single_distribution( @weave.type() class AdderConfig: operand: weave.Node[int] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.ConstNode(weave.types.Int(), 10) + default_factory=lambda: weave_query.graph.ConstNode(weave.types.Int(), 10) ) @@ -42,14 +43,14 @@ def adder_default_config(config: typing.Optional[AdderConfig]) -> AdderConfig: @weave.op() def adder_config( input_node: weave.Node[int], config: AdderConfig -) -> weave.legacy.weave.panels.LabeledItem: +) -> weave_query.panels.LabeledItem: input_val = typing.cast(int, input_node) config = adder_default_config(config) - return weave.legacy.weave.panels.LabeledItem( + return weave_query.panels.LabeledItem( label="operand", - item=weave.legacy.weave.panels.Slider( - config=weave.legacy.weave.panels.SliderConfig( - weave.legacy.weave.ops.execute(config.operand) + item=weave_query.panels.Slider( + config=weave_query.panels.SliderConfig( + weave_query.ops.execute(config.operand) ) ), ) @@ -58,10 +59,10 @@ def adder_config( @weave.op() def adder( input_node: weave.Node[int], config: AdderConfig -) -> weave.legacy.weave.panels.LabeledItem: +) -> weave_query.panels.LabeledItem: input_val = typing.cast(int, input_node) config = adder_default_config(config) - return weave.legacy.weave.panels.LabeledItem(label="output", item=input_val + config.operand) # type: ignore + return weave_query.panels.LabeledItem(label="output", item=input_val + config.operand) # type: ignore @weave.type() diff --git a/weave_query/weave_query/ecosystem/sklearn/__init__.py b/weave_query/weave_query/ecosystem/sklearn/__init__.py new file mode 100644 index 00000000000..726a61bbbad --- /dev/null +++ b/weave_query/weave_query/ecosystem/sklearn/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.sklearn.datasets import * diff --git a/weave/legacy/weave/ecosystem/sklearn/datasets.py b/weave_query/weave_query/ecosystem/sklearn/datasets.py similarity index 74% rename from weave/legacy/weave/ecosystem/sklearn/datasets.py rename to weave_query/weave_query/ecosystem/sklearn/datasets.py index 6c5dc9e3d25..f58305d9c48 100644 --- a/weave/legacy/weave/ecosystem/sklearn/datasets.py +++ b/weave_query/weave_query/ecosystem/sklearn/datasets.py @@ -1,13 +1,14 @@ from sklearn.datasets import fetch_california_housing -import weave +import weave_query as weave +import weave_query # TODO: this should return a Weave type, not a raw dataframe @weave.op( name="shap-ca_housing_dataset", render_info={"type": "function"}, - output_type=weave.legacy.weave.ops.DataFrameType(weave.types.TypedDict({})), + output_type=weave_query.ops.DataFrameType(weave.types.TypedDict({})), ) def ca_housing_dataset(seed: int): housing = fetch_california_housing(as_frame=True) diff --git a/weave_query/weave_query/ecosystem/slack/__init__.py b/weave_query/weave_query/ecosystem/slack/__init__.py new file mode 100644 index 00000000000..a79ef9cc739 --- /dev/null +++ b/weave_query/weave_query/ecosystem/slack/__init__.py @@ -0,0 +1,2 @@ +from weave_query.ecosystem.slack.panels import * +from weave_query.ecosystem.slack.slack import * diff --git a/weave/legacy/weave/ecosystem/slack/panels.py b/weave_query/weave_query/ecosystem/slack/panels.py similarity index 72% rename from weave/legacy/weave/ecosystem/slack/panels.py rename to weave_query/weave_query/ecosystem/slack/panels.py index 41f2ee60014..8089cd5a4e3 100644 --- a/weave/legacy/weave/ecosystem/slack/panels.py +++ b/weave_query/weave_query/ecosystem/slack/panels.py @@ -1,7 +1,8 @@ import typing -import weave -from weave.legacy.weave.ecosystem.slack import slack +import weave_query as weave +import weave_query +from weave_query.ecosystem.slack import slack @weave.type() @@ -10,9 +11,9 @@ class SlackMessagesPanel(weave.Panel): input_node: weave.Node[list[slack.Message]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: + def render(self) -> weave_query.panels.Table: messages = typing.cast(list[slack.Message], self.input_node) # type: ignore - return weave.legacy.weave.panels.Table( + return weave_query.panels.Table( messages, columns=[ lambda message: message.user_id, @@ -27,8 +28,8 @@ class SlackChannelsPanel(weave.Panel): input_node: weave.Node[list[slack.Channel]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( + def render(self) -> weave_query.panels.Table: + return weave_query.panels.Table( self.input_node, columns=[ lambda channel: channel.channel_name, @@ -43,13 +44,13 @@ class SlackChannelPanel(weave.Panel): input_node: weave.Node[slack.Channel] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: + def render(self) -> weave_query.panels.Card: channel = typing.cast(slack.Channel, self.input_node) # type: ignore - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=channel.channel_name, subtitle="Slack channel", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Messages", content=SlackMessagesPanel(channel.messages()) ), ], @@ -62,13 +63,13 @@ class SlackPanel(weave.Panel): input_node: weave.Node[slack.Slack] @weave.op() - def slack_render(self) -> weave.legacy.weave.panels.Card: + def slack_render(self) -> weave_query.panels.Card: s = typing.cast(slack.Slack, self.input_node) # type: ignore - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title="Slack export data", subtitle="", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Channels", content=SlackChannelsPanel(s.channels()) ), ], diff --git a/weave/legacy/weave/ecosystem/slack/slack.py b/weave_query/weave_query/ecosystem/slack/slack.py similarity index 96% rename from weave/legacy/weave/ecosystem/slack/slack.py rename to weave_query/weave_query/ecosystem/slack/slack.py index f542dfeb021..85919929656 100644 --- a/weave/legacy/weave/ecosystem/slack/slack.py +++ b/weave_query/weave_query/ecosystem/slack/slack.py @@ -1,6 +1,7 @@ -import weave +import weave_query as weave +import weave_query from weave.file_base import Dir -from weave.legacy.weave.ecosystem.slack import slackapi_readexport +from weave_query.ecosystem.slack import slackapi_readexport @weave.type() diff --git a/weave/legacy/weave/ecosystem/slack/slackapi.py b/weave_query/weave_query/ecosystem/slack/slackapi.py similarity index 100% rename from weave/legacy/weave/ecosystem/slack/slackapi.py rename to weave_query/weave_query/ecosystem/slack/slackapi.py diff --git a/weave/legacy/weave/ecosystem/slack/slackapi_readexport.py b/weave_query/weave_query/ecosystem/slack/slackapi_readexport.py similarity index 94% rename from weave/legacy/weave/ecosystem/slack/slackapi_readexport.py rename to weave_query/weave_query/ecosystem/slack/slackapi_readexport.py index b841e1ac161..d47c1947c0f 100644 --- a/weave/legacy/weave/ecosystem/slack/slackapi_readexport.py +++ b/weave_query/weave_query/ecosystem/slack/slackapi_readexport.py @@ -1,7 +1,8 @@ import json import pathlib -import weave +import weave_query as weave +import weave_query from weave.file_base import Dir diff --git a/weave_query/weave_query/ecosystem/slurm/__init__.py b/weave_query/weave_query/ecosystem/slurm/__init__.py new file mode 100644 index 00000000000..b56af6b2085 --- /dev/null +++ b/weave_query/weave_query/ecosystem/slurm/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.slurm.ops import * diff --git a/weave/legacy/weave/ecosystem/slurm/ops.py b/weave_query/weave_query/ecosystem/slurm/ops.py similarity index 78% rename from weave/legacy/weave/ecosystem/slurm/ops.py rename to weave_query/weave_query/ecosystem/slurm/ops.py index 4bd811a348f..3aff77ad3b4 100644 --- a/weave/legacy/weave/ecosystem/slurm/ops.py +++ b/weave_query/weave_query/ecosystem/slurm/ops.py @@ -2,7 +2,8 @@ import requests -import weave +import weave_query as weave +import weave_query @weave.type() @@ -19,8 +20,8 @@ class SlurmJob: @weave.op() def jobs_render( jobs: weave.Node[list[SlurmJob]], -) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( +) -> weave_query.panels.Table: + return weave_query.panels.Table( jobs, columns=[ lambda job: job.job_id, @@ -43,8 +44,8 @@ class SlurmNode: @weave.op() def nodes_render( nodes: weave.Node[list[SlurmNode]], -) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( +) -> weave_query.panels.Table: + return weave_query.panels.Table( nodes, columns=[ lambda node: node.node_name, @@ -96,27 +97,27 @@ def slurm(restapi_url: str) -> Slurm: @weave.op() def slurm_render( slurm_node: weave.Node[Slurm], -) -> weave.legacy.weave.panels.Card: +) -> weave_query.panels.Card: slurm = typing.cast(Slurm, slurm_node) - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title="slurm", subtitle="", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Overview", - content=weave.legacy.weave.panels.Group( + content=weave_query.panels.Group( prefer_horizontal=True, items=[ - weave.legacy.weave.panels.LabeledItem( + weave_query.panels.LabeledItem( item=slurm.jobs().count(), label="Total jobs" ), - weave.legacy.weave.panels.LabeledItem( + weave_query.panels.LabeledItem( item=slurm.nodes().count(), label="Total nodes" ), ], ), ), - weave.legacy.weave.panels.CardTab(name="Nodes", content=slurm.nodes()), - weave.legacy.weave.panels.CardTab(name="Jobs", content=slurm.jobs()), + weave_query.panels.CardTab(name="Nodes", content=slurm.nodes()), + weave_query.panels.CardTab(name="Jobs", content=slurm.jobs()), ], ) diff --git a/weave/legacy/weave/ecosystem/xgboost/__init__.py b/weave_query/weave_query/ecosystem/spacy/__init__.py similarity index 51% rename from weave/legacy/weave/ecosystem/xgboost/__init__.py rename to weave_query/weave_query/ecosystem/spacy/__init__.py index af07721cc2a..7ffa99fd9e1 100644 --- a/weave/legacy/weave/ecosystem/xgboost/__init__.py +++ b/weave_query/weave_query/ecosystem/spacy/__init__.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import context_state as _context +from weave_query import context_state as _context _loading_builtins_token = _context.set_loading_built_ins() -from weave.legacy.weave.ecosystem.xgboost.model import * +from weave_query.ecosystem.spacy.spacy import * _context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/spacy/spacy.py b/weave_query/weave_query/ecosystem/spacy/spacy.py similarity index 72% rename from weave/legacy/weave/ecosystem/spacy/spacy.py rename to weave_query/weave_query/ecosystem/spacy/spacy.py index 03f5b0fea5e..af4d835dd08 100644 --- a/weave/legacy/weave/ecosystem/spacy/spacy.py +++ b/weave_query/weave_query/ecosystem/spacy/spacy.py @@ -2,7 +2,8 @@ import spacy as spacy_lib -import weave +import weave_query as weave +import weave_query class SpacyDocType(weave.types.Type): @@ -31,23 +32,23 @@ def spacy(text: str) -> spacy_lib.tokens.doc.Doc: @weave.op() def spacy_doc_dep_to_html( spacy_doc: spacy_lib.tokens.doc.Doc, -) -> weave.legacy.weave.ops.Html: +) -> weave_query.ops.Html: from spacy import displacy html = displacy.render( list(spacy_doc.sents), style="dep", jupyter=False, options={"compact": True} ) - return weave.legacy.weave.ops.Html(html) + return weave_query.ops.Html(html) @weave.op() def spacy_doc_ent_to_html( spacy_doc: spacy_lib.tokens.doc.Doc, -) -> weave.legacy.weave.ops.Html: +) -> weave_query.ops.Html: from spacy import displacy html = displacy.render(spacy_doc, style="ent", jupyter=False) - return weave.legacy.weave.ops.Html(html) + return weave_query.ops.Html(html) @weave.type() @@ -56,18 +57,18 @@ class SpacyDocPanel(weave.Panel): input_node: weave.Node[spacy_lib.tokens.doc.Doc] @weave.op() - def render(self) -> weave.legacy.weave.panels.Card: - return weave.legacy.weave.panels.Card( + def render(self) -> weave_query.panels.Card: + return weave_query.panels.Card( title="Spacy Visualization", subtitle="", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Dependencies", - content=weave.legacy.weave.panels.PanelHtml(spacy_doc_dep_to_html(self.input_node)), # type: ignore + content=weave_query.panels.PanelHtml(spacy_doc_dep_to_html(self.input_node)), # type: ignore ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Named Entities", - content=weave.legacy.weave.panels.PanelHtml(spacy_doc_ent_to_html(self.input_node)), # type: ignore + content=weave_query.panels.PanelHtml(spacy_doc_ent_to_html(self.input_node)), # type: ignore ), ], ) diff --git a/weave/legacy/weave/ecosystem/test_notebook_ecosystem_executions.py b/weave_query/weave_query/ecosystem/test_notebook_ecosystem_executions.py similarity index 98% rename from weave/legacy/weave/ecosystem/test_notebook_ecosystem_executions.py rename to weave_query/weave_query/ecosystem/test_notebook_ecosystem_executions.py index 95817ef76f9..4bb37abe3bb 100644 --- a/weave/legacy/weave/ecosystem/test_notebook_ecosystem_executions.py +++ b/weave_query/weave_query/ecosystem/test_notebook_ecosystem_executions.py @@ -1,8 +1,8 @@ -from weave.legacy.weave.server import handle_request +from weave_query.server import handle_request def test_playback(): - from weave.legacy.weave import ecosystem + from weave_query import ecosystem for payload in [execute_payloads[-1]]: res = handle_request(payload, True) diff --git a/weave/legacy/weave/ecosystem/torch_mnist_model_example.py b/weave_query/weave_query/ecosystem/torch_mnist_model_example.py similarity index 93% rename from weave/legacy/weave/ecosystem/torch_mnist_model_example.py rename to weave_query/weave_query/ecosystem/torch_mnist_model_example.py index 8ce668a1ab8..43f7bf0088f 100644 --- a/weave/legacy/weave/ecosystem/torch_mnist_model_example.py +++ b/weave_query/weave_query/ecosystem/torch_mnist_model_example.py @@ -6,9 +6,10 @@ from torch.utils.data import Dataset from torchvision import transforms -import weave -from weave.legacy.weave import context_state as _context -from weave.legacy.weave.ecosystem import pytorch +import weave_query as weave +import weave_query +from weave_query import context_state as _context +from weave_query.ecosystem import pytorch DEVICE = torch.device("cuda" if torch.cuda.is_available() else "cpu") @@ -54,7 +55,7 @@ class Model: output_type=weave.types.List( weave.types.TypedDict( { - "X": weave.legacy.weave.ops.image.PILImageType(), # type: ignore + "X": weave_query.ops.image.PILImageType(), # type: ignore "y": weave.types.Int(), } ) @@ -131,7 +132,7 @@ def train_epoch(network, loader, optimizer): @weave.op( render_info={"type": "function"}, input_type={ - "X": weave.types.List(weave.legacy.weave.ops.image.PILImageType()), # type: ignore + "X": weave.types.List(weave_query.ops.image.PILImageType()), # type: ignore "y": weave.types.List(weave.types.Int()), # TODO: class enum? }, # TODO: WeaveJS doesn't support callable output type yet. diff --git a/weave_query/weave_query/ecosystem/torchvision/__init__.py b/weave_query/weave_query/ecosystem/torchvision/__init__.py new file mode 100644 index 00000000000..15bed912dda --- /dev/null +++ b/weave_query/weave_query/ecosystem/torchvision/__init__.py @@ -0,0 +1 @@ +from weave_query.ecosystem.torchvision.datasets import * diff --git a/weave/legacy/weave/ecosystem/torchvision/datasets.py b/weave_query/weave_query/ecosystem/torchvision/datasets.py similarity index 97% rename from weave/legacy/weave/ecosystem/torchvision/datasets.py rename to weave_query/weave_query/ecosystem/torchvision/datasets.py index b62e5c9a126..a84bf4a46cd 100644 --- a/weave/legacy/weave/ecosystem/torchvision/datasets.py +++ b/weave_query/weave_query/ecosystem/torchvision/datasets.py @@ -10,9 +10,10 @@ import PIL.Image from torchvision import datasets -import weave -from weave.legacy.weave import infer_types -from weave.legacy.weave import panels +import weave_query as weave +import weave_query +from weave_query import infer_types +from weave_query import panels ExampleType = TypeVar("ExampleType") diff --git a/weave/legacy/weave/__init__.py b/weave_query/weave_query/ecosystem/twitter/__init__.py similarity index 100% rename from weave/legacy/weave/__init__.py rename to weave_query/weave_query/ecosystem/twitter/__init__.py diff --git a/weave/legacy/weave/ecosystem/twitter/tweet.py b/weave_query/weave_query/ecosystem/twitter/tweet.py similarity index 95% rename from weave/legacy/weave/ecosystem/twitter/tweet.py rename to weave_query/weave_query/ecosystem/twitter/tweet.py index ec614cb14c1..ae21c47a281 100644 --- a/weave/legacy/weave/ecosystem/twitter/tweet.py +++ b/weave_query/weave_query/ecosystem/twitter/tweet.py @@ -1,4 +1,5 @@ -import weave +import weave_query as weave +import weave_query import dataclasses diff --git a/weave/legacy/weave/ecosystem/hdbscan/__init__.py b/weave_query/weave_query/ecosystem/umap/__init__.py similarity index 73% rename from weave/legacy/weave/ecosystem/hdbscan/__init__.py rename to weave_query/weave_query/ecosystem/umap/__init__.py index 62b6fee8188..170e78d9af8 100644 --- a/weave/legacy/weave/ecosystem/hdbscan/__init__.py +++ b/weave_query/weave_query/ecosystem/umap/__init__.py @@ -2,13 +2,13 @@ import logging -from weave.legacy.weave import context_state +from weave_query import context_state logging.getLogger("ecosystem_example").setLevel(logging.ERROR) loading_builtins_token = context_state.set_loading_built_ins() try: - from weave.legacy.weave.ecosystem.hdbscan.ops import * + from weave_query.ecosystem.umap.ops import * finally: context_state.clear_loading_built_ins(loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/umap/ops.py b/weave_query/weave_query/ecosystem/umap/ops.py similarity index 93% rename from weave/legacy/weave/ecosystem/umap/ops.py rename to weave_query/weave_query/ecosystem/umap/ops.py index 893cba22ecb..0d4baaf50aa 100644 --- a/weave/legacy/weave/ecosystem/umap/ops.py +++ b/weave_query/weave_query/ecosystem/umap/ops.py @@ -10,8 +10,9 @@ TypedDict, ) -import weave -from weave.legacy.weave import ops_arrow +import weave_query as weave +import weave_query +from weave_query import ops_arrow UMAP_LIB = None diff --git a/weave_query/weave_query/ecosystem/wandb/__init__.py b/weave_query/weave_query/ecosystem/wandb/__init__.py new file mode 100644 index 00000000000..350c82dfda8 --- /dev/null +++ b/weave_query/weave_query/ecosystem/wandb/__init__.py @@ -0,0 +1,13 @@ +from weave_query import context_state as _context + +_loading_builtins_token = _context.set_loading_built_ins() + +from weave_query.ecosystem.wandb import wandb_objs +from weave_query.ecosystem.wandb.panel_distribution import * +from weave_query.ecosystem.wandb.panel_geo import * +from weave_query.ecosystem.wandb.panel_scatter import * +from weave_query.ecosystem.wandb.panel_time_series import * +from weave_query.ecosystem.wandb.run_chain import * +from weave_query.ecosystem.wandb.weave_plotly import * + +_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/wandb/gql_artifact_dag.py b/weave_query/weave_query/ecosystem/wandb/gql_artifact_dag.py similarity index 98% rename from weave/legacy/weave/ecosystem/wandb/gql_artifact_dag.py rename to weave_query/weave_query/ecosystem/wandb/gql_artifact_dag.py index ca22e0b1801..98368129e30 100644 --- a/weave/legacy/weave/ecosystem/wandb/gql_artifact_dag.py +++ b/weave_query/weave_query/ecosystem/wandb/gql_artifact_dag.py @@ -1,6 +1,6 @@ import gql -from weave.legacy.weave import wandb_api +from weave_query import wandb_api ARTIFACT_LINEAGE_QUERY = gql.gql( """ diff --git a/weave/legacy/weave/ecosystem/wandb/panel_distribution.py b/weave_query/weave_query/ecosystem/wandb/panel_distribution.py similarity index 75% rename from weave/legacy/weave/ecosystem/wandb/panel_distribution.py rename to weave_query/weave_query/ecosystem/wandb/panel_distribution.py index 387db6ece06..8b6f2a76dd9 100644 --- a/weave/legacy/weave/ecosystem/wandb/panel_distribution.py +++ b/weave_query/weave_query/ecosystem/wandb/panel_distribution.py @@ -1,10 +1,11 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import panel_util -from weave.legacy.weave.ecosystem.wandb import weave_plotly +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import panel_util +from weave_query.ecosystem.wandb import weave_plotly @weave.type() @@ -14,14 +15,14 @@ class DistributionConfig: # We should make a better type to represent this, so it can be # distinguished from an expression like bin_size. value_fn: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) label_fn: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) # This is an expression. It will be stored in the config as Node. bin_size: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) @@ -35,7 +36,7 @@ class Distribution(weave.Panel): @weave.op() def initialize(self) -> DistributionConfig: input_node = self.input_node - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) return DistributionConfig( value_fn=weave_internal.define_fn( {"item": unnested.type.object_type}, @@ -50,19 +51,19 @@ def initialize(self) -> DistributionConfig: ) @weave.op() - def render_config(self) -> weave.legacy.weave.panels.Group: + def render_config(self) -> weave_query.panels.Group: config = typing.cast(DistributionConfig, self.config) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( items={ - "value_fn": weave.legacy.weave.panels.LabeledItem( + "value_fn": weave_query.panels.LabeledItem( label="value", - item=weave.legacy.weave.panels.FunctionEditor(config.value_fn), + item=weave_query.panels.FunctionEditor(config.value_fn), ), - "label_fn": weave.legacy.weave.panels.LabeledItem( + "label_fn": weave_query.panels.LabeledItem( label="label", - item=weave.legacy.weave.panels.FunctionEditor(config.label_fn), + item=weave_query.panels.FunctionEditor(config.label_fn), ), - "bin_size": weave.legacy.weave.panels.LabeledItem( + "bin_size": weave_query.panels.LabeledItem( label="bin_size", # Must execute here because bin_size is an expression. # Editor panels take the actual type they edit (in this @@ -70,7 +71,7 @@ def render_config(self) -> weave.legacy.weave.panels.Group: # const node directly in the config, or if the expression # refers to variables, the edit will be routed to the appropriate # owner. - item=weave.legacy.weave.panels.Slider(config.bin_size.execute()), # type: ignore + item=weave_query.panels.Slider(config.bin_size.execute()), # type: ignore ), } ) @@ -87,10 +88,10 @@ def render(self) -> weave_plotly.PanelPlotly: config.value_fn.type.output_type # type: ignore ): # TODO: need a nicer way to return error states - return weave.legacy.weave.panels.PanelString("Invalid value_fn") # type: ignore + return weave_query.panels.PanelString("Invalid value_fn") # type: ignore # We always unnest, so that we can compare across groups of items # easily. (the Distribution notebook) - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) bin_size = config.bin_size def bin_func(item): @@ -111,10 +112,10 @@ def bin_func(item): else: group_items["label"] = config.label_fn(item) - return weave.legacy.weave.ops.dict_(**group_items) + return weave_query.ops.dict_(**group_items) binned = unnested.groupby(lambda item: bin_func(item)).map( - lambda group: weave.legacy.weave.ops.dict_( + lambda group: weave_query.ops.dict_( value=group.groupkey()["value"], label=group.groupkey()["label"], count=group.count(), @@ -128,9 +129,9 @@ def bin_func(item): @weave.op() def distribution_panel_plot_render( input_node: weave.Node[list[typing.Any]], config: DistributionConfig -) -> weave.legacy.weave.panels.Plot: - unnested = weave.legacy.weave.ops.unnest(input_node) - bin_size = weave.legacy.weave.ops.execute(config.bin_size) +) -> weave_query.panels.Plot: + unnested = weave_query.ops.unnest(input_node) + bin_size = weave_query.ops.execute(config.bin_size) def bin_func(item): value_fn_output_type = config.value_fn.type.output_type @@ -146,18 +147,18 @@ def bin_func(item): else: group_items["label"] = config.label_fn(item) - res = weave.legacy.weave.ops.dict_(**group_items) + res = weave_query.ops.dict_(**group_items) return res binned = unnested.groupby(lambda item: bin_func(item)).map( - lambda group: weave.legacy.weave.ops.dict_( + lambda group: weave_query.ops.dict_( value=group.groupkey()["value"], label=group.groupkey()["label"], count=group.count(), ) ) - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( binned, x=lambda row: row["value"], y=lambda row: row["count"], diff --git a/weave/legacy/weave/ecosystem/wandb/panel_geo.py b/weave_query/weave_query/ecosystem/wandb/panel_geo.py similarity index 76% rename from weave/legacy/weave/ecosystem/wandb/panel_geo.py rename to weave_query/weave_query/ecosystem/wandb/panel_geo.py index 15c1f1c479d..829726324b8 100644 --- a/weave/legacy/weave/ecosystem/wandb/panel_geo.py +++ b/weave_query/weave_query/ecosystem/wandb/panel_geo.py @@ -2,9 +2,10 @@ import inspect import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.ecosystem.wandb import weave_plotly +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.ecosystem.wandb import weave_plotly # This is the panel's config (the state that is stored in the panel and configurable @@ -12,13 +13,13 @@ @weave.type() class GeoConfig: x_fn: weave.Node[float] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) y_fn: weave.Node[float] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) color_fn: weave.Node[float] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) @@ -69,10 +70,10 @@ def geo_default_config( def geo( input_node: weave.Node[list[typing.Any]], config: GeoConfig ) -> weave_plotly.PanelPlotly: - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) config = geo_default_config(config, unnested) plot_data = unnested.map( - lambda item: weave.legacy.weave.ops.dict_( + lambda item: weave_query.ops.dict_( long=config.x_fn(item), # type: ignore lat=config.y_fn(item), # type: ignore color=config.color_fn(item), # type: ignore @@ -86,27 +87,27 @@ def geo( @weave.op(name="Geo_config") def geo_config( input_node: weave.Node[list[typing.Any]], config: GeoConfig -) -> weave.legacy.weave.panels.Group: - unnested = weave.legacy.weave.ops.unnest(input_node) +) -> weave_query.panels.Group: + unnested = weave_query.ops.unnest(input_node) config = geo_default_config(config, unnested) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( items={ - "x_fn": weave.legacy.weave.panels.LabeledItem( + "x_fn": weave_query.panels.LabeledItem( label="x", - item=weave.legacy.weave.panels.FunctionEditor( - config=weave.legacy.weave.panels.FunctionEditorConfig(config.x_fn) + item=weave_query.panels.FunctionEditor( + config=weave_query.panels.FunctionEditorConfig(config.x_fn) ), ), - "y_fn": weave.legacy.weave.panels.LabeledItem( + "y_fn": weave_query.panels.LabeledItem( label="y", - item=weave.legacy.weave.panels.FunctionEditor( - config=weave.legacy.weave.panels.FunctionEditorConfig(config.y_fn) + item=weave_query.panels.FunctionEditor( + config=weave_query.panels.FunctionEditorConfig(config.y_fn) ), ), - "color_fn": weave.legacy.weave.panels.LabeledItem( + "color_fn": weave_query.panels.LabeledItem( label="color", - item=weave.legacy.weave.panels.FunctionEditor( - config=weave.legacy.weave.panels.FunctionEditorConfig(config.color_fn) + item=weave_query.panels.FunctionEditor( + config=weave_query.panels.FunctionEditorConfig(config.color_fn) ), ), } @@ -134,7 +135,7 @@ def __init__( if self.config is None: self.config = GeoConfig() - unnested = weave.legacy.weave.ops.unnest(self.input_node) + unnested = weave_query.ops.unnest(self.input_node) if "x_fn" in options: sig = inspect.signature(options["x_fn"]) param_name = list(sig.parameters.values())[0].name @@ -171,28 +172,28 @@ def __init__( @weave.op(output_type=lambda input_type: input_type["self"].input_node.output_type) def selected(self): # TODO: This function is not right! We need to do a range selection in polar space! - unnested = weave.legacy.weave.ops.unnest(self.input_node) + unnested = weave_query.ops.unnest(self.input_node) config = geo_default_config(self.config, unnested) filtered = unnested.filter( - lambda item: weave.legacy.weave.ops.Boolean.bool_and( - weave.legacy.weave.ops.Boolean.bool_and( - weave.legacy.weave.ops.Boolean.bool_and( + lambda item: weave_query.ops.Boolean.bool_and( + weave_query.ops.Boolean.bool_and( + weave_query.ops.Boolean.bool_and( config.x_fn(item) - > weave.legacy.weave.ops.TypedDict.pick( + > weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "xMin" ), config.x_fn(item) - < weave.legacy.weave.ops.TypedDict.pick( + < weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "xMax" ), ), config.y_fn(item) - > weave.legacy.weave.ops.TypedDict.pick( + > weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "yMin" ), ), config.y_fn(item) - < weave.legacy.weave.ops.TypedDict.pick( + < weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "yMax" ), ) diff --git a/weave/legacy/weave/ecosystem/wandb/panel_scatter.py b/weave_query/weave_query/ecosystem/wandb/panel_scatter.py similarity index 65% rename from weave/legacy/weave/ecosystem/wandb/panel_scatter.py rename to weave_query/weave_query/ecosystem/wandb/panel_scatter.py index f670ae23c48..dea3d65c6cf 100644 --- a/weave/legacy/weave/ecosystem/wandb/panel_scatter.py +++ b/weave_query/weave_query/ecosystem/wandb/panel_scatter.py @@ -2,21 +2,22 @@ import inspect import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.ecosystem.wandb import weave_plotly +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.ecosystem.wandb import weave_plotly @weave.type() class ScatterConfig: x_fn: weave.Node[typing.Optional[typing.Any]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) y_fn: weave.Node[typing.Optional[typing.Any]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) label_fn: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) @@ -30,7 +31,7 @@ class Scatter(weave.Panel): @weave.op() def initialize(self) -> ScatterConfig: input_node = self.input_node - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) return ScatterConfig( x_fn=weave_internal.define_fn( {"item": unnested.type.object_type}, @@ -48,19 +49,19 @@ def initialize(self) -> ScatterConfig: # The config render op. This renders the config editor. @weave.op() - def render_config(self) -> weave.legacy.weave.panels.Group: + def render_config(self) -> weave_query.panels.Group: config = typing.cast(ScatterConfig, self.config) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( items={ - "x_fn": weave.legacy.weave.panels.LabeledItem( - label="x", item=weave.legacy.weave.panels.FunctionEditor(config.x_fn) + "x_fn": weave_query.panels.LabeledItem( + label="x", item=weave_query.panels.FunctionEditor(config.x_fn) ), - "y_fn": weave.legacy.weave.panels.LabeledItem( - label="y", item=weave.legacy.weave.panels.FunctionEditor(config.y_fn) + "y_fn": weave_query.panels.LabeledItem( + label="y", item=weave_query.panels.FunctionEditor(config.y_fn) ), - "label_fn": weave.legacy.weave.panels.LabeledItem( + "label_fn": weave_query.panels.LabeledItem( label="label", - item=weave.legacy.weave.panels.FunctionEditor(config.label_fn), + item=weave_query.panels.FunctionEditor(config.label_fn), ), } ) @@ -70,7 +71,7 @@ def render_config(self) -> weave.legacy.weave.panels.Group: def render(self) -> weave_plotly.PanelPlotly: input_node = self.input_node config = typing.cast(ScatterConfig, self.config) - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) if ( not weave.types.optional(weave.types.Float()).assign_type(config.x_fn.type) or not weave.types.optional(weave.types.Float()).assign_type( @@ -80,14 +81,14 @@ def render(self) -> weave_plotly.PanelPlotly: config.label_fn.type ) ): - return weave.legacy.weave.panels.PanelHtml(weave.legacy.weave.ops.Html("No data")) # type: ignore + return weave_query.panels.PanelHtml(weave_query.ops.Html("No data")) # type: ignore if config.label_fn.type == weave.types.Invalid(): plot_data = unnested.map( - lambda item: weave.legacy.weave.ops.dict_(x=config.x_fn(item), y=config.y_fn(item)) # type: ignore + lambda item: weave_query.ops.dict_(x=config.x_fn(item), y=config.y_fn(item)) # type: ignore ) else: plot_data = unnested.map( - lambda item: weave.legacy.weave.ops.dict_( + lambda item: weave_query.ops.dict_( x=config.x_fn(item), y=config.y_fn(item), label=config.label_fn(item), @@ -100,28 +101,28 @@ def render(self) -> weave_plotly.PanelPlotly: # TODO: Fix @weave.op(output_type=lambda input_type: input_type["self"].input_node.output_type) def selected(self): - unnested = weave.legacy.weave.ops.unnest(self.input_node) + unnested = weave_query.ops.unnest(self.input_node) config = self.config filtered = unnested.filter( - lambda item: weave.legacy.weave.ops.Boolean.bool_and( - weave.legacy.weave.ops.Boolean.bool_and( - weave.legacy.weave.ops.Boolean.bool_and( + lambda item: weave_query.ops.Boolean.bool_and( + weave_query.ops.Boolean.bool_and( + weave_query.ops.Boolean.bool_and( config.x_fn(item) - > weave.legacy.weave.ops.TypedDict.pick( + > weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "xMin" ), config.x_fn(item) - < weave.legacy.weave.ops.TypedDict.pick( + < weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "xMax" ), ), config.y_fn(item) - > weave.legacy.weave.ops.TypedDict.pick( + > weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "yMin" ), ), config.y_fn(item) - < weave.legacy.weave.ops.TypedDict.pick( + < weave_query.ops.TypedDict.pick( self._renderAsPanel.config.selected, "yMax" ), ) diff --git a/weave/legacy/weave/ecosystem/wandb/panel_time_series.py b/weave_query/weave_query/ecosystem/wandb/panel_time_series.py similarity index 79% rename from weave/legacy/weave/ecosystem/wandb/panel_time_series.py rename to weave_query/weave_query/ecosystem/wandb/panel_time_series.py index 406ff8f140d..ef3c607ddf0 100644 --- a/weave/legacy/weave/ecosystem/wandb/panel_time_series.py +++ b/weave_query/weave_query/ecosystem/wandb/panel_time_series.py @@ -1,11 +1,12 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.ecosystem.wandb import weave_plotly -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.panel_util import make_node +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.ecosystem.wandb import weave_plotly +from weave_query.language_features.tagging import tagged_value_type +from weave_query.panel_util import make_node TIME_SERIES_BIN_SIZES_SEC = [ # TODO: will need more steps along here for smooth zooming. @@ -53,27 +54,27 @@ @weave.type() class TimeSeriesConfig: x: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) agg: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) min_x: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) max_x: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) label: weave.Node[ typing.Optional[typing.Union[str, weave.types.InvalidPy]] - ] = dataclasses.field(default_factory=lambda: weave.legacy.weave.graph.VoidNode()) + ] = dataclasses.field(default_factory=lambda: weave_query.graph.VoidNode()) mark: weave.Node[str] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.ConstNode( + default_factory=lambda: weave_query.graph.ConstNode( weave.types.String(), "bar" ) ) axis_labels: weave.Node[dict[str, str]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.ConstNode( + default_factory=lambda: weave_query.graph.ConstNode( weave.types.Dict(weave.types.String(), weave.types.String()), {}, ) @@ -83,7 +84,7 @@ class TimeSeriesConfig: def first_column_of_type( node_type: weave.types.Type, desired_type: weave.types.Type, -) -> typing.Tuple[weave.legacy.weave.graph.ConstNode, weave.legacy.weave.graph.ConstNode]: +) -> typing.Tuple[weave_query.graph.ConstNode, weave_query.graph.ConstNode]: if isinstance(node_type, tagged_value_type.TaggedValueType): node_type = node_type.value if weave.types.List().assign_type(node_type): @@ -119,8 +120,8 @@ def first_column_of_type( {"item": object_type}, lambda item: item[key] ) # return weave_internal.define_fn( - # {"input_node": node_type}, weave.legacy.weave.graph.VoidNode() - # ), weave_internal.define_fn({"item": object_type}, lambda _: weave.legacy.weave.graph.VoidNode()) + # {"input_node": node_type}, weave_query.graph.VoidNode() + # ), weave_internal.define_fn({"item": object_type}, lambda _: weave_query.graph.VoidNode()) raise ValueError( f"Can't extract column with type {desired_type} from node of type {node_type}" ) @@ -160,7 +161,7 @@ def __init__(self, input_node, vars=None, config=None, **options): super().__init__(input_node=input_node, vars=vars) self.config = config - unnested = weave.legacy.weave.ops.unnest(input_node) + unnested = weave_query.ops.unnest(input_node) # TODO: add the ability to configure options here if self.config is None: @@ -168,7 +169,7 @@ def __init__(self, input_node, vars=None, config=None, **options): for attr in ["x", "min_x", "max_x", "label", "mark", "agg", "axis_labels"]: if attr in options: value = options[attr] - if not isinstance(value, weave.legacy.weave.graph.Node): + if not isinstance(value, weave_query.graph.Node): if attr in ["min_x", "max_x", "mark", "axis_labels"]: value = make_node(value) if attr in ["min_x", "max_x"]: @@ -186,7 +187,7 @@ def __init__(self, input_node, vars=None, config=None, **options): else: value = weave_internal.define_fn( {"item": unnested.type.object_type}, - lambda item: weave.legacy.weave.graph.VoidNode(), + lambda item: weave_query.graph.VoidNode(), ) setattr(self.config, attr, value) @@ -239,32 +240,32 @@ def initialize(self) -> TimeSeriesConfig: # The config render op. This renders the config editor. @weave.op() - def render_config(self) -> weave.legacy.weave.panels.Group: + def render_config(self) -> weave_query.panels.Group: input_node = self.input_node config = typing.cast(TimeSeriesConfig, self.config) - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( items={ - "x": weave.legacy.weave.panels.LabeledItem( - label="x", item=weave.legacy.weave.panels.FunctionEditor(config.x) + "x": weave_query.panels.LabeledItem( + label="x", item=weave_query.panels.FunctionEditor(config.x) ), - "label": weave.legacy.weave.panels.LabeledItem( + "label": weave_query.panels.LabeledItem( label="label", - item=weave.legacy.weave.panels.FunctionEditor(config.label), + item=weave_query.panels.FunctionEditor(config.label), ), - "min_x": weave.legacy.weave.panels.LabeledItem( + "min_x": weave_query.panels.LabeledItem( label="min_x", - item=weave.legacy.weave.panels.FunctionEditor(config.min_x), + item=weave_query.panels.FunctionEditor(config.min_x), ), - "max_x": weave.legacy.weave.panels.LabeledItem( + "max_x": weave_query.panels.LabeledItem( label="max_x", - item=weave.legacy.weave.panels.FunctionEditor(config.max_x), + item=weave_query.panels.FunctionEditor(config.max_x), ), - "agg": weave.legacy.weave.panels.LabeledItem( - label="agg", item=weave.legacy.weave.panels.FunctionEditor(config.agg) + "agg": weave_query.panels.LabeledItem( + label="agg", item=weave_query.panels.FunctionEditor(config.agg) ), - "mark": weave.legacy.weave.panels.LabeledItem( + "mark": weave_query.panels.LabeledItem( label="mark", - item=weave.legacy.weave.panels.ObjectPicker( + item=weave_query.panels.ObjectPicker( weave_internal.make_const_node( weave.types.List(weave.types.String()), [ @@ -273,7 +274,7 @@ def render_config(self) -> weave.legacy.weave.panels.Group: "point", ], ), - config=weave.legacy.weave.panels.ObjectPickerConfig( + config=weave_query.panels.ObjectPickerConfig( choice=config.mark ), ), @@ -296,13 +297,13 @@ def render(self) -> weave_plotly.PanelPlotly: if not weave.types.optional(weave.types.Timestamp()).assign_type( min_x.type ) or not weave.types.optional(weave.types.Timestamp()).assign_type(max_x.type): - return weave.legacy.weave.panels.PanelHtml(weave.legacy.weave.ops.Html("No data")) # type: ignore + return weave_query.panels.PanelHtml(weave_query.ops.Html("No data")) # type: ignore exact_bin_size = ((max_x - min_x) / N_BINS).totalSeconds() # type: ignore bin_size_index = TIME_SERIES_BIN_SIZES_SEC_NODE.map( # type: ignore lambda x: ( (x - exact_bin_size).abs() - / weave.legacy.weave.ops.make_list(a=x, b=exact_bin_size).min() + / weave_query.ops.make_list(a=x, b=exact_bin_size).min() ) # lambda x: (x / exact_bin_size - 1).abs() # original ).argmin() @@ -323,25 +324,25 @@ def bin_fn(item): bin_start = bin_start_ms bin_end = bin_end_ms - group_items["bin"] = weave.legacy.weave.ops.dict_(start=bin_start, stop=bin_end) + group_items["bin"] = weave_query.ops.dict_(start=bin_start, stop=bin_end) if label_fn_output_type == weave.types.Invalid(): group_items["label"] = "no_label" else: group_items["label"] = config.label(item) - return weave.legacy.weave.ops.dict_(**group_items) + return weave_query.ops.dict_(**group_items) binned = ( unnested.filter( - lambda item: weave.legacy.weave.ops.Boolean.bool_and( + lambda item: weave_query.ops.Boolean.bool_and( config.x(item) <= max_x, config.x(item) >= min_x, # type: ignore ) ) .groupby(lambda item: bin_fn(item)) .map( - lambda group: weave.legacy.weave.ops.dict_( + lambda group: weave_query.ops.dict_( x=group.groupkey()["bin"], label=group.groupkey()["label"], y=config.agg(group), # type: ignore @@ -349,12 +350,12 @@ def bin_fn(item): ) # this is needed because otherwise the lines look like a scrambled mess .sort( - lambda item: weave.legacy.weave.ops.make_list(a=item["x"]["start"]), + lambda item: weave_query.ops.make_list(a=item["x"]["start"]), ["asc"], ) ) - default_labels = weave.legacy.weave.ops.dict_( + default_labels = weave_query.ops.dict_( # x=function_to_string(config.x), # y=function_to_string(config.agg), # label=function_to_string(config.label), diff --git a/weave/legacy/weave/ecosystem/wandb/run_chain.py b/weave_query/weave_query/ecosystem/wandb/run_chain.py similarity index 90% rename from weave/legacy/weave/ecosystem/wandb/run_chain.py rename to weave_query/weave_query/ecosystem/wandb/run_chain.py index 3283b1742b8..28bc9796885 100644 --- a/weave/legacy/weave/ecosystem/wandb/run_chain.py +++ b/weave_query/weave_query/ecosystem/wandb/run_chain.py @@ -1,9 +1,10 @@ import json import typing -import weave -from weave.legacy.weave import compile, op_def, ops_arrow -from weave.legacy.weave.ecosystem.wandb import gql_artifact_dag +import weave_query as weave +import weave_query +from weave_query import compile, op_def, ops_arrow +from weave_query.ecosystem.wandb import gql_artifact_dag @weave.type() @@ -20,7 +21,7 @@ class RunChain: def _history_node(self): with op_def.no_refine(): - proj = weave.legacy.weave.ops.project(self.entity_name, self.project_name) + proj = weave_query.ops.project(self.entity_name, self.project_name) history_nodes = [] for seg in self.segments: # This is the only use of the deprecated history2 op in the Weave @@ -32,8 +33,8 @@ def _history_node(self): history_nodes.append(hist_node) - history_node = weave.legacy.weave.ops.List.concat( - weave.legacy.weave.ops.make_list( + history_node = weave_query.ops.List.concat( + weave_query.ops.make_list( **{f"node{i}": n for i, n in enumerate(history_nodes)} ) ) @@ -56,7 +57,7 @@ def history(self): def run_chain(run_path: str) -> RunChain: with op_def.no_refine(): entity, project, run_id = run_path.split("/") - proj = weave.legacy.weave.ops.project(entity, project) + proj = weave_query.ops.project(entity, project) run = proj.run(run_id) # Get the checkpoint artifact for this one if one exists diff --git a/weave/legacy/weave/ecosystem/wandb/test_panel_distribution.py b/weave_query/weave_query/ecosystem/wandb/test_panel_distribution.py similarity index 91% rename from weave/legacy/weave/ecosystem/wandb/test_panel_distribution.py rename to weave_query/weave_query/ecosystem/wandb/test_panel_distribution.py index 17b5a7400f8..b270e89cc6d 100644 --- a/weave/legacy/weave/ecosystem/wandb/test_panel_distribution.py +++ b/weave_query/weave_query/ecosystem/wandb/test_panel_distribution.py @@ -1,8 +1,9 @@ import random -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.ecosystem.wandb import panel_distribution +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.ecosystem.wandb import panel_distribution def test_flow(): diff --git a/weave/legacy/weave/ecosystem/wandb/wandb_objs.py b/weave_query/weave_query/ecosystem/wandb/wandb_objs.py similarity index 72% rename from weave/legacy/weave/ecosystem/wandb/wandb_objs.py rename to weave_query/weave_query/ecosystem/wandb/wandb_objs.py index 38731a5af83..2cd8f10ee8f 100644 --- a/weave/legacy/weave/ecosystem/wandb/wandb_objs.py +++ b/weave_query/weave_query/ecosystem/wandb/wandb_objs.py @@ -1,8 +1,9 @@ import typing -import weave -from weave.legacy.weave import registry_mem -from weave.legacy.weave.ops_domain import run_ops, wb_domain_types +import weave_query as weave +import weave_query +from weave_query import registry_mem +from weave_query.ops_domain import run_ops, wb_domain_types # We can't chain ops called .name() because of a weird bug :( [its a field on VarNode]. # So we have to get the ops here and call them directly for now. @@ -23,7 +24,7 @@ def org_model(entity_name: str, model_name: str) -> FakeWandbModel: return FakeWandbModel(model_name) -GHOSTWRITE_MD = weave.legacy.weave.ops.Markdown( +GHOSTWRITE_MD = weave_query.ops.Markdown( """ # [ghostwrite.ai](https://ghostwrite.ai). @@ -35,19 +36,19 @@ def org_model(entity_name: str, model_name: str) -> FakeWandbModel: @weave.op() def fakewandbmodel_render( model_node: weave.Node[FakeWandbModel], -) -> weave.legacy.weave.panels.Card: +) -> weave_query.panels.Card: model = typing.cast(FakeWandbModel, model_node) - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=model.name, subtitle="", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Description", - content=weave.legacy.weave.panels.PanelMarkdown(GHOSTWRITE_MD), # type: ignore + content=weave_query.panels.PanelMarkdown(GHOSTWRITE_MD), # type: ignore ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Predictions", - content=weave.legacy.weave.ops.project("shawn", "ghostwrite-test1") + content=weave_query.ops.project("shawn", "ghostwrite-test1") .runs() .summary()["predictions"] .table() @@ -62,39 +63,39 @@ def fakewandbmodel_render( @weave.op() def entity_render( entity_node: weave.Node[wb_domain_types.Entity], -) -> weave.legacy.weave.panels.Card: +) -> weave_query.panels.Card: entity = typing.cast(wb_domain_types.Entity, entity_node) - return weave.legacy.weave.panels.Card( + return weave_query.panels.Card( title=entity_name_op(entity), subtitle="", content=[ - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Projects", - content=weave.legacy.weave.panels.Table( + content=weave_query.panels.Table( entity.projects(), # type: ignore columns=[ - lambda project: weave.legacy.weave.panels.WeaveLink( + lambda project: weave_query.panels.WeaveLink( project_name_op(project), vars={ "entity_name": entity_name_op(project.entity()), "project_name": project_name_op(project), }, - to=lambda input, vars: weave.legacy.weave.ops.project( + to=lambda input, vars: weave_query.ops.project( vars["entity_name"], vars["project_name"] ), ), ], ), ), - weave.legacy.weave.panels.CardTab( + weave_query.panels.CardTab( name="Registered Models", - content=weave.legacy.weave.panels.Table( + content=weave_query.panels.Table( weave.save( ["ghostwrite", "credit card predictor", "stopsigns3"], name="model_list", ), columns=[ - lambda model_name: weave.legacy.weave.panels.WeaveLink( + lambda model_name: weave_query.panels.WeaveLink( model_name, vars={ "entity_name": entity_name_op(entity), @@ -116,18 +117,18 @@ class ProjectRunsTable(weave.Panel): input_node: weave.Node[list[wb_domain_types.Run]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: - return weave.legacy.weave.panels.Table( + def render(self) -> weave_query.panels.Table: + return weave_query.panels.Table( self.input_node, columns=[ - lambda run: weave.legacy.weave.panels.WeaveLink( + lambda run: weave_query.panels.WeaveLink( run.id(), vars={ "entity_name": entity_name_op(run.project().entity()), "project_name": project_name_op(run.project()), "run_id": run.id(), }, - to=lambda input, vars: weave.legacy.weave.ops.project( + to=lambda input, vars: weave_query.ops.project( vars["entity_name"], vars["project_name"] ).run(vars["run_id"]), ), @@ -143,28 +144,28 @@ class ProjectArtifactsTable(weave.Panel): input_node: weave.Node[list[wb_domain_types.ArtifactCollection]] @weave.op() - def render(self) -> weave.legacy.weave.panels.Table: + def render(self) -> weave_query.panels.Table: # This breaks if there is a variable in the node # types_names = weave.use(artifacts._get_op("type")().name().unique()) - # return weave.legacy.weave.panels.Card( + # return weave_query.panels.Card( # title="Artifacts", # subtitle="", # content=[ - # weave.legacy.weave.panels.CardTab(name=type_name, content=[type_name]) + # weave_query.panels.CardTab(name=type_name, content=[type_name]) # for type_name in types_names # ], # ) - return weave.legacy.weave.panels.Table( + return weave_query.panels.Table( self.input_node, columns=[ - lambda artifact: weave.legacy.weave.panels.WeaveLink( + lambda artifact: weave_query.panels.WeaveLink( artifact._get_op("name")(), vars={ "entity_name": entity_name_op(artifact.project().entity()), "project_name": project_name_op(artifact.project()), "artifact_name": artifact._get_op("name")(), }, - to=lambda input, vars: weave.legacy.weave.ops.project( + to=lambda input, vars: weave_query.ops.project( vars["entity_name"], vars["project_name"] ).artifact(vars["artifact_name"]), ), diff --git a/weave/legacy/weave/ecosystem/wandb/weave_plotly.py b/weave_query/weave_query/ecosystem/wandb/weave_plotly.py similarity index 97% rename from weave/legacy/weave/ecosystem/wandb/weave_plotly.py rename to weave_query/weave_query/ecosystem/wandb/weave_plotly.py index 31f71fb54d3..92c30bc4fa3 100644 --- a/weave/legacy/weave/ecosystem/wandb/weave_plotly.py +++ b/weave_query/weave_query/ecosystem/wandb/weave_plotly.py @@ -8,9 +8,10 @@ import plotly.express as px from plotly import graph_objs as go -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import infer_types +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import infer_types class PlotlyType(weave.types.Type): @@ -178,7 +179,7 @@ def bin_center(bin): @weave.op() def plotly_scatter(data: list[ScatterData]) -> plotly.graph_objs.Figure: - from weave.legacy.weave import storage + from weave_query import storage data = storage.to_weavejs(data) color = None diff --git a/weave_query/weave_query/ecosystem/xgboost/__init__.py b/weave_query/weave_query/ecosystem/xgboost/__init__.py new file mode 100644 index 00000000000..7b73e0c8637 --- /dev/null +++ b/weave_query/weave_query/ecosystem/xgboost/__init__.py @@ -0,0 +1,7 @@ +from weave_query import context_state as _context + +_loading_builtins_token = _context.set_loading_built_ins() + +from weave_query.ecosystem.xgboost.model import * + +_context.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ecosystem/xgboost/model.py b/weave_query/weave_query/ecosystem/xgboost/model.py similarity index 95% rename from weave/legacy/weave/ecosystem/xgboost/model.py rename to weave_query/weave_query/ecosystem/xgboost/model.py index 0f5e7b727a9..b3ec72c8bde 100644 --- a/weave/legacy/weave/ecosystem/xgboost/model.py +++ b/weave_query/weave_query/ecosystem/xgboost/model.py @@ -2,7 +2,8 @@ import xgboost import typing -import weave +import weave_query as weave +import weave_query class XGBoostModelType(weave.types.Type): diff --git a/weave/legacy/weave/engine_trace.py b/weave_query/weave_query/engine_trace.py similarity index 98% rename from weave/legacy/weave/engine_trace.py rename to weave_query/weave_query/engine_trace.py index b4b6fca18ba..f3c3986faa0 100644 --- a/weave/legacy/weave/engine_trace.py +++ b/weave_query/weave_query/engine_trace.py @@ -18,7 +18,7 @@ import time import typing -from weave.legacy.weave import environment, logs, stream_data_interfaces +from weave_query import environment, logs, stream_data_interfaces # Thanks co-pilot! @@ -91,7 +91,7 @@ def current_root_span(self): # type: ignore def weave_trace_stream(): # type: ignore global _weave_trace_stream if _weave_trace_stream is None: - from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable + from weave_query.wandb_interface.wandb_stream_table import StreamTable _weave_trace_stream = StreamTable(os.getenv("WEAVE_TRACE_STREAM")) return _weave_trace_stream diff --git a/weave/legacy/weave/environment.py b/weave_query/weave_query/environment.py similarity index 98% rename from weave/legacy/weave/environment.py rename to weave_query/weave_query/environment.py index 9e6e5deba91..5057291519d 100644 --- a/weave/legacy/weave/environment.py +++ b/weave_query/weave_query/environment.py @@ -10,11 +10,11 @@ import typing from distutils.util import strtobool from urllib.parse import urlparse -from weave.legacy.weave import errors -from weave.legacy.weave import util +from weave_query import errors +from weave_query import util if typing.TYPE_CHECKING: - from weave.legacy.weave import logs + from weave_query import logs WANDB_ERROR_REPORTING = "WANDB_ERROR_REPORTING" WEAVE_USAGE_ANALYTICS = "WEAVE_USAGE_ANALYTICS" @@ -105,7 +105,7 @@ def is_public() -> bool: def weave_log_format(default: "logs.LogFormat") -> "logs.LogFormat": - from weave.legacy.weave.logs import LogFormat + from weave_query.logs import LogFormat return LogFormat(os.getenv("WEAVE_LOG_FORMAT", default)) diff --git a/weave/legacy/weave/errors.py b/weave_query/weave_query/errors.py similarity index 100% rename from weave/legacy/weave/errors.py rename to weave_query/weave_query/errors.py diff --git a/weave/legacy/weave/execute.py b/weave_query/weave_query/execute.py similarity index 99% rename from weave/legacy/weave/execute.py rename to weave_query/weave_query/execute.py index 42ff32ba230..8280b298eff 100644 --- a/weave/legacy/weave/execute.py +++ b/weave_query/weave_query/execute.py @@ -9,7 +9,7 @@ import typing from collections.abc import Mapping -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types # Configuration # Libraries @@ -17,7 +17,7 @@ # Ops # Trace / cache # Language Features -from weave.legacy.weave import ( +from weave_query import ( errors, engine_trace, environment, @@ -42,7 +42,7 @@ value_or_error, wandb_api, ) -from weave.legacy.weave.language_features.tagging import ( +from weave_query.language_features.tagging import ( opdef_util, process_opdef_resolve_fn, tag_store, diff --git a/weave/legacy/weave/execute_fast.py b/weave_query/weave_query/execute_fast.py similarity index 97% rename from weave/legacy/weave/execute_fast.py rename to weave_query/weave_query/execute_fast.py index b1bb0f2b87d..1fb910eaf7a 100644 --- a/weave/legacy/weave/execute_fast.py +++ b/weave_query/weave_query/execute_fast.py @@ -1,7 +1,7 @@ import logging -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( weave_internal, errors, engine_trace, @@ -14,7 +14,7 @@ language_nullability, op_policy, ) -from weave.legacy.weave.language_features.tagging import tag_store +from weave_query.language_features.tagging import tag_store # from . import object_context diff --git a/weave/legacy/weave/file_base.py b/weave_query/weave_query/file_base.py similarity index 98% rename from weave/legacy/weave/file_base.py rename to weave_query/weave_query/file_base.py index 835d7e1a2f6..b4a45d96251 100644 --- a/weave/legacy/weave/file_base.py +++ b/weave_query/weave_query/file_base.py @@ -2,7 +2,7 @@ import dataclasses import typing -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types TRACE_EXT = "trace.json" diff --git a/weave/legacy/weave/file_local.py b/weave_query/weave_query/file_local.py similarity index 98% rename from weave/legacy/weave/file_local.py rename to weave_query/weave_query/file_local.py index b68d0cd5c83..50b2321a993 100644 --- a/weave/legacy/weave/file_local.py +++ b/weave_query/weave_query/file_local.py @@ -2,7 +2,7 @@ import os import typing -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types from . import file_base, file_util diff --git a/weave/legacy/weave/file_util.py b/weave_query/weave_query/file_util.py similarity index 88% rename from weave/legacy/weave/file_util.py rename to weave_query/weave_query/file_util.py index 3946e1e5d57..7e47852d108 100644 --- a/weave/legacy/weave/file_util.py +++ b/weave_query/weave_query/file_util.py @@ -2,8 +2,8 @@ import pathlib import typing -from weave.legacy.weave import filesystem -from weave.legacy.weave import cache, environment, path_util +from weave_query import filesystem +from weave_query import cache, environment, path_util def get_allowed_dir() -> pathlib.Path: diff --git a/weave/legacy/weave/filesystem.py b/weave_query/weave_query/filesystem.py similarity index 98% rename from weave/legacy/weave/filesystem.py rename to weave_query/weave_query/filesystem.py index c812090c67a..14a11df61ad 100644 --- a/weave/legacy/weave/filesystem.py +++ b/weave_query/weave_query/filesystem.py @@ -20,7 +20,7 @@ from aiofiles.threadpool import binary as aiofiles_binary from aiofiles.threadpool import text as aiofiles_text -from weave.legacy.weave import cache, engine_trace, environment, errors, util +from weave_query import cache, engine_trace, environment, errors, util tracer = engine_trace.tracer() # type: ignore async_utime = aiofiles_os.wrap(os.utime) # type: ignore diff --git a/weave/legacy/weave/forward_graph.py b/weave_query/weave_query/forward_graph.py similarity index 98% rename from weave/legacy/weave/forward_graph.py rename to weave_query/weave_query/forward_graph.py index e22ea9dfdfc..d87c683cad0 100644 --- a/weave/legacy/weave/forward_graph.py +++ b/weave_query/weave_query/forward_graph.py @@ -3,9 +3,9 @@ import contextvars import typing -from weave.legacy.weave import graph +from weave_query import graph -from weave.legacy.weave import errors +from weave_query import errors ExecutableNode = typing.Union[graph.OutputNode, graph.ConstNode] diff --git a/weave/frontend/autotrack.js b/weave_query/weave_query/frontend/autotrack.js similarity index 100% rename from weave/frontend/autotrack.js rename to weave_query/weave_query/frontend/autotrack.js diff --git a/weave/frontend/autotrack.js.map b/weave_query/weave_query/frontend/autotrack.js.map similarity index 100% rename from weave/frontend/autotrack.js.map rename to weave_query/weave_query/frontend/autotrack.js.map diff --git a/weave/frontend/build.sh b/weave_query/weave_query/frontend/build.sh similarity index 100% rename from weave/frontend/build.sh rename to weave_query/weave_query/frontend/build.sh diff --git a/weave/frontend/bundle.sh b/weave_query/weave_query/frontend/bundle.sh similarity index 100% rename from weave/frontend/bundle.sh rename to weave_query/weave_query/frontend/bundle.sh diff --git a/weave/frontend/consentAwareAnalyticsInjector.js b/weave_query/weave_query/frontend/consentAwareAnalyticsInjector.js similarity index 100% rename from weave/frontend/consentAwareAnalyticsInjector.js rename to weave_query/weave_query/frontend/consentAwareAnalyticsInjector.js diff --git a/weave/frontend/core_version b/weave_query/weave_query/frontend/core_version similarity index 100% rename from weave/frontend/core_version rename to weave_query/weave_query/frontend/core_version diff --git a/weave/frontend/favicon.ico b/weave_query/weave_query/frontend/favicon.ico similarity index 100% rename from weave/frontend/favicon.ico rename to weave_query/weave_query/frontend/favicon.ico diff --git a/weave/frontend/index.html b/weave_query/weave_query/frontend/index.html similarity index 100% rename from weave/frontend/index.html rename to weave_query/weave_query/frontend/index.html diff --git a/weave/frontend/jquery-3.6.0.min.js b/weave_query/weave_query/frontend/jquery-3.6.0.min.js similarity index 100% rename from weave/frontend/jquery-3.6.0.min.js rename to weave_query/weave_query/frontend/jquery-3.6.0.min.js diff --git a/weave/frontend/sa.min.js b/weave_query/weave_query/frontend/sa.min.js similarity index 100% rename from weave/frontend/sa.min.js rename to weave_query/weave_query/frontend/sa.min.js diff --git a/weave/frontend/sha1.txt b/weave_query/weave_query/frontend/sha1.txt similarity index 100% rename from weave/frontend/sha1.txt rename to weave_query/weave_query/frontend/sha1.txt diff --git a/weave/frontend/track-v1.js b/weave_query/weave_query/frontend/track-v1.js similarity index 100% rename from weave/frontend/track-v1.js rename to weave_query/weave_query/frontend/track-v1.js diff --git a/weave/legacy/weave/gql_json_cache.py b/weave_query/weave_query/gql_json_cache.py similarity index 100% rename from weave/legacy/weave/gql_json_cache.py rename to weave_query/weave_query/gql_json_cache.py diff --git a/weave/legacy/weave/gql_op_plugin.py b/weave_query/weave_query/gql_op_plugin.py similarity index 95% rename from weave/legacy/weave/gql_op_plugin.py rename to weave_query/weave_query/gql_op_plugin.py index 1b2af19c287..a76cf9b4b1b 100644 --- a/weave/legacy/weave/gql_op_plugin.py +++ b/weave_query/weave_query/gql_op_plugin.py @@ -1,8 +1,8 @@ import typing from dataclasses import dataclass -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import input_provider, op_args, op_def +from weave_query import weave_types as types +from weave_query import input_provider, op_args, op_def # A GQLOutputTypeFn is a function that is called during the refinement phase of the compile pass # to propagate the GQL keys of a node's input types to its output type. diff --git a/weave/legacy/weave/gql_schema.py b/weave_query/weave_query/gql_schema.py similarity index 87% rename from weave/legacy/weave/gql_schema.py rename to weave_query/weave_query/gql_schema.py index eb3181d3be1..1171b38a070 100644 --- a/weave/legacy/weave/gql_schema.py +++ b/weave_query/weave_query/gql_schema.py @@ -2,8 +2,8 @@ import graphql -from weave.legacy.weave import environment -from weave.legacy.weave import wandb_client_api +from weave_query import environment +from weave_query import wandb_client_api _GQL_SCHEMA_CACHE: dict[typing.Optional[str], graphql.GraphQLSchema] = {} diff --git a/weave/legacy/weave/gql_to_weave.py b/weave_query/weave_query/gql_to_weave.py similarity index 97% rename from weave/legacy/weave/gql_to_weave.py rename to weave_query/weave_query/gql_to_weave.py index 0dae36abee8..f52e8f652b9 100644 --- a/weave/legacy/weave/gql_to_weave.py +++ b/weave_query/weave_query/gql_to_weave.py @@ -17,9 +17,9 @@ parse, ) -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import gql_schema +from weave_query import errors +from weave_query import weave_types as types +from weave_query import gql_schema def get_outermost_alias(query_str: str) -> str: diff --git a/weave/legacy/weave/graph.py b/weave_query/weave_query/graph.py similarity index 98% rename from weave/legacy/weave/graph.py rename to weave_query/weave_query/graph.py index 71474069a46..a623a9f25b8 100644 --- a/weave/legacy/weave/graph.py +++ b/weave_query/weave_query/graph.py @@ -2,11 +2,11 @@ import json import typing -from weave.legacy.weave import weave_types -from weave.legacy.weave import uris, errors, storage +from weave_query import weave_types +from weave_query import uris, errors, storage if typing.TYPE_CHECKING: - from weave.legacy.weave import weave_inspector + from weave_query import weave_inspector T = typing.TypeVar("T") @@ -39,7 +39,7 @@ def to_json(self) -> dict: def _inspect(self) -> "weave_inspector.NodeInspector": """Only intended to be used by developers to help debug the graph.""" # Circular import, so we do it here. - from weave.legacy.weave import weave_inspector + from weave_query import weave_inspector return weave_inspector.NodeInspector(self) @@ -187,7 +187,7 @@ def __init__(self, type: weave_types.Type, val: typing.Any) -> None: @classmethod def from_json(cls, obj: dict) -> "ConstNode": - from weave.legacy.weave import dispatch + from weave_query import dispatch val = obj["val"] if isinstance(val, dict) and "nodeType" in val: @@ -239,7 +239,7 @@ def op_full_name(op: Op) -> str: def node_expr_str(node: Node) -> str: - from weave.legacy.weave import partial_object + from weave_query import partial_object if isinstance(node, OutputNode): param_names = list(node.from_op.inputs.keys()) diff --git a/weave/legacy/weave/graph_debug.py b/weave_query/weave_query/graph_debug.py similarity index 98% rename from weave/legacy/weave/graph_debug.py rename to weave_query/weave_query/graph_debug.py index 539ba38b8af..68068804171 100644 --- a/weave/legacy/weave/graph_debug.py +++ b/weave_query/weave_query/graph_debug.py @@ -2,8 +2,8 @@ import textwrap import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import forward_graph, graph +from weave_query import weave_types as types +from weave_query import forward_graph, graph class _CombinedConstVal: @@ -123,7 +123,7 @@ def node_expr_str_full(node: graph.Node) -> str: This function is a copy/modification of of node_expr_str. """ - from weave.legacy.weave import partial_object + from weave_query import partial_object if isinstance(node, graph.OutputNode): if node.from_op.name == "dict": diff --git a/weave/legacy/weave/graph_mapper.py b/weave_query/weave_query/graph_mapper.py similarity index 75% rename from weave/legacy/weave/graph_mapper.py rename to weave_query/weave_query/graph_mapper.py index fab4bfc6cd2..f8b775e6e2d 100644 --- a/weave/legacy/weave/graph_mapper.py +++ b/weave_query/weave_query/graph_mapper.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import ref_base -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph, mappers, node_ref -from weave.legacy.weave import mappers_python_def as mappers_python +from weave_query import ref_base +from weave_query import weave_types as types +from weave_query import graph, mappers, node_ref +from weave_query import mappers_python_def as mappers_python class FunctionToPyFunction(mappers.Mapper): diff --git a/weave/legacy/weave/infer_types.py b/weave_query/weave_query/infer_types.py similarity index 97% rename from weave/legacy/weave/infer_types.py rename to weave_query/weave_query/infer_types.py index 018b485d00f..378ac490efa 100644 --- a/weave/legacy/weave/infer_types.py +++ b/weave_query/weave_query/infer_types.py @@ -6,9 +6,9 @@ import typing_extensions -from weave.legacy.weave import errors, graph +from weave_query import errors, graph -from weave.legacy.weave import weave_types +from weave_query import weave_types class TypedDictLike: diff --git a/weave/legacy/weave/input_provider.py b/weave_query/weave_query/input_provider.py similarity index 100% rename from weave/legacy/weave/input_provider.py rename to weave_query/weave_query/input_provider.py diff --git a/weave/legacy/weave/io_service.py b/weave_query/weave_query/io_service.py similarity index 99% rename from weave/legacy/weave/io_service.py rename to weave_query/weave_query/io_service.py index 8e19392040b..79b917d3634 100644 --- a/weave/legacy/weave/io_service.py +++ b/weave_query/weave_query/io_service.py @@ -22,7 +22,7 @@ import aioprocessing -from weave.legacy.weave import ( +from weave_query import ( weave_http, filesystem, errors, diff --git a/weave/legacy/weave/language_autocall.py b/weave_query/weave_query/language_autocall.py similarity index 93% rename from weave/legacy/weave/language_autocall.py rename to weave_query/weave_query/language_autocall.py index 97f87e7f01b..51a9ecf25ce 100644 --- a/weave/legacy/weave/language_autocall.py +++ b/weave_query/weave_query/language_autocall.py @@ -15,8 +15,8 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import op_args +from weave_query import weave_types as types +from weave_query import op_args def update_input_types( diff --git a/weave/legacy/weave/arrow/__init__.py b/weave_query/weave_query/language_features/__init__.py similarity index 100% rename from weave/legacy/weave/arrow/__init__.py rename to weave_query/weave_query/language_features/__init__.py diff --git a/weave/legacy/weave/ecosystem/twitter/__init__.py b/weave_query/weave_query/language_features/tagging/__init__.py similarity index 100% rename from weave/legacy/weave/ecosystem/twitter/__init__.py rename to weave_query/weave_query/language_features/tagging/__init__.py diff --git a/weave/legacy/weave/language_features/tagging/is_tag_getter.py b/weave_query/weave_query/language_features/tagging/is_tag_getter.py similarity index 84% rename from weave/legacy/weave/language_features/tagging/is_tag_getter.py rename to weave_query/weave_query/language_features/tagging/is_tag_getter.py index ccc4969f256..17eb7905bb6 100644 --- a/weave/legacy/weave/language_features/tagging/is_tag_getter.py +++ b/weave_query/weave_query/language_features/tagging/is_tag_getter.py @@ -1,11 +1,11 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import op_args -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query import op_args +from weave_query.language_features.tagging import tagged_value_type if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef # This is a heuristic that is used to determine if an op is a tag getter. diff --git a/weave/legacy/weave/language_features/tagging/make_tag_getter_op.py b/weave_query/weave_query/language_features/tagging/make_tag_getter_op.py similarity index 87% rename from weave/legacy/weave/language_features/tagging/make_tag_getter_op.py rename to weave_query/weave_query/language_features/tagging/make_tag_getter_op.py index cd807c2c2ac..30f97146ec0 100644 --- a/weave/legacy/weave/language_features/tagging/make_tag_getter_op.py +++ b/weave_query/weave_query/language_features/tagging/make_tag_getter_op.py @@ -1,12 +1,12 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import context_state as _context_state -from weave.legacy.weave import decorator_op -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type +from weave_query import weave_types as types +from weave_query import context_state as _context_state +from weave_query import decorator_op +from weave_query.language_features.tagging import tag_store, tagged_value_type if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef def make_tag_getter_op( @@ -26,7 +26,7 @@ def make_tag_getter_op( Returns: The op. """ - from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType + from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType _loading_builtins_token = _context_state.set_loading_built_ins() diff --git a/weave/legacy/weave/language_features/tagging/opdef_util.py b/weave_query/weave_query/language_features/tagging/opdef_util.py similarity index 91% rename from weave/legacy/weave/language_features/tagging/opdef_util.py rename to weave_query/weave_query/language_features/tagging/opdef_util.py index 2e5dee35dc4..016a699efda 100644 --- a/weave/legacy/weave/language_features/tagging/opdef_util.py +++ b/weave_query/weave_query/language_features/tagging/opdef_util.py @@ -1,10 +1,10 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query.language_features.tagging import tagged_value_type if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef # Determines if the op_def should ftag the output with the input. Currently, this is true diff --git a/weave/legacy/weave/language_features/tagging/process_opdef_output_type.py b/weave_query/weave_query/language_features/tagging/process_opdef_output_type.py similarity index 85% rename from weave/legacy/weave/language_features/tagging/process_opdef_output_type.py rename to weave_query/weave_query/language_features/tagging/process_opdef_output_type.py index cc9c40913a6..60855a9e3c5 100644 --- a/weave/legacy/weave/language_features/tagging/process_opdef_output_type.py +++ b/weave_query/weave_query/language_features/tagging/process_opdef_output_type.py @@ -5,21 +5,21 @@ import typing -from weave.legacy.weave import registry_mem -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph -from weave.legacy.weave.language_features.tagging.opdef_util import ( +from weave_query import registry_mem +from weave_query import weave_types as types +from weave_query import graph +from weave_query.language_features.tagging.opdef_util import ( should_flow_tags, should_tag_op_def_outputs, ) -from weave.legacy.weave.language_features.tagging.tagging_op_logic import ( +from weave_query.language_features.tagging.tagging_op_logic import ( op_get_tag_type_resolver, op_make_type_key_tag_resolver, op_make_type_tagged_resolver, ) if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef # The following 3 functions are used to get the ops without introducing circular references diff --git a/weave/legacy/weave/language_features/tagging/process_opdef_resolve_fn.py b/weave_query/weave_query/language_features/tagging/process_opdef_resolve_fn.py similarity index 91% rename from weave/legacy/weave/language_features/tagging/process_opdef_resolve_fn.py rename to weave_query/weave_query/language_features/tagging/process_opdef_resolve_fn.py index 86e8275df33..612d7965e4a 100644 --- a/weave/legacy/weave/language_features/tagging/process_opdef_resolve_fn.py +++ b/weave_query/weave_query/language_features/tagging/process_opdef_resolve_fn.py @@ -11,20 +11,20 @@ import typing_extensions from pyarrow import compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box -from weave.legacy.weave.arrow.arrow_tags import awl_add_arrow_tags -from weave.legacy.weave.arrow.list_ import ArrowWeaveList -from weave.legacy.weave.language_features.tagging import tag_store -from weave.legacy.weave.language_features.tagging.opdef_util import ( +from weave_query import weave_types as types +from weave_query import box +from weave_query.arrow.arrow_tags import awl_add_arrow_tags +from weave_query.arrow.list_ import ArrowWeaveList +from weave_query.language_features.tagging import tag_store +from weave_query.language_features.tagging.opdef_util import ( get_first_arg, should_flow_tags, should_tag_op_def_outputs, ) -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef def _is_tagged_value(val: types.Type) -> typing_extensions.TypeGuard[TaggedValueType]: @@ -38,7 +38,7 @@ def _is_optional_tagged_value( def _strip_tags(val: typing.Any) -> typing.Any: - from weave.legacy.weave.ops_arrow import ArrowWeaveList + from weave_query.ops_arrow import ArrowWeaveList if isinstance(val, ArrowWeaveList): if _is_tagged_value(val.object_type): diff --git a/weave/legacy/weave/language_features/tagging/tag_store.py b/weave_query/weave_query/language_features/tagging/tag_store.py similarity index 98% rename from weave/legacy/weave/language_features/tagging/tag_store.py rename to weave_query/weave_query/language_features/tagging/tag_store.py index 577a446cb8c..7ce213e5407 100644 --- a/weave/legacy/weave/language_features/tagging/tag_store.py +++ b/weave_query/weave_query/language_features/tagging/tag_store.py @@ -22,9 +22,9 @@ from collections import defaultdict from contextlib import contextmanager -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import engine_trace, box +from weave_query import errors +from weave_query import weave_types as types +from weave_query import engine_trace, box statsd = engine_trace.statsd() # type: ignore diff --git a/weave/legacy/weave/language_features/tagging/tagged_value_type.py b/weave_query/weave_query/language_features/tagging/tagged_value_type.py similarity index 98% rename from weave/legacy/weave/language_features/tagging/tagged_value_type.py rename to weave_query/weave_query/language_features/tagging/tagged_value_type.py index 3a95169fba0..4c50d0149af 100644 --- a/weave/legacy/weave/language_features/tagging/tagged_value_type.py +++ b/weave_query/weave_query/language_features/tagging/tagged_value_type.py @@ -30,13 +30,13 @@ import json import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box, mappers, mappers_python -from weave.legacy.weave.language_features.tagging import tag_store +from weave_query import errors +from weave_query import weave_types as types +from weave_query import box, mappers, mappers_python +from weave_query.language_features.tagging import tag_store if typing.TYPE_CHECKING: - from weave.legacy.weave import artifact_base, artifact_fs + from weave_query import artifact_base, artifact_fs def flatten_tag_type_to_typed_dict(tag_type: types.Type) -> types.TypedDict: diff --git a/weave/legacy/weave/language_features/tagging/tagged_value_type_helpers.py b/weave_query/weave_query/language_features/tagging/tagged_value_type_helpers.py similarity index 94% rename from weave/legacy/weave/language_features/tagging/tagged_value_type_helpers.py rename to weave_query/weave_query/language_features/tagging/tagged_value_type_helpers.py index 2e3ab0b656c..bdf4ec210e5 100644 --- a/weave/legacy/weave/language_features/tagging/tagged_value_type_helpers.py +++ b/weave_query/weave_query/language_features/tagging/tagged_value_type_helpers.py @@ -1,7 +1,7 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query.language_features.tagging import tagged_value_type def push_down_tags_from_container_type_to_element_type( diff --git a/weave/legacy/weave/language_features/tagging/tagging_op_logic.py b/weave_query/weave_query/language_features/tagging/tagging_op_logic.py similarity index 86% rename from weave/legacy/weave/language_features/tagging/tagging_op_logic.py rename to weave_query/weave_query/language_features/tagging/tagging_op_logic.py index 1d88dde0491..cf7b921883a 100644 --- a/weave/legacy/weave/language_features/tagging/tagging_op_logic.py +++ b/weave_query/weave_query/language_features/tagging/tagging_op_logic.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query import weave_types as types +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType def op_get_tag_type_resolver(obj_type: types.Type) -> types.Type: diff --git a/weave/legacy/weave/language_features/tagging/tagging_ops.py b/weave_query/weave_query/language_features/tagging/tagging_ops.py similarity index 84% rename from weave/legacy/weave/language_features/tagging/tagging_ops.py rename to weave_query/weave_query/language_features/tagging/tagging_ops.py index 36e7e553d8b..b4b38f97001 100644 --- a/weave/legacy/weave/language_features/tagging/tagging_ops.py +++ b/weave_query/weave_query/language_features/tagging/tagging_ops.py @@ -1,6 +1,6 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import decorator_op -from weave.legacy.weave.language_features.tagging import tagging_op_logic +from weave_query import weave_types as types +from weave_query import decorator_op +from weave_query.language_features.tagging import tagging_op_logic @decorator_op.op( diff --git a/weave/legacy/weave/language_nullability.py b/weave_query/weave_query/language_nullability.py similarity index 83% rename from weave/legacy/weave/language_nullability.py rename to weave_query/weave_query/language_nullability.py index c5ef29999cd..b9263d38134 100644 --- a/weave/legacy/weave/language_nullability.py +++ b/weave_query/weave_query/language_nullability.py @@ -1,11 +1,11 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query import box +from weave_query.language_features.tagging import tagged_value_type if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def as OpDef + from weave_query import op_def as OpDef def should_force_none_result( diff --git a/weave/legacy/weave/logs.py b/weave_query/weave_query/logs.py similarity index 99% rename from weave/legacy/weave/logs.py rename to weave_query/weave_query/logs.py index a28d7c2bbf3..bfb338f9dc7 100644 --- a/weave/legacy/weave/logs.py +++ b/weave_query/weave_query/logs.py @@ -12,7 +12,7 @@ from pythonjsonlogger import jsonlogger -from weave.legacy.weave import environment +from weave_query import environment try: from flask.logging import wsgi_errors_stream diff --git a/weave/legacy/weave/make_type.py b/weave_query/weave_query/make_type.py similarity index 81% rename from weave/legacy/weave/make_type.py rename to weave_query/weave_query/make_type.py index 69a8eb786a7..b85c8d8e7b5 100644 --- a/weave/legacy/weave/make_type.py +++ b/weave_query/weave_query/make_type.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types +from weave_query import weave_internal +from weave_query import weave_types as types # TODO: Consider if this should accept a *args, **kwargs? diff --git a/weave/legacy/weave/mappers.py b/weave_query/weave_query/mappers.py similarity index 81% rename from weave/legacy/weave/mappers.py rename to weave_query/weave_query/mappers.py index 28e4d4a785c..7356682611f 100644 --- a/weave/legacy/weave/mappers.py +++ b/weave_query/weave_query/mappers.py @@ -1,8 +1,8 @@ import typing if typing.TYPE_CHECKING: - from weave.legacy.weave import weave_types as types - from weave.legacy.weave import artifact_local + from weave_query import weave_types as types + from weave_query import artifact_local class Mapper: diff --git a/weave/legacy/weave/mappers_arrow.py b/weave_query/weave_query/mappers_arrow.py similarity index 98% rename from weave/legacy/weave/mappers_arrow.py rename to weave_query/weave_query/mappers_arrow.py index 35d5cca157d..f7a7cb1c107 100644 --- a/weave/legacy/weave/mappers_arrow.py +++ b/weave_query/weave_query/mappers_arrow.py @@ -5,9 +5,9 @@ import pyarrow as pa -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query import ( arrow_util, artifact_base, box, @@ -17,9 +17,9 @@ partial_object, ref_base, ) -from weave.legacy.weave import mappers_python_def as mappers_python -from weave.legacy.weave.arrow import arrow -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import mappers_python_def as mappers_python +from weave_query.arrow import arrow +from weave_query.language_features.tagging import tagged_value_type _in_tagging_context = contextvars.ContextVar("in_tagging_context", default=False) diff --git a/weave/legacy/weave/mappers_gql.py b/weave_query/weave_query/mappers_gql.py similarity index 93% rename from weave/legacy/weave/mappers_gql.py rename to weave_query/weave_query/mappers_gql.py index 4abfbcc62b5..ceb7ce256c5 100644 --- a/weave/legacy/weave/mappers_gql.py +++ b/weave_query/weave_query/mappers_gql.py @@ -1,10 +1,10 @@ import json -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import gql_json_cache, mappers -from weave.legacy.weave.mappers_weave import UnionMapper -from weave.legacy.weave.partial_object import PartialObjectType +from weave_query import errors +from weave_query import weave_types as types +from weave_query import gql_json_cache, mappers +from weave_query.mappers_weave import UnionMapper +from weave_query.partial_object import PartialObjectType from .mappers_python_def import ( BoolToPyBool, diff --git a/weave/legacy/weave/mappers_publisher.py b/weave_query/weave_query/mappers_publisher.py similarity index 92% rename from weave/legacy/weave/mappers_publisher.py rename to weave_query/weave_query/mappers_publisher.py index 2a53e30e3fa..5374705bbc7 100644 --- a/weave/legacy/weave/mappers_publisher.py +++ b/weave_query/weave_query/mappers_publisher.py @@ -2,13 +2,13 @@ import dataclasses import typing -from weave.legacy.weave import storage -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.node_ref import ref_to_node +from weave_query import storage +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query.node_ref import ref_to_node -# from weave.legacy.weave.ops_primitives import weave_api -from weave.legacy.weave import ( +# from weave_query.ops_primitives import weave_api +from weave_query import ( artifact_local, box, context, @@ -19,9 +19,9 @@ ref_base, errors, ) -from weave.legacy.weave.artifact_wandb import likely_commit_hash -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type -from weave.legacy.weave.uris import WeaveURI +from weave_query.artifact_wandb import likely_commit_hash +from weave_query.language_features.tagging import tag_store, tagged_value_type +from weave_query.uris import WeaveURI class RefToPyRef(mappers.Mapper): @@ -128,7 +128,7 @@ def map_to_python_remote_(type, mapper, artifact, path=[], mapper_options=None): def _node_publish_mapper(node: graph.Node) -> typing.Optional[graph.Node]: - from weave.legacy.weave.ops_primitives import weave_api + from weave_query.ops_primitives import weave_api if _node_is_op_get(node): node = typing.cast(graph.OutputNode, node) diff --git a/weave/legacy/weave/mappers_python.py b/weave_query/weave_query/mappers_python.py similarity index 85% rename from weave/legacy/weave/mappers_python.py rename to weave_query/weave_query/mappers_python.py index 30b41aee953..692725fc339 100644 --- a/weave/legacy/weave/mappers_python.py +++ b/weave_query/weave_query/mappers_python.py @@ -3,8 +3,8 @@ import typing if typing.TYPE_CHECKING: - from weave.legacy.weave import weave_types - from weave.legacy.weave import artifact_base, mappers + from weave_query import weave_types + from weave_query import artifact_base, mappers def map_to_python( # type: ignore[empty-body] diff --git a/weave/legacy/weave/mappers_python_def.py b/weave_query/weave_query/mappers_python_def.py similarity index 97% rename from weave/legacy/weave/mappers_python_def.py rename to weave_query/weave_query/mappers_python_def.py index 36faaad7ffb..7c39328cdee 100644 --- a/weave/legacy/weave/mappers_python_def.py +++ b/weave_query/weave_query/mappers_python_def.py @@ -4,9 +4,9 @@ import math import typing -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import storage +from weave_query import weave_types as types +from weave_query import ( artifact_fs, box, mappers, @@ -16,9 +16,9 @@ val_const, errors, ) -from weave.legacy.weave import timestamp as weave_timestamp -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.partial_object import PartialObject, PartialObjectType +from weave_query import timestamp as weave_timestamp +from weave_query.language_features.tagging import tagged_value_type +from weave_query.partial_object import PartialObject, PartialObjectType class TypedDictToPyDict(mappers_weave.TypedDictMapper): @@ -60,7 +60,7 @@ def apply(self, obj): class ObjectDictToObject(mappers_weave.ObjectMapper): def apply(self, obj): - from weave.legacy.weave.op_def_type import OpDefType + from weave_query.op_def_type import OpDefType # Only add keys that are accepted by the constructor. # This is used for Panels where we have an Class-level id attribute @@ -332,7 +332,7 @@ def __init__( self._use_stable_refs = use_stable_refs def apply(self, obj): - from weave.legacy.weave import op_def + from weave_query import op_def try: return self.type.instance_to_dict(obj) diff --git a/weave/legacy/weave/mappers_weave.py b/weave_query/weave_query/mappers_weave.py similarity index 95% rename from weave/legacy/weave/mappers_weave.py rename to weave_query/weave_query/mappers_weave.py index e33916f7670..8adde488661 100644 --- a/weave/legacy/weave/mappers_weave.py +++ b/weave_query/weave_query/mappers_weave.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import mappers -from weave.legacy.weave.partial_object import PartialObjectType +from weave_query import weave_types as types +from weave_query import mappers +from weave_query.partial_object import PartialObjectType class TypedDictMapper(mappers.Mapper): diff --git a/weave/legacy/weave/memo.py b/weave_query/weave_query/memo.py similarity index 97% rename from weave/legacy/weave/memo.py rename to weave_query/weave_query/memo.py index 379a76fd035..55fb17ea4ad 100644 --- a/weave/legacy/weave/memo.py +++ b/weave_query/weave_query/memo.py @@ -2,7 +2,7 @@ import contextvars import typing -from weave.legacy.weave import engine_trace +from weave_query import engine_trace statsd = engine_trace.statsd() # type: ignore diff --git a/weave/legacy/weave/monitoring/__init__.py b/weave_query/weave_query/monitoring/__init__.py similarity index 58% rename from weave/legacy/weave/monitoring/__init__.py rename to weave_query/weave_query/monitoring/__init__.py index e40a17557df..cc25c5f0a3c 100644 --- a/weave/legacy/weave/monitoring/__init__.py +++ b/weave_query/weave_query/monitoring/__init__.py @@ -2,11 +2,11 @@ # TODO: Notebook Walkthrough -from weave.legacy.weave.monitoring.monitor import ( +from weave_query.monitoring.monitor import ( default_monitor, deinit_monitor, init_monitor, ) -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +from weave_query.wandb_interface.wandb_stream_table import StreamTable __all__ = ["StreamTable", "monitor", "openai"] diff --git a/weave/legacy/weave/monitoring/langchain.py b/weave_query/weave_query/monitoring/langchain.py similarity index 94% rename from weave/legacy/weave/monitoring/langchain.py rename to weave_query/weave_query/monitoring/langchain.py index 84371bbefee..f326c2f55ae 100644 --- a/weave/legacy/weave/monitoring/langchain.py +++ b/weave_query/weave_query/monitoring/langchain.py @@ -11,8 +11,8 @@ from langchain.callbacks.tracers.schemas import Run from wandb.sdk.data_types import trace_tree -from weave.legacy.weave import stream_data_interfaces -from weave.legacy.weave.monitoring import StreamTable +from weave_query import stream_data_interfaces +from weave_query.monitoring import StreamTable def _hash_id(s: str) -> str: diff --git a/weave/legacy/weave/monitoring/monitor.py b/weave_query/weave_query/monitoring/monitor.py similarity index 98% rename from weave/legacy/weave/monitoring/monitor.py rename to weave_query/weave_query/monitoring/monitor.py index 352cff56981..8b8b94e12ae 100644 --- a/weave/legacy/weave/monitoring/monitor.py +++ b/weave_query/weave_query/monitoring/monitor.py @@ -13,13 +13,13 @@ import typing import uuid -from weave.legacy.weave import errors -from weave.legacy.weave import ( +from weave_query import errors +from weave_query import ( graph, run_streamtable_span, stream_data_interfaces ) -from weave.legacy.weave.wandb_interface.wandb_stream_table import StreamTable +from weave_query.wandb_interface.wandb_stream_table import StreamTable from weave.trace import context as trace_context from weave.trace.client_context import weave_client as weave_client_context diff --git a/weave/legacy/weave/monitoring/openai/__init__.py b/weave_query/weave_query/monitoring/openai/__init__.py similarity index 100% rename from weave/legacy/weave/monitoring/openai/__init__.py rename to weave_query/weave_query/monitoring/openai/__init__.py diff --git a/weave/legacy/weave/monitoring/openai/models.py b/weave_query/weave_query/monitoring/openai/models.py similarity index 90% rename from weave/legacy/weave/monitoring/openai/models.py rename to weave_query/weave_query/monitoring/openai/models.py index 479d497c189..ef2fe10a836 100644 --- a/weave/legacy/weave/monitoring/openai/models.py +++ b/weave_query/weave_query/monitoring/openai/models.py @@ -7,8 +7,8 @@ ) from pydantic import BaseModel, Field -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.monitoring import monitor +from weave_query import weave_types as types +from weave_query.monitoring import monitor class ModelTokensConfig(BaseModel): diff --git a/weave/legacy/weave/monitoring/openai/openai.py b/weave_query/weave_query/monitoring/openai/openai.py similarity index 98% rename from weave/legacy/weave/monitoring/openai/openai.py rename to weave_query/weave_query/monitoring/openai/openai.py index 8a04704c4a0..bc3bbef69fb 100644 --- a/weave/legacy/weave/monitoring/openai/openai.py +++ b/weave_query/weave_query/monitoring/openai/openai.py @@ -11,9 +11,9 @@ from openai.types.chat import ChatCompletion, ChatCompletionMessageParam from packaging import version from weave.trace.client_context import weave_client as weave_client_context -from weave.legacy.weave.monitoring.monitor import _get_global_monitor -from weave.legacy.weave.monitoring.openai.models import * -from weave.legacy.weave.monitoring.openai.util import * +from weave_query.monitoring.monitor import _get_global_monitor +from weave_query.monitoring.openai.models import * +from weave_query.monitoring.openai.util import * from weave.trace.op import Op from weave.trace.op import op as op_deco diff --git a/weave/legacy/weave/monitoring/openai/util.py b/weave_query/weave_query/monitoring/openai/util.py similarity index 98% rename from weave/legacy/weave/monitoring/openai/util.py rename to weave_query/weave_query/monitoring/openai/util.py index e20f2fddbb0..631e7537184 100644 --- a/weave/legacy/weave/monitoring/openai/util.py +++ b/weave_query/weave_query/monitoring/openai/util.py @@ -8,7 +8,7 @@ from openai.types.chat.chat_completion_chunk import ChatCompletionChunk, Choice from openai.types.completion_usage import CompletionUsage -from weave.legacy.weave.monitoring.openai.models import * +from weave_query.monitoring.openai.models import * T = TypeVar("T") diff --git a/weave/legacy/weave/node_ref.py b/weave_query/weave_query/node_ref.py similarity index 97% rename from weave/legacy/weave/node_ref.py rename to weave_query/weave_query/node_ref.py index 2a130af4749..2ba61614d5d 100644 --- a/weave/legacy/weave/node_ref.py +++ b/weave_query/weave_query/node_ref.py @@ -1,7 +1,7 @@ import copy import typing -from weave.legacy.weave import graph +from weave_query import graph from . import ref_base @@ -88,7 +88,7 @@ def ref_to_node(ref: ref_base.Ref) -> typing.Optional[graph.Node]: ref = copy.copy(ref) ref.extra = [] - from weave.legacy.weave.ops_primitives import get + from weave_query.ops_primitives import get node = get(str(ref)) for str_key in extra: diff --git a/weave/legacy/weave/object_context.py b/weave_query/weave_query/object_context.py similarity index 95% rename from weave/legacy/weave/object_context.py rename to weave_query/weave_query/object_context.py index d062a02652c..845be388862 100644 --- a/weave/legacy/weave/object_context.py +++ b/weave_query/weave_query/object_context.py @@ -12,9 +12,9 @@ from typing import Any if typing.TYPE_CHECKING: - from weave.legacy.weave import ref_base -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box, uris + from weave_query import ref_base +from weave_query import weave_types as types +from weave_query import box, uris @dataclasses.dataclass @@ -90,7 +90,7 @@ def add_mutation( self.objects[target_uri].mutations.append(mutation) def finish_mutation(self, target_uri: str) -> None: - from weave.legacy.weave import artifact_fs, artifact_local, artifact_wandb + from weave_query import artifact_fs, artifact_local, artifact_wandb target_record = self.objects.get(target_uri) if target_record is None: @@ -115,7 +115,7 @@ def finish_mutation(self, target_uri: str) -> None: if target_branch is None: raise ValueError("No branch to finish mutation on") - from weave.legacy.weave import artifact_wandb + from weave_query import artifact_wandb # Hack: if the target branch looks like a commit hash, then we # don't want to use it as a branch - this is the case that we are diff --git a/weave/legacy/weave/object_type_ref_util.py b/weave_query/weave_query/object_type_ref_util.py similarity index 94% rename from weave/legacy/weave/object_type_ref_util.py rename to weave_query/weave_query/object_type_ref_util.py index e841087b064..81898d1c1fb 100644 --- a/weave/legacy/weave/object_type_ref_util.py +++ b/weave_query/weave_query/object_type_ref_util.py @@ -1,7 +1,7 @@ import typing -from weave.legacy.weave import ref_util -from weave.legacy.weave import context_state +from weave_query import ref_util +from weave_query import context_state def make_object_getattribute( diff --git a/weave/legacy/weave/op_aliases.py b/weave_query/weave_query/op_aliases.py similarity index 100% rename from weave/legacy/weave/op_aliases.py rename to weave_query/weave_query/op_aliases.py diff --git a/weave/legacy/weave/op_args.py b/weave_query/weave_query/op_args.py similarity index 98% rename from weave/legacy/weave/op_args.py rename to weave_query/weave_query/op_args.py index e0dd2400501..8a02be9446e 100644 --- a/weave/legacy/weave/op_args.py +++ b/weave_query/weave_query/op_args.py @@ -1,8 +1,8 @@ import typing from dataclasses import dataclass -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import debug_types +from weave_query import weave_types as types +from weave_query import debug_types BT = typing.TypeVar("BT") diff --git a/weave/legacy/weave/op_def.py b/weave_query/weave_query/op_def.py similarity index 98% rename from weave/legacy/weave/op_def.py rename to weave_query/weave_query/op_def.py index 01db7453f72..c4fbf97338e 100644 --- a/weave/legacy/weave/op_def.py +++ b/weave_query/weave_query/op_def.py @@ -5,8 +5,8 @@ import inspect import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query import ( weave_internal, errors, context_state, @@ -21,13 +21,13 @@ pyfunc_type_util, uris, ) -from weave.legacy.weave.language_features.tagging import ( +from weave_query.language_features.tagging import ( opdef_util, process_opdef_output_type, process_opdef_resolve_fn, tagged_value_type, ) -from weave.legacy.weave.weavejs_fixes import fixup_node +from weave_query.weavejs_fixes import fixup_node @@ -284,7 +284,7 @@ def __call__(_self, *args, **kwargs): # convert arguments to Const nodes. There is no type checking. # May need to fix this, but the patterns in test_mutation2 work # now. - from weave.legacy.weave import object_context + from weave_query import object_context with object_context.object_context(): return _self.resolve_fn(*args, **kwargs) @@ -308,7 +308,7 @@ def unrefined_output_type_for_params(self, params: typing.Dict[str, graph.Node]) return self.output_type(new_input_type) def is_gql_root_resolver(self): - from weave.legacy.weave import gql_op_plugin + from weave_query import gql_op_plugin return self in gql_op_plugin._ROOT_RESOLVERS @@ -351,14 +351,14 @@ def _replace_var_with_val(n): tracer = engine_trace.tracer() # type: ignore with tracer.trace("refine.%s" % _self.uri): # api's use auto-creates client. TODO: Fix inline import - from weave.legacy.weave import api as api + from weave_query import api as api final_output_type = api.use(called_refine_output_type) # type: ignore if final_output_type == None: # This can happen due to nullability. In that case, accept the output type is null final_output_type = types.NoneType() # Have to deref if in case a ref came back... - from weave.legacy.weave import storage + from weave_query import storage final_output_type = storage.deref(final_output_type) @@ -369,7 +369,7 @@ def _replace_var_with_val(n): ) else: final_output_type = _self.unrefined_output_type_for_params(bound_params) - from weave.legacy.weave import dispatch + from weave_query import dispatch return dispatch.RuntimeOutputNode(final_output_type, _self.uri, bound_params) diff --git a/weave/legacy/weave/op_def_type.py b/weave_query/weave_query/op_def_type.py similarity index 99% rename from weave/legacy/weave/op_def_type.py rename to weave_query/weave_query/op_def_type.py index e52d61d8dce..50c91a2f927 100644 --- a/weave/legacy/weave/op_def_type.py +++ b/weave_query/weave_query/op_def_type.py @@ -11,9 +11,9 @@ from _ast import AsyncFunctionDef, ExceptHandler from typing import Any -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import storage +from weave_query import weave_types as types +from weave_query import ( artifact_fs, artifact_local, context_state, @@ -447,7 +447,7 @@ def load_instance(cls, artifact, name, extra=None): except FileNotFoundError: pass - from weave.legacy.weave import artifact_wandb + from weave_query import artifact_wandb is_wandb_artifact = False if isinstance(artifact, artifact_wandb.WandbArtifact): diff --git a/weave/legacy/weave/op_execute.py b/weave_query/weave_query/op_execute.py similarity index 100% rename from weave/legacy/weave/op_execute.py rename to weave_query/weave_query/op_execute.py diff --git a/weave/legacy/weave/op_policy.py b/weave_query/weave_query/op_policy.py similarity index 100% rename from weave/legacy/weave/op_policy.py rename to weave_query/weave_query/op_policy.py diff --git a/weave/legacy/weave/ops.py b/weave_query/weave_query/ops.py similarity index 100% rename from weave/legacy/weave/ops.py rename to weave_query/weave_query/ops.py diff --git a/weave_query/weave_query/ops_arrow/__init__.py b/weave_query/weave_query/ops_arrow/__init__.py new file mode 100644 index 00000000000..4812b9f9295 --- /dev/null +++ b/weave_query/weave_query/ops_arrow/__init__.py @@ -0,0 +1,12 @@ +from weave_query import context_state as _context_state + +_loading_builtins_token = _context_state.set_loading_built_ins() + +from weave_query.arrow.arrow import * +from weave_query.arrow.convert import * +from weave_query.arrow.list_ import * +from weave_query.ops_arrow import ops +from weave_query.ops_arrow.list_range import range +from weave_query.ops_arrow.vectorize import vectorize + +_context_state.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/ops_arrow/arraylist_ops.py b/weave_query/weave_query/ops_arrow/arraylist_ops.py similarity index 96% rename from weave/legacy/weave/ops_arrow/arraylist_ops.py rename to weave_query/weave_query/ops_arrow/arraylist_ops.py index 209cc8b0813..d13ed0edcb4 100644 --- a/weave/legacy/weave/ops_arrow/arraylist_ops.py +++ b/weave_query/weave_query/ops_arrow/arraylist_ops.py @@ -3,11 +3,11 @@ import pyarrow as pa from pyarrow import compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType, arrow_as_array -from weave.legacy.weave.arrow.list_ import ArrowWeaveList -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_types as types +from weave_query.arrow.arrow import ArrowWeaveListType, arrow_as_array +from weave_query.arrow.list_ import ArrowWeaveList +from weave_query.decorator_arrow_op import arrow_op +from weave_query.language_features.tagging import tagged_value_type def _arrowweavelistlist_listindex_output_type(input_types): @@ -70,7 +70,7 @@ def listindex(self, index): def _list_op_output_object_type(input_types): self_type = input_types["self"] - from weave.legacy.weave import op_def + from weave_query import op_def def _remove_tags(t): if isinstance(t, tagged_value_type.TaggedValueType): diff --git a/weave/legacy/weave/ops_arrow/boolean.py b/weave_query/weave_query/ops_arrow/boolean.py similarity index 93% rename from weave/legacy/weave/ops_arrow/boolean.py rename to weave_query/weave_query/ops_arrow/boolean.py index 5131f10544b..3678f827f58 100644 --- a/weave/legacy/weave/ops_arrow/boolean.py +++ b/weave_query/weave_query/ops_arrow/boolean.py @@ -1,11 +1,11 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.ops_arrow import util +from weave_query import weave_types as types +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.decorator_op import op +from weave_query.ops_arrow import util unary_input_type = { "self": ArrowWeaveListType(types.Boolean()), diff --git a/weave/legacy/weave/ops_arrow/convert_ops.py b/weave_query/weave_query/ops_arrow/convert_ops.py similarity index 71% rename from weave/legacy/weave/ops_arrow/convert_ops.py rename to weave_query/weave_query/ops_arrow/convert_ops.py index d67eaa348c4..fb9616e8775 100644 --- a/weave/legacy/weave/ops_arrow/convert_ops.py +++ b/weave_query/weave_query/ops_arrow/convert_ops.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.arrow import convert +from weave_query.arrow.arrow import ArrowWeaveListType @op( diff --git a/weave/legacy/weave/ops_arrow/date.py b/weave_query/weave_query/ops_arrow/date.py similarity index 94% rename from weave/legacy/weave/ops_arrow/date.py rename to weave_query/weave_query/ops_arrow/date.py index ce84f02cb52..4fd5e897571 100644 --- a/weave/legacy/weave/ops_arrow/date.py +++ b/weave_query/weave_query/ops_arrow/date.py @@ -3,12 +3,12 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import timestamp as weave_timestamp -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.ops_arrow import util +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import timestamp as weave_timestamp +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.ops_arrow import util ARROW_WEAVE_LIST_TIMESTAMP_TYPE = ArrowWeaveListType(types.Timestamp()) ARROW_WEAVE_LIST_BOOLEAN_TYPE = ArrowWeaveListType(types.Boolean()) diff --git a/weave/legacy/weave/ops_arrow/dict.py b/weave_query/weave_query/ops_arrow/dict.py similarity index 96% rename from weave/legacy/weave/ops_arrow/dict.py rename to weave_query/weave_query/ops_arrow/dict.py index 883d2295a43..7cb36b0902f 100644 --- a/weave/legacy/weave/ops_arrow/dict.py +++ b/weave_query/weave_query/ops_arrow/dict.py @@ -3,23 +3,23 @@ import numpy as np import pyarrow as pa -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import _dict_utils -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.arrow import arrow_as_array, offsets_starting_at_zero -from weave.legacy.weave.arrow.arrow_tags import direct_add_arrow_tags -from weave.legacy.weave.arrow.constructors import ( +from weave_query import weave_types as types +from weave_query import _dict_utils +from weave_query.arrow import convert +from weave_query.arrow.arrow import arrow_as_array, offsets_starting_at_zero +from weave_query.arrow.arrow_tags import direct_add_arrow_tags +from weave_query.arrow.constructors import ( vectorized_container_constructor_preprocessor, vectorized_input_types, ) -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.language_features.tagging import ( +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.decorator_op import op +from weave_query.language_features.tagging import ( process_opdef_output_type, ) -from weave.legacy.weave.op_args import OpVarArgs -from weave.legacy.weave.ops_primitives import projection_utils +from weave_query.op_args import OpVarArgs +from weave_query.ops_primitives import projection_utils def typeddict_pick_output_type(input_types): diff --git a/weave/legacy/weave/ops_arrow/list_join.py b/weave_query/weave_query/ops_arrow/list_join.py similarity index 93% rename from weave/legacy/weave/ops_arrow/list_join.py rename to weave_query/weave_query/ops_arrow/list_join.py index 2ba1ed3f158..c64cd85666f 100644 --- a/weave/legacy/weave/ops_arrow/list_join.py +++ b/weave_query/weave_query/ops_arrow/list_join.py @@ -4,24 +4,24 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import engine_trace -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import graph -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.arrow import ( +from weave_query import engine_trace +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import graph +from weave_query.arrow import convert +from weave_query.arrow.arrow import ( ArrowWeaveListType, safe_coalesce, ) -from weave.legacy.weave.arrow.arrow_tags import pushdown_list_tags -from weave.legacy.weave.arrow.list_ import ( +from weave_query.arrow.arrow_tags import pushdown_list_tags +from weave_query.arrow.list_ import ( ArrowWeaveList, awl_zip, make_vec_dict, make_vec_taggedvalue, ) -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.ops_primitives import list_ as primitive_list +from weave_query.language_features.tagging import tagged_value_type +from weave_query.ops_primitives import list_ as primitive_list tracer = engine_trace.tracer() # type: ignore diff --git a/weave/legacy/weave/ops_arrow/list_ops.py b/weave_query/weave_query/ops_arrow/list_ops.py similarity index 97% rename from weave/legacy/weave/ops_arrow/list_ops.py rename to weave_query/weave_query/ops_arrow/list_ops.py index 7fabe4421d4..76c54f0f052 100644 --- a/weave/legacy/weave/ops_arrow/list_ops.py +++ b/weave_query/weave_query/ops_arrow/list_ops.py @@ -7,34 +7,34 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, type_of -from weave.legacy.weave import op_args, op_def -from weave.legacy.weave.arrow import arrow_tags, convert -from weave.legacy.weave.arrow.arrow import ( +from weave_query import weave_types as types +from weave_query.api import op, type_of +from weave_query import op_args, op_def +from weave_query.arrow import arrow_tags, convert +from weave_query.arrow.arrow import ( ArrowWeaveListType, arrow_as_array, offsets_starting_at_zero, ) -from weave.legacy.weave.arrow.concat import concatenate_all -from weave.legacy.weave.arrow.constructors import ( +from weave_query.arrow.concat import concatenate_all +from weave_query.arrow.constructors import ( vectorized_container_constructor_preprocessor, vectorized_input_types, ) -from weave.legacy.weave.arrow.convert import to_compare_safe -from weave.legacy.weave.arrow.list_ import ( +from weave_query.arrow.convert import to_compare_safe +from weave_query.arrow.list_ import ( ArrowWeaveList, PathType, is_list_arrowweavelist, is_taggedvalue_arrowweavelist, ) -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.language_features.tagging import ( +from weave_query.decorator_arrow_op import arrow_op +from weave_query.language_features.tagging import ( tagged_value_type, tagged_value_type_helpers, ) -from weave.legacy.weave.ops_arrow.vectorize import _apply_fn_node_with_tag_pushdown -from weave.legacy.weave.ops_primitives import list_ as primitive_list +from weave_query.ops_arrow.vectorize import _apply_fn_node_with_tag_pushdown +from weave_query.ops_primitives import list_ as primitive_list FLATTEN_DELIMITER = "➡️" @@ -961,7 +961,7 @@ def flatten(arr): def _drop_tags_output_type(input_type): - from weave.legacy.weave.op_def import map_type + from weave_query.op_def import map_type return map_type( input_type["arr"], diff --git a/weave/legacy/weave/ops_arrow/list_range.py b/weave_query/weave_query/ops_arrow/list_range.py similarity index 61% rename from weave/legacy/weave/ops_arrow/list_range.py rename to weave_query/weave_query/ops_arrow/list_range.py index 3783eaa39b7..5a94a33c9ca 100644 --- a/weave/legacy/weave/ops_arrow/list_range.py +++ b/weave_query/weave_query/ops_arrow/list_range.py @@ -2,9 +2,9 @@ import pyarrow as pa -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.arrow.list_ import ArrowWeaveList +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.arrow.list_ import ArrowWeaveList py_range = range diff --git a/weave/legacy/weave/ops_arrow/number.py b/weave_query/weave_query/ops_arrow/number.py similarity index 97% rename from weave/legacy/weave/ops_arrow/number.py rename to weave_query/weave_query/ops_arrow/number.py index 2d424fd08e6..e76dd08f708 100644 --- a/weave/legacy/weave/ops_arrow/number.py +++ b/weave_query/weave_query/ops_arrow/number.py @@ -4,12 +4,12 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import timestamp as weave_timestamp -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.ops_arrow import util +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import timestamp as weave_timestamp +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.ops_arrow import util ARROW_WEAVE_LIST_NUMBER_TYPE = ArrowWeaveListType(types.Number()) ARROW_WEAVE_LIST_BOOLEAN_TYPE = ArrowWeaveListType(types.Boolean()) diff --git a/weave/legacy/weave/ops_arrow/obj.py b/weave_query/weave_query/ops_arrow/obj.py similarity index 72% rename from weave/legacy/weave/ops_arrow/obj.py rename to weave_query/weave_query/ops_arrow/obj.py index b94fd1ef576..5fc4b3c0274 100644 --- a/weave/legacy/weave/ops_arrow/obj.py +++ b/weave_query/weave_query/ops_arrow/obj.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.ops_primitives import obj as primitives_obj +from weave_query import weave_types as types +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.ops_primitives import obj as primitives_obj @arrow_op( diff --git a/weave_query/weave_query/ops_arrow/ops.py b/weave_query/weave_query/ops_arrow/ops.py new file mode 100644 index 00000000000..3d2f8dcfe9e --- /dev/null +++ b/weave_query/weave_query/ops_arrow/ops.py @@ -0,0 +1,11 @@ +from weave_query.ops_arrow.arraylist_ops import * +from weave_query.ops_arrow.boolean import * +from weave_query.ops_arrow.convert_ops import * +from weave_query.ops_arrow.date import * +from weave_query.ops_arrow.dict import * +from weave_query.ops_arrow.list_join import * +from weave_query.ops_arrow.list_ops import * # type: ignore +from weave_query.ops_arrow.number import * +from weave_query.ops_arrow.obj import * +from weave_query.ops_arrow.ref_ops import * +from weave_query.ops_arrow.string import * diff --git a/weave/legacy/weave/ops_arrow/ref_ops.py b/weave_query/weave_query/ops_arrow/ref_ops.py similarity index 83% rename from weave/legacy/weave/ops_arrow/ref_ops.py rename to weave_query/weave_query/ops_arrow/ref_ops.py index 9ea8f800bab..da644d7873d 100644 --- a/weave/legacy/weave/ops_arrow/ref_ops.py +++ b/weave_query/weave_query/ops_arrow/ref_ops.py @@ -1,11 +1,11 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.ops_arrow import util +from weave_query import weave_types as types +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.decorator_op import op +from weave_query.ops_arrow import util nullable_binary_input_type = { "self": ArrowWeaveListType(types.optional(types.RefType())), @@ -22,7 +22,7 @@ output_type=ArrowWeaveListType(types.Boolean()), ) def ref_equal(self, other): - from weave.legacy.weave import storage + from weave_query import storage # Weave engine automatically derefs, so we need to undo that via # _get_ref here. diff --git a/weave/legacy/weave/ops_arrow/string.py b/weave_query/weave_query/ops_arrow/string.py similarity index 97% rename from weave/legacy/weave/ops_arrow/string.py rename to weave_query/weave_query/ops_arrow/string.py index 48a8d3f8c19..b29c08b5ee8 100644 --- a/weave/legacy/weave/ops_arrow/string.py +++ b/weave_query/weave_query/ops_arrow/string.py @@ -3,12 +3,12 @@ import pyarrow as pa import pyarrow.compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType, offsets_starting_at_zero -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.ops_arrow import util +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.arrow.arrow import ArrowWeaveListType, offsets_starting_at_zero +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.decorator_arrow_op import arrow_op +from weave_query.ops_arrow import util ARROW_WEAVE_LIST_STRING_TYPE = ArrowWeaveListType(types.String()) ARROW_WEAVE_LIST_BOOLEAN_TYPE = ArrowWeaveListType(types.Boolean()) diff --git a/weave/legacy/weave/ops_arrow/util.py b/weave_query/weave_query/ops_arrow/util.py similarity index 91% rename from weave/legacy/weave/ops_arrow/util.py rename to weave_query/weave_query/ops_arrow/util.py index 97b12773d82..ebf179648a4 100644 --- a/weave/legacy/weave/ops_arrow/util.py +++ b/weave_query/weave_query/ops_arrow/util.py @@ -3,15 +3,15 @@ import pyarrow as pa from pyarrow import compute as pc -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph +from weave_query import weave_types as types +from weave_query import graph # Reimplementation of Weave0 `toSafeCall` which # converts media to their digest def _to_compare_safe_call(node: graph.OutputNode) -> graph.OutputNode: - from weave.legacy.weave.ops_domain.wbmedia import ArtifactAssetType - from weave.legacy.weave.ops_primitives.dict import dict_ + from weave_query.ops_domain.wbmedia import ArtifactAssetType + from weave_query.ops_primitives.dict import dict_ node_type = types.non_none(node.type) if ArtifactAssetType.assign_type(node_type): diff --git a/weave/legacy/weave/ops_arrow/vectorize.py b/weave_query/weave_query/ops_arrow/vectorize.py similarity index 97% rename from weave/legacy/weave/ops_arrow/vectorize.py rename to weave_query/weave_query/ops_arrow/vectorize.py index fedd1cc5305..dec0c287a66 100644 --- a/weave/legacy/weave/ops_arrow/vectorize.py +++ b/weave_query/weave_query/ops_arrow/vectorize.py @@ -6,18 +6,18 @@ import numpy as np import pyarrow as pa -from weave.legacy.weave import weave_internal -from weave.legacy.weave import errors,weavify, registry_mem -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, use -from weave.legacy.weave import dispatch, graph, graph_debug, op_args, op_def -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType -from weave.legacy.weave.arrow.arrow_tags import pushdown_list_tags -from weave.legacy.weave.arrow.list_ import ArrowWeaveList -from weave.legacy.weave.ops_arrow import arraylist_ops, convert_ops -from weave.legacy.weave.ops_arrow.dict import preprocess_merge -from weave.legacy.weave.ops_primitives.dict import dict_ +from weave_query import weave_internal +from weave_query import errors,weavify, registry_mem +from weave_query import weave_types as types +from weave_query.api import op, use +from weave_query import dispatch, graph, graph_debug, op_args, op_def +from weave_query.arrow import convert +from weave_query.arrow.arrow import ArrowWeaveListType +from weave_query.arrow.arrow_tags import pushdown_list_tags +from weave_query.arrow.list_ import ArrowWeaveList +from weave_query.ops_arrow import arraylist_ops, convert_ops +from weave_query.ops_arrow.dict import preprocess_merge +from weave_query.ops_primitives.dict import dict_ class VectorizeError(errors.WeaveBaseError): @@ -73,7 +73,7 @@ def _create_manually_mapped_op( mapped_inputs = {k: v for k, v in inputs.items() if k in vectorized_keys} rest_inputs = {k: v for k, v in inputs.items() if k not in vectorized_keys} - from weave.legacy.weave.ops_arrow import dict + from weave_query.ops_arrow import dict input_arr = dict.arrow_dict_(**mapped_inputs).to_py() @@ -643,7 +643,7 @@ def raise_on_python_bailout(): def _call_and_ensure_awl( awl: ArrowWeaveList, called: graph.OutputNode ) -> ArrowWeaveList: - from weave.legacy.weave import compile + from weave_query import compile with compile.disable_compile(): res = use(called) @@ -726,7 +726,7 @@ def _apply_fn_node(awl: ArrowWeaveList, fn: graph.OutputNode) -> ArrowWeaveList: ) return convert.to_arrow([], types.List(fn.type), artifact=awl._artifact) - from weave.legacy.weave import execute_fast + from weave_query import execute_fast fn = execute_fast._resolve_static_branches(fn) logging.info("Vectorizing. Static branch resolution complete.: %s", debug_str) diff --git a/weave/legacy/weave/ops_domain/__init__.py b/weave_query/weave_query/ops_domain/__init__.py similarity index 93% rename from weave/legacy/weave/ops_domain/__init__.py rename to weave_query/weave_query/ops_domain/__init__.py index 7cdc4cfcefb..ba03234a1cc 100644 --- a/weave/legacy/weave/ops_domain/__init__.py +++ b/weave_query/weave_query/ops_domain/__init__.py @@ -1,4 +1,4 @@ -from weave.legacy.weave import context_state as _context_state +from weave_query import context_state as _context_state _loading_builtins_token = _context_state.set_loading_built_ins() diff --git a/weave/legacy/weave/ops_domain/artifact_alias_ops.py b/weave_query/weave_query/ops_domain/artifact_alias_ops.py similarity index 61% rename from weave/legacy/weave/ops_domain/artifact_alias_ops.py rename to weave_query/weave_query/ops_domain/artifact_alias_ops.py index 01acd1d6537..045c529635a 100644 --- a/weave/legacy/weave/ops_domain/artifact_alias_ops.py +++ b/weave_query/weave_query/ops_domain/artifact_alias_ops.py @@ -1,11 +1,11 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/artifact_collection_ops.py b/weave_query/weave_query/ops_domain/artifact_collection_ops.py similarity index 94% rename from weave/legacy/weave/ops_domain/artifact_collection_ops.py rename to weave_query/weave_query/ops_domain/artifact_collection_ops.py index ccd8dc913ea..3604e049cd2 100644 --- a/weave/legacy/weave/ops_domain/artifact_collection_ops.py +++ b/weave_query/weave_query/ops_domain/artifact_collection_ops.py @@ -1,12 +1,12 @@ import typing import urllib -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/artifact_membership_ops.py b/weave_query/weave_query/ops_domain/artifact_membership_ops.py similarity index 89% rename from weave/legacy/weave/ops_domain/artifact_membership_ops.py rename to weave_query/weave_query/ops_domain/artifact_membership_ops.py index 780ec6f93ac..e1e786e3a4b 100644 --- a/weave/legacy/weave/ops_domain/artifact_membership_ops.py +++ b/weave_query/weave_query/ops_domain/artifact_membership_ops.py @@ -1,10 +1,10 @@ import urllib -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_direct_edge_op, gql_prop_op, ) diff --git a/weave/legacy/weave/ops_domain/artifact_type_ops.py b/weave_query/weave_query/ops_domain/artifact_type_ops.py similarity index 89% rename from weave/legacy/weave/ops_domain/artifact_type_ops.py rename to weave_query/weave_query/ops_domain/artifact_type_ops.py index 64a81170436..f65349f1afd 100644 --- a/weave/legacy/weave/ops_domain/artifact_type_ops.py +++ b/weave_query/weave_query/ops_domain/artifact_type_ops.py @@ -1,10 +1,10 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( _make_alias, gql_connection_op, gql_direct_edge_op, diff --git a/weave/legacy/weave/ops_domain/artifact_version_ops.py b/weave_query/weave_query/ops_domain/artifact_version_ops.py similarity index 96% rename from weave/legacy/weave/ops_domain/artifact_version_ops.py rename to weave_query/weave_query/ops_domain/artifact_version_ops.py index e9b8136c6f3..58f7527e482 100644 --- a/weave/legacy/weave/ops_domain/artifact_version_ops.py +++ b/weave_query/weave_query/ops_domain/artifact_version_ops.py @@ -2,14 +2,14 @@ import typing from urllib.parse import quote -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import artifact_fs, artifact_wandb, input_provider -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain import wb_util -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import artifact_fs, artifact_wandb, input_provider +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain import wb_util +from weave_query.ops_domain.wandb_domain_gql import ( _make_alias, gql_connection_op, gql_direct_edge_op, @@ -460,10 +460,10 @@ def artifact_version_weave_type( def _get_history_metrics( artifactVersion: wdt.ArtifactVersion, ) -> dict[str, typing.Any]: - from weave.legacy.weave import weave_internal - from weave.legacy.weave.compile import enable_compile - from weave.legacy.weave.graph import ConstNode, OutputNode - from weave.legacy.weave.ops_domain import wb_domain_types + from weave_query import weave_internal + from weave_query.compile import enable_compile + from weave_query.graph import ConstNode, OutputNode + from weave_query.ops_domain import wb_domain_types created_by = artifactVersion["createdBy"] if created_by == None or created_by["__typename"] != "Run": diff --git a/weave/legacy/weave/ops_domain/entity_ops.py b/weave_query/weave_query/ops_domain/entity_ops.py similarity index 82% rename from weave/legacy/weave/ops_domain/entity_ops.py rename to weave_query/weave_query/ops_domain/entity_ops.py index 08c433262a9..6190b4f0c48 100644 --- a/weave/legacy/weave/ops_domain/entity_ops.py +++ b/weave_query/weave_query/ops_domain/entity_ops.py @@ -1,11 +1,11 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/org_ops.py b/weave_query/weave_query/ops_domain/org_ops.py similarity index 85% rename from weave/legacy/weave/ops_domain/org_ops.py rename to weave_query/weave_query/ops_domain/org_ops.py index 867bc2d299a..eae072bae0e 100644 --- a/weave/legacy/weave/ops_domain/org_ops.py +++ b/weave_query/weave_query/ops_domain/org_ops.py @@ -1,6 +1,6 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import weave_types as types +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/project_ops.py b/weave_query/weave_query/ops_domain/project_ops.py similarity index 93% rename from weave/legacy/weave/ops_domain/project_ops.py rename to weave_query/weave_query/ops_domain/project_ops.py index 297fea610b6..0cfbaf05117 100644 --- a/weave/legacy/weave/ops_domain/project_ops.py +++ b/weave_query/weave_query/ops_domain/project_ops.py @@ -1,16 +1,16 @@ import json import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import input_provider -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import input_provider +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/repo_insight_ops.py b/weave_query/weave_query/ops_domain/repo_insight_ops.py similarity index 94% rename from weave/legacy/weave/ops_domain/repo_insight_ops.py rename to weave_query/weave_query/ops_domain/repo_insight_ops.py index 3ff32d81e1d..5614ff510d7 100644 --- a/weave/legacy/weave/ops_domain/repo_insight_ops.py +++ b/weave_query/weave_query/ops_domain/repo_insight_ops.py @@ -1,12 +1,12 @@ import datetime import json -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_json_cache import use_json -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_json_cache import use_json +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain.wandb_domain_gql import ( _make_alias, ) diff --git a/weave/legacy/weave/ops_domain/report_ops.py b/weave_query/weave_query/ops_domain/report_ops.py similarity index 91% rename from weave/legacy/weave/ops_domain/report_ops.py rename to weave_query/weave_query/ops_domain/report_ops.py index 011768ac1f9..5b139876bea 100644 --- a/weave/legacy/weave/ops_domain/report_ops.py +++ b/weave_query/weave_query/ops_domain/report_ops.py @@ -2,12 +2,12 @@ import typing import urllib -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_direct_edge_op, gql_prop_op, ) diff --git a/weave/legacy/weave/language_features/__init__.py b/weave_query/weave_query/ops_domain/run_history/__init__.py similarity index 100% rename from weave/legacy/weave/language_features/__init__.py rename to weave_query/weave_query/ops_domain/run_history/__init__.py diff --git a/weave/legacy/weave/ops_domain/run_history/context.py b/weave_query/weave_query/ops_domain/run_history/context.py similarity index 100% rename from weave/legacy/weave/ops_domain/run_history/context.py rename to weave_query/weave_query/ops_domain/run_history/context.py diff --git a/weave/legacy/weave/ops_domain/run_history/history_op_common.py b/weave_query/weave_query/ops_domain/run_history/history_op_common.py similarity index 94% rename from weave/legacy/weave/ops_domain/run_history/history_op_common.py rename to weave_query/weave_query/ops_domain/run_history/history_op_common.py index c38dad124b2..1814f590a92 100644 --- a/weave/legacy/weave/ops_domain/run_history/history_op_common.py +++ b/weave_query/weave_query/ops_domain/run_history/history_op_common.py @@ -4,9 +4,9 @@ import pyarrow as pa from pyarrow import parquet as pq -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import use -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query.api import use +from weave_query import ( util, errors, engine_trace, @@ -21,17 +21,17 @@ io_service, op_args, ) -from weave.legacy.weave.arrow.concat import concatenate_all -from weave.legacy.weave.compile_domain import InputAndStitchProvider -from weave.legacy.weave.compile_table import KeyTree -from weave.legacy.weave.language_features.tagging.tagged_value_type import TaggedValueType -from weave.legacy.weave.mappers_arrow import map_to_arrow -from weave.legacy.weave.ops_arrow import ArrowWeaveList -from weave.legacy.weave.ops_arrow.list_ops import concat -from weave.legacy.weave.ops_domain import table, wb_util -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_primitives import make_list -from weave.legacy.weave.wandb_interface import wandb_stream_table +from weave_query.arrow.concat import concatenate_all +from weave_query.compile_domain import InputAndStitchProvider +from weave_query.compile_table import KeyTree +from weave_query.language_features.tagging.tagged_value_type import TaggedValueType +from weave_query.mappers_arrow import map_to_arrow +from weave_query.ops_arrow import ArrowWeaveList +from weave_query.ops_arrow.list_ops import concat +from weave_query.ops_domain import table, wb_util +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_primitives import make_list +from weave_query.wandb_interface import wandb_stream_table tracer = engine_trace.tracer() @@ -45,8 +45,8 @@ class TypeCount(typing.TypedDict): def history_key_type_count_to_weave_type(tc: TypeCount) -> types.Type: - from weave.legacy.weave.ops_domain.trace_tree import WBTraceTree - from weave.legacy.weave.ops_domain.wbmedia import ImageArtifactFileRefType + from weave_query.ops_domain.trace_tree import WBTraceTree + from weave_query.ops_domain.wbmedia import ImageArtifactFileRefType tc_type = tc["type"] if tc_type == "string": diff --git a/weave/legacy/weave/ops_domain/run_history/run_history_v1_legacy_ops.py b/weave_query/weave_query/ops_domain/run_history/run_history_v1_legacy_ops.py similarity index 89% rename from weave/legacy/weave/ops_domain/run_history/run_history_v1_legacy_ops.py rename to weave_query/weave_query/ops_domain/run_history/run_history_v1_legacy_ops.py index c78fe031a41..ca4fe9fef6f 100644 --- a/weave/legacy/weave/ops_domain/run_history/run_history_v1_legacy_ops.py +++ b/weave_query/weave_query/ops_domain/run_history/run_history_v1_legacy_ops.py @@ -2,14 +2,14 @@ import pyarrow as pa -from weave.legacy.weave import engine_trace -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import gql_json_cache -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain import wb_util -from weave.legacy.weave.ops_domain.run_history import history_op_common +from weave_query import engine_trace +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import gql_json_cache +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain import wb_util +from weave_query.ops_domain.run_history import history_op_common tracer = engine_trace.tracer() diff --git a/weave/legacy/weave/ops_domain/run_history/run_history_v2_parquet_media.py b/weave_query/weave_query/ops_domain/run_history/run_history_v2_parquet_media.py similarity index 90% rename from weave/legacy/weave/ops_domain/run_history/run_history_v2_parquet_media.py rename to weave_query/weave_query/ops_domain/run_history/run_history_v2_parquet_media.py index 113f9db6abe..22bfe2b3928 100644 --- a/weave/legacy/weave/ops_domain/run_history/run_history_v2_parquet_media.py +++ b/weave_query/weave_query/ops_domain/run_history/run_history_v2_parquet_media.py @@ -6,17 +6,17 @@ import pyarrow as pa -from weave.legacy.weave import engine_trace -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, use -from weave.legacy.weave import artifact_mem, gql_json_cache -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.list_ import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.ops_arrow.list_ops import concat -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain import wb_util, wbmedia -from weave.legacy.weave.ops_domain.run_history import history_op_common +from weave_query import engine_trace +from weave_query import weave_types as types +from weave_query.api import op, use +from weave_query import artifact_mem, gql_json_cache +from weave_query.arrow import convert +from weave_query.arrow.list_ import ArrowWeaveList, ArrowWeaveListType +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.ops_arrow.list_ops import concat +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain import wb_util, wbmedia +from weave_query.ops_domain.run_history import history_op_common tracer = engine_trace.tracer() diff --git a/weave/legacy/weave/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py b/weave_query/weave_query/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py similarity index 98% rename from weave/legacy/weave/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py rename to weave_query/weave_query/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py index 3d8dc2fe8d1..c7df77fd62d 100644 --- a/weave/legacy/weave/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py +++ b/weave_query/weave_query/ops_domain/run_history/run_history_v3_parquet_stream_optimized.py @@ -5,10 +5,10 @@ import pyarrow as pa -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import ( +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import ( engine_trace, artifact_base, artifact_fs, @@ -16,8 +16,8 @@ gql_json_cache, io_service, ) -from weave.legacy.weave.arrow import convert -from weave.legacy.weave.arrow.list_ import ( +from weave_query.arrow import convert +from weave_query.arrow.list_ import ( ArrowWeaveList, ArrowWeaveListType, PathItemType, @@ -25,16 +25,16 @@ make_vec_none, weave_arrow_type_check, ) -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.op_def import map_type -from weave.legacy.weave.ops_domain import trace_tree, wb_util, wbmedia -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.run_history import history_op_common -from weave.legacy.weave.ops_domain.run_history.context import ( +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.op_def import map_type +from weave_query.ops_domain import trace_tree, wb_util, wbmedia +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.run_history import history_op_common +from weave_query.ops_domain.run_history.context import ( get_error_on_non_vectorized_history_transform, ) -from weave.legacy.weave.ops_domain.table import _patch_legacy_image_file_types -from weave.legacy.weave.wandb_interface import wandb_stream_table +from weave_query.ops_domain.table import _patch_legacy_image_file_types +from weave_query.wandb_interface import wandb_stream_table tracer = engine_trace.tracer() diff --git a/weave/legacy/weave/ops_domain/run_ops.py b/weave_query/weave_query/ops_domain/run_ops.py similarity index 95% rename from weave/legacy/weave/ops_domain/run_ops.py rename to weave_query/weave_query/ops_domain/run_ops.py index e3bc71c970b..66dd4fb3755 100644 --- a/weave/legacy/weave/ops_domain/run_ops.py +++ b/weave_query/weave_query/ops_domain/run_ops.py @@ -37,26 +37,26 @@ import json import typing -from weave.legacy.weave import engine_trace -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import compile_table -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.input_provider import InputAndStitchProvider -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import engine_trace +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import compile_table +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.input_provider import InputAndStitchProvider +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain import wb_util +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain import wb_util # Important to re-export ops -from weave.legacy.weave.ops_domain.run_history import ( +from weave_query.ops_domain.run_history import ( history_op_common, run_history_v1_legacy_ops, run_history_v2_parquet_media, run_history_v3_parquet_stream_optimized, ) -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain.wandb_domain_gql import ( _make_alias, gql_connection_op, gql_direct_edge_op, diff --git a/weave/legacy/weave/ops_domain/run_queue_ops.py b/weave_query/weave_query/ops_domain/run_queue_ops.py similarity index 51% rename from weave/legacy/weave/ops_domain/run_queue_ops.py rename to weave_query/weave_query/ops_domain/run_queue_ops.py index 77af41ac69b..9b29197f27a 100644 --- a/weave/legacy/weave/ops_domain/run_queue_ops.py +++ b/weave_query/weave_query/ops_domain/run_queue_ops.py @@ -1,13 +1,13 @@ import json -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/run_segment.py b/weave_query/weave_query/ops_domain/run_segment.py similarity index 90% rename from weave/legacy/weave/ops_domain/run_segment.py rename to weave_query/weave_query/ops_domain/run_segment.py index 7924ba22340..bcdac434353 100644 --- a/weave/legacy/weave/ops_domain/run_segment.py +++ b/weave_query/weave_query/ops_domain/run_segment.py @@ -2,12 +2,13 @@ import typing from typing import Optional, cast -import weave -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import Node, get, use -from weave.legacy.weave import context_state as _context -from weave.legacy.weave import panels -from weave.legacy.weave.ops_arrow import ArrowWeaveList, ArrowWeaveListType +import weave_query as weave +import weave_query +from weave_query import weave_types as types +from weave_query.api import Node, get, use +from weave_query import context_state as _context +from weave_query import panels +from weave_query.ops_arrow import ArrowWeaveList, ArrowWeaveListType _loading_builtins_token = _context.set_loading_built_ins() diff --git a/weave/legacy/weave/ops_domain/stream_table_ops.py b/weave_query/weave_query/ops_domain/stream_table_ops.py similarity index 68% rename from weave/legacy/weave/ops_domain/stream_table_ops.py rename to weave_query/weave_query/ops_domain/stream_table_ops.py index 1aec716531b..fa71aea6f31 100644 --- a/weave/legacy/weave/ops_domain/stream_table_ops.py +++ b/weave_query/weave_query/ops_domain/stream_table_ops.py @@ -1,9 +1,9 @@ -from weave.legacy.weave import weave_types -from weave.legacy.weave.api import op -from weave.legacy.weave import compile, op_def -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType -from weave.legacy.weave.core_types import StreamTableType -from weave.legacy.weave.ops_domain.project_ops import project +from weave_query import weave_types +from weave_query.api import op +from weave_query import compile, op_def +from weave_query.arrow.arrow import ArrowWeaveListType +from weave_query.core_types import StreamTableType +from weave_query.ops_domain.project_ops import project def _get_history_node(stream_table: StreamTableType): diff --git a/weave/legacy/weave/ops_domain/table.py b/weave_query/weave_query/ops_domain/table.py similarity index 99% rename from weave/legacy/weave/ops_domain/table.py rename to weave_query/weave_query/ops_domain/table.py index b977104219d..07e16546c9a 100644 --- a/weave/legacy/weave/ops_domain/table.py +++ b/weave_query/weave_query/ops_domain/table.py @@ -5,10 +5,10 @@ import logging import typing -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class -from weave.legacy.weave import ( +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query.api import op, weave_class +from weave_query import ( artifact_fs, artifact_wandb, io_service, @@ -18,8 +18,8 @@ errors, util, ) -from weave.legacy.weave import timestamp as weave_timestamp -from weave.legacy.weave.ops_domain import trace_tree, wbmedia +from weave_query import timestamp as weave_timestamp +from weave_query.ops_domain import trace_tree, wbmedia @dataclasses.dataclass(frozen=True) diff --git a/weave/legacy/weave/ops_domain/trace_tree.py b/weave_query/weave_query/ops_domain/trace_tree.py similarity index 97% rename from weave/legacy/weave/ops_domain/trace_tree.py rename to weave_query/weave_query/ops_domain/trace_tree.py index 9ff5637f956..f6f5dc781d4 100644 --- a/weave/legacy/weave/ops_domain/trace_tree.py +++ b/weave_query/weave_query/ops_domain/trace_tree.py @@ -11,11 +11,11 @@ from wandb.sdk.data_types.trace_tree import Result as WBSpanResult from wandb.sdk.data_types.trace_tree import Span as WBSpan -from weave.legacy.weave import api as weave -from weave.legacy.weave import stream_data_interfaces -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import op_def -from weave.legacy.weave.decorator_op import op +from weave_query import api as weave +from weave_query import stream_data_interfaces +from weave_query import weave_types as types +from weave_query import op_def +from weave_query.decorator_op import op class StatusCode: diff --git a/weave/legacy/weave/ops_domain/user_ops.py b/weave_query/weave_query/ops_domain/user_ops.py similarity index 77% rename from weave/legacy/weave/ops_domain/user_ops.py rename to weave_query/weave_query/ops_domain/user_ops.py index 86e6d39a11e..a42862fd975 100644 --- a/weave/legacy/weave/ops_domain/user_ops.py +++ b/weave_query/weave_query/ops_domain/user_ops.py @@ -1,11 +1,11 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.language_features.tagging.make_tag_getter_op import ( +from weave_query import weave_types as types +from weave_query.api import op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.language_features.tagging.make_tag_getter_op import ( make_tag_getter_op, ) -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.ops_domain.wandb_domain_gql import ( +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.ops_domain.wandb_domain_gql import ( gql_connection_op, gql_direct_edge_op, gql_prop_op, diff --git a/weave/legacy/weave/ops_domain/wandb_domain_gql.py b/weave_query/weave_query/ops_domain/wandb_domain_gql.py similarity index 96% rename from weave/legacy/weave/ops_domain/wandb_domain_gql.py rename to weave_query/weave_query/ops_domain/wandb_domain_gql.py index a05a40ece28..81efe612957 100644 --- a/weave/legacy/weave/ops_domain/wandb_domain_gql.py +++ b/weave_query/weave_query/ops_domain/wandb_domain_gql.py @@ -4,14 +4,14 @@ import pyarrow as pa -from weave.legacy.weave import weave_types -from weave.legacy.weave.api import op -from weave.legacy.weave import errors, gql_op_plugin, op_def, partial_object -from weave.legacy.weave.decorator_arrow_op import arrow_op -from weave.legacy.weave.gql_op_plugin import wb_gql_op_plugin -from weave.legacy.weave.input_provider import InputProvider -from weave.legacy.weave.ops_arrow import ArrowWeaveList, ArrowWeaveListType -from weave.legacy.weave.ops_domain import wb_domain_types +from weave_query import weave_types +from weave_query.api import op +from weave_query import errors, gql_op_plugin, op_def, partial_object +from weave_query.decorator_arrow_op import arrow_op +from weave_query.gql_op_plugin import wb_gql_op_plugin +from weave_query.input_provider import InputProvider +from weave_query.ops_arrow import ArrowWeaveList, ArrowWeaveListType +from weave_query.ops_domain import wb_domain_types """ This file contains utilities for constructing GQL ops (used by all the ops in diff --git a/weave/legacy/weave/ops_domain/wb_domain_types.py b/weave_query/weave_query/ops_domain/wb_domain_types.py similarity index 97% rename from weave/legacy/weave/ops_domain/wb_domain_types.py rename to weave_query/weave_query/ops_domain/wb_domain_types.py index e99912883b6..3e0f18d1873 100644 --- a/weave/legacy/weave/ops_domain/wb_domain_types.py +++ b/weave_query/weave_query/ops_domain/wb_domain_types.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.decorator_type import type as weave_type -from weave.legacy.weave.partial_object import ( +from weave_query import weave_types as types +from weave_query.decorator_type import type as weave_type +from weave_query.partial_object import ( PartialObject, PartialObjectTypeGeneratorType, ) diff --git a/weave/legacy/weave/ops_domain/wb_util.py b/weave_query/weave_query/ops_domain/wb_util.py similarity index 87% rename from weave/legacy/weave/ops_domain/wb_util.py rename to weave_query/weave_query/ops_domain/wb_util.py index 9265f24777b..325257f8669 100644 --- a/weave/legacy/weave/ops_domain/wb_util.py +++ b/weave_query/weave_query/ops_domain/wb_util.py @@ -2,15 +2,15 @@ from dataclasses import dataclass from urllib import parse -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import artifact_fs, decorator_type -from weave.legacy.weave.artifact_wandb import ( +from weave_query import weave_types as types +from weave_query import artifact_fs, decorator_type +from weave_query.artifact_wandb import ( WandbArtifact, WeaveWBLoggedArtifactURI, ) -from weave.legacy.weave.ops_domain.run_history import history_op_common -from weave.legacy.weave.wandb_interface import wandb_stream_table -from weave.legacy.weave.runfiles_wandb import WandbRunFiles, WeaveWBRunFilesURI +from weave_query.ops_domain.run_history import history_op_common +from weave_query.wandb_interface import wandb_stream_table +from weave_query.runfiles_wandb import WandbRunFiles, WeaveWBRunFilesURI @dataclass @@ -96,7 +96,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): return _filesystem_artifact_file_from_artifact_path(val["artifact_path"]) if val["_type"] == "image-file" and run_path is not None: - from weave.legacy.weave.ops_domain import ImageArtifactFileRef + from weave_query.ops_domain import ImageArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return ImageArtifactFileRef( @@ -110,7 +110,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): # masks=val.get("masks", {}), ) if val["_type"] == "audio-file" and run_path is not None: - from weave.legacy.weave.ops_domain import AudioArtifactFileRef + from weave_query.ops_domain import AudioArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return AudioArtifactFileRef( # type: ignore @@ -119,7 +119,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): sha256=val["sha256"], ) if val["_type"] == "bokeh-file" and run_path is not None: - from weave.legacy.weave.ops_domain import BokehArtifactFileRef + from weave_query.ops_domain import BokehArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return BokehArtifactFileRef( # type: ignore @@ -128,7 +128,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): sha256=val["sha256"], ) if val["_type"] == "video-file" and run_path is not None: - from weave.legacy.weave.ops_domain import VideoArtifactFileRef + from weave_query.ops_domain import VideoArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return VideoArtifactFileRef( # type: ignore @@ -137,7 +137,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): sha256=val["sha256"], ) if val["_type"] == "object3D-file" and run_path is not None: - from weave.legacy.weave.ops_domain import Object3DArtifactFileRef + from weave_query.ops_domain import Object3DArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return Object3DArtifactFileRef( # type: ignore @@ -146,7 +146,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): sha256=val["sha256"], ) if val["_type"] == "molecule-file" and run_path is not None: - from weave.legacy.weave.ops_domain import MoleculeArtifactFileRef + from weave_query.ops_domain import MoleculeArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return MoleculeArtifactFileRef( # type: ignore @@ -155,7 +155,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): sha256=val["sha256"], ) if val["_type"] == "html-file" and run_path is not None: - from weave.legacy.weave.ops_domain import HtmlArtifactFileRef + from weave_query.ops_domain import HtmlArtifactFileRef fs_artifact_file = _filesystem_runfiles_from_run_path(run_path, val["path"]) return HtmlArtifactFileRef( # type: ignore @@ -165,7 +165,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): ) if val["_type"] == "images/separated" and run_path is not None: - from weave.legacy.weave.ops_domain import ImageArtifactFileRef + from weave_query.ops_domain import ImageArtifactFileRef image_list: list[ImageArtifactFileRef] = [] @@ -184,7 +184,7 @@ def _process_run_dict_item(val, run_path: typing.Optional[RunPath] = None): return image_list if val["_type"] == "wb_trace_tree": - from weave.legacy.weave.ops_domain.trace_tree import WBTraceTree + from weave_query.ops_domain.trace_tree import WBTraceTree return WBTraceTree( root_span_dumps=val.get("root_span_dumps"), # type: ignore diff --git a/weave/legacy/weave/ops_domain/wbgqlquery_op.py b/weave_query/weave_query/ops_domain/wbgqlquery_op.py similarity index 87% rename from weave/legacy/weave/ops_domain/wbgqlquery_op.py rename to weave_query/weave_query/ops_domain/wbgqlquery_op.py index 74c50e2e61a..d651690a010 100644 --- a/weave/legacy/weave/ops_domain/wbgqlquery_op.py +++ b/weave_query/weave_query/ops_domain/wbgqlquery_op.py @@ -1,13 +1,13 @@ import logging import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import engine_trace, environment, mappers_gql, partial_object -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.ops_domain import wb_domain_types as wdt -from weave.legacy.weave.wandb_client_api import wandb_gql_query +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import engine_trace, environment, mappers_gql, partial_object +from weave_query.language_features.tagging import tagged_value_type +from weave_query.ops_domain import wb_domain_types as wdt +from weave_query.wandb_client_api import wandb_gql_query def _wbgqlquery_output_type(input_types: dict[str, types.Type]) -> types.Type: diff --git a/weave/legacy/weave/ops_domain/wbmedia.py b/weave_query/weave_query/ops_domain/wbmedia.py similarity index 97% rename from weave/legacy/weave/ops_domain/wbmedia.py rename to weave_query/weave_query/ops_domain/wbmedia.py index 4256c0872d2..8f566b7c8b3 100644 --- a/weave/legacy/weave/ops_domain/wbmedia.py +++ b/weave_query/weave_query/ops_domain/wbmedia.py @@ -4,11 +4,11 @@ import json import typing -from weave.legacy.weave import api as weave -from weave import types -from weave.legacy.weave import errors, engine_trace, artifact_fs, file_base -from weave.legacy.weave.language_features.tagging.tag_store import isolated_tagging_context -from weave.legacy.weave.ops_primitives import html, markdown +from weave_query import api as weave +from weave_query import types +from weave_query import errors, engine_trace, artifact_fs, file_base +from weave_query.language_features.tagging.tag_store import isolated_tagging_context +from weave_query.ops_primitives import html, markdown class LegacyImageArtifactFileRef: @@ -283,7 +283,7 @@ class LegacyTableNDArrayType(types.Type): # code can work with it. @weave.op() def html_file(html: html.Html) -> HtmlArtifactFileRef: - from weave.legacy.weave import storage + from weave_query import storage # This is a ref to the html object with isolated_tagging_context(): @@ -305,7 +305,7 @@ def html_file(html: html.Html) -> HtmlArtifactFileRef: ) ) def markdown_file(md: markdown.Markdown): - from weave.legacy.weave import storage + from weave_query import storage with isolated_tagging_context(): ref = storage.save(md) diff --git a/weave/legacy/weave/ops_primitives/__init__.py b/weave_query/weave_query/ops_primitives/__init__.py similarity index 92% rename from weave/legacy/weave/ops_primitives/__init__.py rename to weave_query/weave_query/ops_primitives/__init__.py index 41990e9c7e6..580cfb20616 100644 --- a/weave/legacy/weave/ops_primitives/__init__.py +++ b/weave_query/weave_query/ops_primitives/__init__.py @@ -28,7 +28,7 @@ from .html import * from .markdown import * from .op_def import * -from weave.legacy.weave.language_features.tagging.tagging_ops import * +from weave_query.language_features.tagging.tagging_ops import * from .list_tag_getters import * from .geom import * from .server import * diff --git a/weave/legacy/weave/ops_primitives/_dict_utils.py b/weave_query/weave_query/ops_primitives/_dict_utils.py similarity index 97% rename from weave/legacy/weave/ops_primitives/_dict_utils.py rename to weave_query/weave_query/ops_primitives/_dict_utils.py index 780257c0638..e5be62c8364 100644 --- a/weave/legacy/weave/ops_primitives/_dict_utils.py +++ b/weave_query/weave_query/ops_primitives/_dict_utils.py @@ -1,9 +1,9 @@ import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type +from weave_query import errors +from weave_query import weave_types as types +from weave_query import box +from weave_query.language_features.tagging import tag_store, tagged_value_type def typeddict_pick_output_type(input_types): diff --git a/weave/legacy/weave/ops_primitives/any.py b/weave_query/weave_query/ops_primitives/any.py similarity index 61% rename from weave/legacy/weave/ops_primitives/any.py rename to weave_query/weave_query/ops_primitives/any.py index eb10ed9b0c1..491412e10a2 100644 --- a/weave/legacy/weave/ops_primitives/any.py +++ b/weave_query/weave_query/ops_primitives/any.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.decorator_op import op +from weave_query import weave_types as types +from weave_query.decorator_op import op @op( diff --git a/weave/legacy/weave/ops_primitives/artifacts.py b/weave_query/weave_query/ops_primitives/artifacts.py similarity index 95% rename from weave/legacy/weave/ops_primitives/artifacts.py rename to weave_query/weave_query/ops_primitives/artifacts.py index 9edd8c6e223..630212d4b61 100644 --- a/weave/legacy/weave/ops_primitives/artifacts.py +++ b/weave_query/weave_query/ops_primitives/artifacts.py @@ -3,10 +3,10 @@ import pathlib import typing -from weave.legacy.weave.api import op -from weave import types -from weave.legacy.weave import artifact_fs, ref_base -from weave.legacy.weave.artifact_local import WORKING_DIR_PREFIX, LocalArtifact +from weave_query.api import op +from weave_query import types +from weave_query import artifact_fs, ref_base +from weave_query.artifact_local import WORKING_DIR_PREFIX, LocalArtifact @op(name="FilesystemArtifact-fileRefineType", hidden=True) diff --git a/weave/legacy/weave/ops_primitives/boolean.py b/weave_query/weave_query/ops_primitives/boolean.py similarity index 92% rename from weave/legacy/weave/ops_primitives/boolean.py rename to weave_query/weave_query/ops_primitives/boolean.py index b3f007a22fd..b1bcfbcb33f 100644 --- a/weave/legacy/weave/ops_primitives/boolean.py +++ b/weave_query/weave_query/ops_primitives/boolean.py @@ -1,9 +1,9 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class -from weave.legacy.weave import dispatch -from weave.legacy.weave.ops_primitives.dict import dict_ +from weave_query import weave_types as types +from weave_query.api import op, weave_class +from weave_query import dispatch +from weave_query.ops_primitives.dict import dict_ @weave_class(weave_type=types.Boolean) diff --git a/weave/legacy/weave/ops_primitives/csv_.py b/weave_query/weave_query/ops_primitives/csv_.py similarity index 97% rename from weave/legacy/weave/ops_primitives/csv_.py rename to weave_query/weave_query/ops_primitives/csv_.py index 90a7da01bd2..b93e864d57b 100644 --- a/weave/legacy/weave/ops_primitives/csv_.py +++ b/weave_query/weave_query/ops_primitives/csv_.py @@ -3,8 +3,8 @@ import pyarrow as pa import pyarrow.csv as pa_csv -from weave.legacy.weave import api as weave -from weave.legacy.weave import file_base +from weave_query import api as weave +from weave_query import file_base def sniff_dialect(path: str) -> type[csv.Dialect]: diff --git a/weave/legacy/weave/ops_primitives/date.py b/weave_query/weave_query/ops_primitives/date.py similarity index 98% rename from weave/legacy/weave/ops_primitives/date.py rename to weave_query/weave_query/ops_primitives/date.py index bf08300d3c0..985c0c4c371 100644 --- a/weave/legacy/weave/ops_primitives/date.py +++ b/weave_query/weave_query/ops_primitives/date.py @@ -4,8 +4,8 @@ import dateutil import dateutil.parser -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, type +from weave_query import weave_types as types +from weave_query.api import op, type @op( diff --git a/weave/legacy/weave/ops_primitives/dict.py b/weave_query/weave_query/ops_primitives/dict.py similarity index 92% rename from weave/legacy/weave/ops_primitives/dict.py rename to weave_query/weave_query/ops_primitives/dict.py index a96a9486530..acbcaecb561 100644 --- a/weave/legacy/weave/ops_primitives/dict.py +++ b/weave_query/weave_query/ops_primitives/dict.py @@ -1,12 +1,12 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave._dict_utils import typeddict_pick_output_type -from weave.legacy.weave.decorator_class import weave_class -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.op_args import OpVarArgs -from weave.legacy.weave.ops_primitives._dict_utils import ( +from weave_query import weave_types as types +from weave_query._dict_utils import typeddict_pick_output_type +from weave_query.decorator_class import weave_class +from weave_query.decorator_op import op +from weave_query.language_features.tagging import tagged_value_type +from weave_query.op_args import OpVarArgs +from weave_query.ops_primitives._dict_utils import ( tag_aware_dict_val_for_escaped_key, ) diff --git a/weave/legacy/weave/ops_primitives/file.py b/weave_query/weave_query/ops_primitives/file.py similarity index 90% rename from weave/legacy/weave/ops_primitives/file.py rename to weave_query/weave_query/ops_primitives/file.py index 476c953927b..0cb4a505e9a 100644 --- a/weave/legacy/weave/ops_primitives/file.py +++ b/weave_query/weave_query/ops_primitives/file.py @@ -1,13 +1,13 @@ import json import typing -from weave.legacy.weave import environment as weave_env -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import file_base, wandb_file_manager -from weave.legacy.weave.artifact_fs import FilesystemArtifactDir, FilesystemArtifactFile -from weave.legacy.weave.artifact_wandb import WandbArtifact, WandbArtifactManifest +from weave_query import environment as weave_env +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import file_base, wandb_file_manager +from weave_query.artifact_fs import FilesystemArtifactDir, FilesystemArtifactFile +from weave_query.artifact_wandb import WandbArtifact, WandbArtifactManifest @op(name="dir-pathReturnType", hidden=True) diff --git a/weave/legacy/weave/ops_primitives/file_artifact.py b/weave_query/weave_query/ops_primitives/file_artifact.py similarity index 87% rename from weave/legacy/weave/ops_primitives/file_artifact.py rename to weave_query/weave_query/ops_primitives/file_artifact.py index 299c4e87be5..5487b675dea 100644 --- a/weave/legacy/weave/ops_primitives/file_artifact.py +++ b/weave_query/weave_query/ops_primitives/file_artifact.py @@ -1,7 +1,7 @@ import typing -from weave.legacy.weave.api import op -from weave.legacy.weave import artifact_fs +from weave_query.api import op +from weave_query import artifact_fs @op(name="FilesystemArtifactFile-directUrl") diff --git a/weave/legacy/weave/ops_primitives/file_local.py b/weave_query/weave_query/ops_primitives/file_local.py similarity index 83% rename from weave/legacy/weave/ops_primitives/file_local.py rename to weave_query/weave_query/ops_primitives/file_local.py index dbf21b4c1a6..b460c76668d 100644 --- a/weave/legacy/weave/ops_primitives/file_local.py +++ b/weave_query/weave_query/ops_primitives/file_local.py @@ -1,10 +1,10 @@ import os import typing -from weave.legacy.weave import environment -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op -from weave.legacy.weave import file_local +from weave_query import environment +from weave_query import weave_types as types +from weave_query.api import op +from weave_query import file_local @op(name="LocalFile-directUrl") diff --git a/weave/legacy/weave/ops_primitives/geom.py b/weave_query/weave_query/ops_primitives/geom.py similarity index 93% rename from weave/legacy/weave/ops_primitives/geom.py rename to weave_query/weave_query/ops_primitives/geom.py index 32264b7b9d5..b320d07868c 100644 --- a/weave/legacy/weave/ops_primitives/geom.py +++ b/weave_query/weave_query/ops_primitives/geom.py @@ -1,6 +1,6 @@ from PIL import Image -from weave.legacy.weave import api as weave +from weave_query import api as weave @weave.type() diff --git a/weave/legacy/weave/ops_primitives/html.py b/weave_query/weave_query/ops_primitives/html.py similarity index 82% rename from weave/legacy/weave/ops_primitives/html.py rename to weave_query/weave_query/ops_primitives/html.py index 72d6d25a45d..21cfc32599b 100644 --- a/weave/legacy/weave/ops_primitives/html.py +++ b/weave_query/weave_query/ops_primitives/html.py @@ -1,7 +1,7 @@ import dataclasses -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_types as types +from weave_query import api as weave +from weave_query import weave_types as types class HtmlType(types.Type): diff --git a/weave/legacy/weave/ops_primitives/image.py b/weave_query/weave_query/ops_primitives/image.py similarity index 93% rename from weave/legacy/weave/ops_primitives/image.py rename to weave_query/weave_query/ops_primitives/image.py index 9432887943b..9ed1a7aefc5 100644 --- a/weave/legacy/weave/ops_primitives/image.py +++ b/weave_query/weave_query/ops_primitives/image.py @@ -5,8 +5,8 @@ import PIL import PIL.Image -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_types as types +from weave_query import api as weave +from weave_query import weave_types as types class ImageType(types.Type): diff --git a/weave/legacy/weave/ops_primitives/json_.py b/weave_query/weave_query/ops_primitives/json_.py similarity index 90% rename from weave/legacy/weave/ops_primitives/json_.py rename to weave_query/weave_query/ops_primitives/json_.py index b781daab769..4de6fd4202c 100644 --- a/weave/legacy/weave/ops_primitives/json_.py +++ b/weave_query/weave_query/ops_primitives/json_.py @@ -1,8 +1,8 @@ import json import typing -from weave.legacy.weave import api as weave -from weave.legacy.weave import file_base +from weave_query import api as weave +from weave_query import file_base def load_jsonl(jsonlfile): diff --git a/weave/legacy/weave/ops_primitives/list_.py b/weave_query/weave_query/ops_primitives/list_.py similarity index 97% rename from weave/legacy/weave/ops_primitives/list_.py rename to weave_query/weave_query/ops_primitives/list_.py index 6d80a26a62f..d13f9463b3c 100644 --- a/weave/legacy/weave/ops_primitives/list_.py +++ b/weave_query/weave_query/ops_primitives/list_.py @@ -6,20 +6,20 @@ import numpy as np import pandas as pd -from weave.legacy.weave import storage -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box, execute_fast, errors -from weave.legacy.weave._dict_utils import tag_aware_dict_val_for_escaped_key -from weave.legacy.weave.decorator_class import weave_class -from weave.legacy.weave.decorator_op import op -from weave.legacy.weave.graph import Node -from weave.legacy.weave.language_features.tagging import ( +from weave_query import storage +from weave_query import weave_types as types +from weave_query import box, execute_fast, errors +from weave_query._dict_utils import tag_aware_dict_val_for_escaped_key +from weave_query.decorator_class import weave_class +from weave_query.decorator_op import op +from weave_query.graph import Node +from weave_query.language_features.tagging import ( tag_store, tagged_value_type, tagged_value_type_helpers, ) -from weave.legacy.weave.op_args import OpVarArgs -from weave.legacy.weave.ops_primitives import projection_utils +from weave_query.op_args import OpVarArgs +from weave_query.ops_primitives import projection_utils def getitem_output_type(input_types, list_type=types.List): @@ -392,8 +392,8 @@ def flatten_return_type(input_types): def _flatten(l): - from weave.legacy.weave.arrow.arrow_tags import pushdown_list_tags - from weave.legacy.weave.ops_arrow import ArrowWeaveList + from weave_query.arrow.arrow_tags import pushdown_list_tags + from weave_query.ops_arrow import ArrowWeaveList if isinstance(l, list): tags = None diff --git a/weave/legacy/weave/ops_primitives/list_tag_getters.py b/weave_query/weave_query/ops_primitives/list_tag_getters.py similarity index 74% rename from weave/legacy/weave/ops_primitives/list_tag_getters.py rename to weave_query/weave_query/ops_primitives/list_tag_getters.py index ca21015dc17..c292271b628 100644 --- a/weave/legacy/weave/ops_primitives/list_tag_getters.py +++ b/weave_query/weave_query/ops_primitives/list_tag_getters.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.language_features.tagging import make_tag_getter_op +from weave_query import weave_types as types +from weave_query.language_features.tagging import make_tag_getter_op group_tag_getter_op = make_tag_getter_op.make_tag_getter_op( "groupKey", types.Any(), op_name="group-groupkey" diff --git a/weave/legacy/weave/ops_primitives/markdown.py b/weave_query/weave_query/ops_primitives/markdown.py similarity index 82% rename from weave/legacy/weave/ops_primitives/markdown.py rename to weave_query/weave_query/ops_primitives/markdown.py index b82e7e547f9..7e257514699 100644 --- a/weave/legacy/weave/ops_primitives/markdown.py +++ b/weave_query/weave_query/ops_primitives/markdown.py @@ -1,7 +1,7 @@ import dataclasses -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_types as types +from weave_query import api as weave +from weave_query import weave_types as types class MarkdownType(types.Type): diff --git a/weave/legacy/weave/ops_primitives/number.py b/weave_query/weave_query/ops_primitives/number.py similarity index 98% rename from weave/legacy/weave/ops_primitives/number.py rename to weave_query/weave_query/ops_primitives/number.py index c260617c53b..c4cc69a0b62 100644 --- a/weave/legacy/weave/ops_primitives/number.py +++ b/weave_query/weave_query/ops_primitives/number.py @@ -4,9 +4,9 @@ import numpy as np -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class -from weave.legacy.weave import timestamp as weave_timestamp +from weave_query import weave_types as types +from weave_query.api import op, weave_class +from weave_query import timestamp as weave_timestamp binary_number_op_input_type = { "lhs": types.Number(), diff --git a/weave/legacy/weave/ops_primitives/number_bin.py b/weave_query/weave_query/ops_primitives/number_bin.py similarity index 81% rename from weave/legacy/weave/ops_primitives/number_bin.py rename to weave_query/weave_query/ops_primitives/number_bin.py index d60e531c268..ad4935f7ac5 100644 --- a/weave/legacy/weave/ops_primitives/number_bin.py +++ b/weave_query/weave_query/ops_primitives/number_bin.py @@ -1,12 +1,12 @@ import math -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, use -from weave.legacy.weave import graph -from weave.legacy.weave.ops_primitives import date -from weave.legacy.weave.ops_primitives.dict import dict_ -from weave.legacy.weave.weave_internal import call_fn, define_fn, make_const_node -from weave.legacy.weave.weave_types import Function, NumberBinType +from weave_query import weave_types as types +from weave_query.api import op, use +from weave_query import graph +from weave_query.ops_primitives import date +from weave_query.ops_primitives.dict import dict_ +from weave_query.weave_internal import call_fn, define_fn, make_const_node +from weave_query.weave_types import Function, NumberBinType @op( diff --git a/weave/legacy/weave/ops_primitives/obj.py b/weave_query/weave_query/ops_primitives/obj.py similarity index 93% rename from weave/legacy/weave/ops_primitives/obj.py rename to weave_query/weave_query/ops_primitives/obj.py index 35e24284d2c..001e1630133 100644 --- a/weave/legacy/weave/ops_primitives/obj.py +++ b/weave_query/weave_query/ops_primitives/obj.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import codify -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class +from weave_query import codify +from weave_query import weave_types as types +from weave_query.api import op, weave_class # This matches the output type logic of the frontend diff --git a/weave/legacy/weave/ops_primitives/op_def.py b/weave_query/weave_query/ops_primitives/op_def.py similarity index 68% rename from weave/legacy/weave/ops_primitives/op_def.py rename to weave_query/weave_query/ops_primitives/op_def.py index 1d7458476fe..58b73047300 100644 --- a/weave/legacy/weave/ops_primitives/op_def.py +++ b/weave_query/weave_query/ops_primitives/op_def.py @@ -1,7 +1,7 @@ -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.op_def import OpDef -from weave.legacy.weave.op_def_type import OpDefType +from weave_query import api as weave +from weave_query import weave_types as types +from weave_query.op_def import OpDef +from weave_query.op_def_type import OpDefType @weave.weave_class(weave_type=OpDefType) diff --git a/weave/legacy/weave/ops_primitives/pandas_.py b/weave_query/weave_query/ops_primitives/pandas_.py similarity index 97% rename from weave/legacy/weave/ops_primitives/pandas_.py rename to weave_query/weave_query/ops_primitives/pandas_.py index d1e286ed931..3ed4f4e2062 100644 --- a/weave/legacy/weave/ops_primitives/pandas_.py +++ b/weave_query/weave_query/ops_primitives/pandas_.py @@ -8,12 +8,12 @@ import pyarrow as pa import pyarrow.parquet as pq -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class -from weave.legacy.weave import box, file_base, graph, mappers_python -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type -from weave.legacy.weave.ops_primitives import list_ +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op, weave_class +from weave_query import box, file_base, graph, mappers_python +from weave_query.language_features.tagging import tag_store, tagged_value_type +from weave_query.ops_primitives import list_ # Hack hack hack diff --git a/weave/legacy/weave/ops_primitives/projection_utils.py b/weave_query/weave_query/ops_primitives/projection_utils.py similarity index 98% rename from weave/legacy/weave/ops_primitives/projection_utils.py rename to weave_query/weave_query/ops_primitives/projection_utils.py index 127c41d8773..8b74f731eed 100644 --- a/weave/legacy/weave/ops_primitives/projection_utils.py +++ b/weave_query/weave_query/ops_primitives/projection_utils.py @@ -9,8 +9,8 @@ from sklearn.decomposition import PCA from sklearn.manifold import TSNE -from weave.legacy.weave import errors -from weave.legacy.weave import context_state, environment +from weave_query import errors +from weave_query import context_state, environment umap_lib = {} diff --git a/weave/legacy/weave/ops_primitives/random_junk.py b/weave_query/weave_query/ops_primitives/random_junk.py similarity index 82% rename from weave/legacy/weave/ops_primitives/random_junk.py rename to weave_query/weave_query/ops_primitives/random_junk.py index b158c1221ab..38278f6512f 100644 --- a/weave/legacy/weave/ops_primitives/random_junk.py +++ b/weave_query/weave_query/ops_primitives/random_junk.py @@ -1,8 +1,8 @@ # Ideas for ops, but not production ready. -from weave.legacy.weave import api as api -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class +from weave_query import api as api +from weave_query import weave_types as types +from weave_query.api import op, weave_class op( name="root-compare_versions", diff --git a/weave/legacy/weave/ops_primitives/server.py b/weave_query/weave_query/ops_primitives/server.py similarity index 58% rename from weave/legacy/weave/ops_primitives/server.py rename to weave_query/weave_query/ops_primitives/server.py index 536343a5d9f..66c73e214f0 100644 --- a/weave/legacy/weave/ops_primitives/server.py +++ b/weave_query/weave_query/ops_primitives/server.py @@ -1,5 +1,5 @@ -from weave.legacy.weave.decorator_op import op -from weave.version import VERSION +from weave_query.decorator_op import op +from weave_query.version import VERSION @op( diff --git a/weave/legacy/weave/ops_primitives/set_.py b/weave_query/weave_query/ops_primitives/set_.py similarity index 94% rename from weave/legacy/weave/ops_primitives/set_.py rename to weave_query/weave_query/ops_primitives/set_.py index f73d5627709..d10884400d9 100644 --- a/weave/legacy/weave/ops_primitives/set_.py +++ b/weave_query/weave_query/ops_primitives/set_.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.decorators import op +from weave_query import weave_types as types +from weave_query.decorators import op def get_const_union_vals(type_, of_type): diff --git a/weave/legacy/weave/ops_primitives/sql.py b/weave_query/weave_query/ops_primitives/sql.py similarity index 97% rename from weave/legacy/weave/ops_primitives/sql.py rename to weave_query/weave_query/ops_primitives/sql.py index f4f78567744..02c0d59e22f 100644 --- a/weave/legacy/weave/ops_primitives/sql.py +++ b/weave_query/weave_query/ops_primitives/sql.py @@ -2,11 +2,11 @@ import functools import math -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class -from weave.legacy.weave import decorator_type -from weave.legacy.weave.language_features.tagging import tagged_value_type -from weave.legacy.weave.ops_primitives import graph, list_ +from weave_query import weave_types as types +from weave_query.api import op, weave_class +from weave_query import decorator_type +from weave_query.language_features.tagging import tagged_value_type +from weave_query.ops_primitives import graph, list_ try: import sqlalchemy diff --git a/weave/legacy/weave/ops_primitives/string.py b/weave_query/weave_query/ops_primitives/string.py similarity index 98% rename from weave/legacy/weave/ops_primitives/string.py rename to weave_query/weave_query/ops_primitives/string.py index 6f0433f801f..5f50da87080 100644 --- a/weave/legacy/weave/ops_primitives/string.py +++ b/weave_query/weave_query/ops_primitives/string.py @@ -4,8 +4,8 @@ import numpy as np -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, weave_class +from weave_query import weave_types as types +from weave_query.api import op, weave_class @op(name="root-string") diff --git a/weave/legacy/weave/ops_primitives/test_any.py b/weave_query/weave_query/ops_primitives/test_any.py similarity index 73% rename from weave/legacy/weave/ops_primitives/test_any.py rename to weave_query/weave_query/ops_primitives/test_any.py index 95d2c93c2af..667d9310aa8 100644 --- a/weave/legacy/weave/ops_primitives/test_any.py +++ b/weave_query/weave_query/ops_primitives/test_any.py @@ -2,9 +2,9 @@ import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import box -from weave.legacy.weave.ops_primitives import any +from weave_query import api as weave +from weave_query import box +from weave_query.ops_primitives import any cases: list[typing.Tuple[typing.Any, bool]] = [ (1, False), diff --git a/weave/legacy/weave/ops_primitives/test_dict.py b/weave_query/weave_query/ops_primitives/test_dict.py similarity index 78% rename from weave/legacy/weave/ops_primitives/test_dict.py rename to weave_query/weave_query/ops_primitives/test_dict.py index 04a85b7509b..43700dae1a3 100644 --- a/weave/legacy/weave/ops_primitives/test_dict.py +++ b/weave_query/weave_query/ops_primitives/test_dict.py @@ -1,6 +1,7 @@ -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.language_features.tagging import tagged_value_type +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.language_features.tagging import tagged_value_type def test_keys_type(): @@ -25,7 +26,7 @@ def test_pick(): ), "a", ) - assert weave.use(weave.legacy.weave.ops.TypedDict.pick(obj, key)) == "x" + assert weave.use(weave_query.ops.TypedDict.pick(obj, key)) == "x" def test_pick_none_key(): diff --git a/weave_query/weave_query/ops_primitives/test_file.py b/weave_query/weave_query/ops_primitives/test_file.py new file mode 100644 index 00000000000..1723c47e0fd --- /dev/null +++ b/weave_query/weave_query/ops_primitives/test_file.py @@ -0,0 +1,9 @@ +import weave_query as weave +import weave_query +from weave_query.ops_primitives import file_local + + +def test_file_browsing(): + test_dir = weave_query.ops.local_path("./testdata/").path("test_dir") + assert test_dir.type == file_local.LocalDirType() + assert weave.use(test_dir.path("b.txt").contents()) == "howdy\n" diff --git a/weave/legacy/weave/ops_primitives/test_image.py b/weave_query/weave_query/ops_primitives/test_image.py similarity index 89% rename from weave/legacy/weave/ops_primitives/test_image.py rename to weave_query/weave_query/ops_primitives/test_image.py index 66e17caac85..1e04815b88e 100644 --- a/weave/legacy/weave/ops_primitives/test_image.py +++ b/weave_query/weave_query/ops_primitives/test_image.py @@ -2,8 +2,8 @@ import pytest from PIL import Image -from weave.legacy.weave import storage -from weave.legacy.weave.ops_primitives import api as weave +from weave_query import storage +from weave_query.ops_primitives import api as weave def test_image(): diff --git a/weave/legacy/weave/ops_primitives/test_list.py b/weave_query/weave_query/ops_primitives/test_list.py similarity index 95% rename from weave/legacy/weave/ops_primitives/test_list.py rename to weave_query/weave_query/ops_primitives/test_list.py index f2bf31f7cd4..13cafc4b2be 100644 --- a/weave/legacy/weave/ops_primitives/test_list.py +++ b/weave_query/weave_query/ops_primitives/test_list.py @@ -1,16 +1,16 @@ import pytest -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import box -from weave.legacy.weave.language_features.tagging import ( +from weave_query import api as weave +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import box +from weave_query.language_features.tagging import ( make_tag_getter_op, tag_store, tagged_value_type, ) -from weave.legacy.weave.ops_primitives import dict, errors, list_, number, runs -from weave.legacy.tests.util import geom, weavejs_ops +from weave_query.ops_primitives import dict, errors, list_, number, runs +from tests.util import geom, weavejs_ops def test_unnest(): diff --git a/weave_query/weave_query/ops_primitives/test_list_range.py b/weave_query/weave_query/ops_primitives/test_list_range.py new file mode 100644 index 00000000000..c0876b32e75 --- /dev/null +++ b/weave_query/weave_query/ops_primitives/test_list_range.py @@ -0,0 +1,8 @@ +import pytest + +import weave_query as weave +import weave_query + + +def test_range(): + assert weave.use(weave_query.ops.range(0, 3, 1)).to_pylist_tagged() == [0, 1, 2] diff --git a/weave/legacy/weave/ops_primitives/test_pandas.py b/weave_query/weave_query/ops_primitives/test_pandas.py similarity index 85% rename from weave/legacy/weave/ops_primitives/test_pandas.py rename to weave_query/weave_query/ops_primitives/test_pandas.py index f6977800091..4f74990c093 100644 --- a/weave/legacy/weave/ops_primitives/test_pandas.py +++ b/weave_query/weave_query/ops_primitives/test_pandas.py @@ -1,8 +1,8 @@ import pandas as pd -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.ops_primitives import pandas_ as op_pandas +from weave_query import api as weave +from weave_query import weave_types as types +from weave_query.ops_primitives import pandas_ as op_pandas def test_save_dataframe(): diff --git a/weave/legacy/weave/ops_primitives/test_set.py b/weave_query/weave_query/ops_primitives/test_set.py similarity index 83% rename from weave/legacy/weave/ops_primitives/test_set.py rename to weave_query/weave_query/ops_primitives/test_set.py index 96b2048a7df..95392774ae1 100644 --- a/weave/legacy/weave/ops_primitives/test_set.py +++ b/weave_query/weave_query/ops_primitives/test_set.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import ops_primitives, val_const +import weave_query as weave +import weave_query +from weave_query import ops_primitives, val_const def test_difference_type(): diff --git a/weave/legacy/weave/ops_primitives/test_type.py b/weave_query/weave_query/ops_primitives/test_type.py similarity index 75% rename from weave/legacy/weave/ops_primitives/test_type.py rename to weave_query/weave_query/ops_primitives/test_type.py index 4240de94abf..fce725962e3 100644 --- a/weave/legacy/weave/ops_primitives/test_type.py +++ b/weave_query/weave_query/ops_primitives/test_type.py @@ -1,14 +1,15 @@ import pytest -import weave +import weave_query as weave +import weave_query def test_cast_basic(): - valid_cast = weave.legacy.weave.ops.cast(1, weave.types.Int()) + valid_cast = weave_query.ops.cast(1, weave.types.Int()) assert valid_cast.type == weave.types.Int() assert weave.use(valid_cast) == 1 - invalid_cast = weave.legacy.weave.ops.cast(1, weave.types.String()) + invalid_cast = weave_query.ops.cast(1, weave.types.String()) assert invalid_cast.type == weave.types.String() with pytest.raises(weave.errors.WeaveTypeError): weave.use(invalid_cast) diff --git a/weave/legacy/weave/ops_primitives/test_typeddict.py b/weave_query/weave_query/ops_primitives/test_typeddict.py similarity index 95% rename from weave/legacy/weave/ops_primitives/test_typeddict.py rename to weave_query/weave_query/ops_primitives/test_typeddict.py index 6f57ee0ef8a..d17af64e207 100644 --- a/weave/legacy/weave/ops_primitives/test_typeddict.py +++ b/weave_query/weave_query/ops_primitives/test_typeddict.py @@ -1,11 +1,12 @@ import pytest -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import box -from weave.legacy.weave.arrow.arrow import ArrowWeaveListType -from weave.legacy.weave.language_features.tagging import tag_store, tagged_value_type -from weave.legacy.tests.util.list_arrow_test_helpers import ArrowNode +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import box +from weave_query.arrow.arrow import ArrowWeaveListType +from weave_query.language_features.tagging import tag_store, tagged_value_type +from tests.util.list_arrow_test_helpers import ArrowNode pick_options = [ # Basic Pick diff --git a/weave/legacy/weave/ops_primitives/timestamp_bin.py b/weave_query/weave_query/ops_primitives/timestamp_bin.py similarity index 86% rename from weave/legacy/weave/ops_primitives/timestamp_bin.py rename to weave_query/weave_query/ops_primitives/timestamp_bin.py index 0263ec39fe6..d73524e8c99 100644 --- a/weave/legacy/weave/ops_primitives/timestamp_bin.py +++ b/weave_query/weave_query/ops_primitives/timestamp_bin.py @@ -1,10 +1,10 @@ -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op, use -from weave.legacy.weave import graph -from weave.legacy.weave.ops_primitives.dict import dict_ -from weave.legacy.weave.weave_internal import call_fn, define_fn, make_const_node -from weave.legacy.weave.weave_types import Function, TimestampBinType +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query.api import op, use +from weave_query import graph +from weave_query.ops_primitives.dict import dict_ +from weave_query.weave_internal import call_fn, define_fn, make_const_node +from weave_query.weave_types import Function, TimestampBinType NICE_BIN_SIZES_SEC = [ # TODO: will need more steps along here for smooth zooming. diff --git a/weave/legacy/weave/ops_primitives/type.py b/weave_query/weave_query/ops_primitives/type.py similarity index 85% rename from weave/legacy/weave/ops_primitives/type.py rename to weave_query/weave_query/ops_primitives/type.py index a2575507f75..43e2b396fa3 100644 --- a/weave/legacy/weave/ops_primitives/type.py +++ b/weave_query/weave_query/ops_primitives/type.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import op +from weave_query import errors +from weave_query import weave_types as types +from weave_query.api import op @op( diff --git a/weave/legacy/weave/ops_primitives/weave_api.py b/weave_query/weave_query/ops_primitives/weave_api.py similarity index 99% rename from weave/legacy/weave/ops_primitives/weave_api.py rename to weave_query/weave_query/ops_primitives/weave_api.py index 6912fca77ef..8ebac7a7f7f 100644 --- a/weave/legacy/weave/ops_primitives/weave_api.py +++ b/weave_query/weave_query/ops_primitives/weave_api.py @@ -2,9 +2,9 @@ import time import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.api import mutation, op, weave_class -from weave.legacy.weave import ( +from weave_query import weave_types as types +from weave_query.api import mutation, op, weave_class +from weave_query import ( storage, weave_internal, errors, @@ -20,7 +20,7 @@ trace_legacy, uris, ) -from weave.legacy.weave.graph import Node +from weave_query.graph import Node @weave_class(weave_type=types.RefType) @@ -633,7 +633,7 @@ def append( @op(mutation=True, name="stream_table-log") def stream_table_log(self: graph.Node, val: typing.Any) -> typing.Any: st_obj = weave_internal.use(self) - from weave.legacy.weave.monitoring import StreamTable + from weave_query.monitoring import StreamTable if not isinstance(st_obj, StreamTable): raise errors.WeaveInternalError( diff --git a/weave/legacy/weave/panel.py b/weave_query/weave_query/panel.py similarity index 95% rename from weave/legacy/weave/panel.py rename to weave_query/weave_query/panel.py index 4938235861e..4826d3959f9 100644 --- a/weave/legacy/weave/panel.py +++ b/weave_query/weave_query/panel.py @@ -3,10 +3,10 @@ import typing from tarfile import DEFAULT_FORMAT -from weave.legacy.weave import api as weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph, panel_util, errors, storage +from weave_query import api as weave +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import graph, panel_util, errors, storage def run_variable_lambdas( @@ -157,6 +157,6 @@ def to_json(self): } def _ipython_display_(self): - from weave.legacy.weave import show + from weave_query import show show.show(self) diff --git a/weave/legacy/weave/panel_util.py b/weave_query/weave_query/panel_util.py similarity index 80% rename from weave/legacy/weave/panel_util.py rename to weave_query/weave_query/panel_util.py index 87c28b25f1d..74cee376341 100644 --- a/weave/legacy/weave/panel_util.py +++ b/weave_query/weave_query/panel_util.py @@ -1,12 +1,12 @@ import typing -from weave.legacy.weave import weave_types -from weave.legacy.weave import storage, graph, panel +from weave_query import weave_types +from weave_query import storage, graph, panel def make_node(v: typing.Any) -> graph.Node: """Business logic for how values passed to panels are converted to json.""" - from weave.legacy.weave import ops + from weave_query import ops if isinstance(v, graph.Node): return v diff --git a/weave_query/weave_query/panels/__init__.py b/weave_query/weave_query/panels/__init__.py new file mode 100644 index 00000000000..d79135d2913 --- /dev/null +++ b/weave_query/weave_query/panels/__init__.py @@ -0,0 +1,70 @@ +from weave_query import context_state as _context_state + +_loading_builtins_token = _context_state.set_loading_built_ins() + +from weave_query.panels.panel_auto import * + +# basic +from weave_query.panels.panel_basic import * + +# top level board +from weave_query.panels.panel_board import Board, BoardPanel, BoardPanelLayout +from weave_query.panels.panel_card import Card, CardTab +from weave_query.panels.panel_color import Color +from weave_query.panels.panel_daterange import DateRange + +# domain +from weave_query.panels.panel_domain import * +from weave_query.panels.panel_dropdown import Dropdown, DropdownConfig +from weave_query.panels.panel_each import Each +from weave_query.panels.panel_each_column import EachColumn + +# special +from weave_query.panels.panel_expression import * +from weave_query.panels.panel_facet import Facet +from weave_query.panels.panel_facet_tabs import FacetTabs +from weave_query.panels.panel_filter_editor import FilterEditor +from weave_query.panels.panel_function_editor import ( + FunctionEditor, + FunctionEditorConfig, +) +from weave_query.panels.panel_group import ( + Group, + GroupLayoutFlow, + GroupPanel, + GroupPanelLayout, +) +from weave_query.panels.panel_grouping_editor import GroupingEditor + +# Incomplete +from weave_query.panels.panel_histogram import * +from weave_query.panels.panel_html import PanelHtml + +# layout +from weave_query.panels.panel_labeled_item import LabeledItem + +# legacy +from weave_query.panels.panel_legacy import * +from weave_query.panels.panel_markdown import PanelMarkdown + +# Non-standard editor (todo: update) +from weave_query.panels.panel_object_picker import ObjectPicker, ObjectPickerConfig +from weave_query.panels.panel_plot import Plot, PlotConstants, Series + +# sidebar specific +from weave_query.panels.panel_query import Query, QueryCondition, QueryConfig +from weave_query.panels.panel_sections import Sections +from weave_query.panels.panel_select import SelectEditor, SelectEditorConfig + +# editors +from weave_query.panels.panel_slider import Slider, SliderConfig +from weave_query.panels.panel_string import PanelString +from weave_query.panels.panel_string_editor import StringEditor +from weave_query.panels.panel_table import ColumnDef, Table, TableColumn +from weave_query.panels.panel_trace import Trace + +# navigation +from weave_query.panels.panel_weavelink import WeaveLink +from weave_query.panel import Panel + +_context_state.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/panels/bank.py b/weave_query/weave_query/panels/bank.py similarity index 93% rename from weave/legacy/weave/panels/bank.py rename to weave_query/weave_query/panels/bank.py index 0568ae389c2..19cf8308618 100644 --- a/weave/legacy/weave/panels/bank.py +++ b/weave_query/weave_query/panels/bank.py @@ -1,6 +1,6 @@ # TODO: move all panelbank stuff here -from weave.legacy.weave.panels import panel_group +from weave_query.panels import panel_group def default_panel_bank_flow_section_config(): diff --git a/weave/legacy/weave/panels/panel_auto.py b/weave_query/weave_query/panels/panel_auto.py similarity index 60% rename from weave/legacy/weave/panels/panel_auto.py rename to weave_query/weave_query/panels/panel_auto.py index f97027755b9..e61e246744a 100644 --- a/weave/legacy/weave/panels/panel_auto.py +++ b/weave_query/weave_query/panels/panel_auto.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel # Currently Auto is not a real panel, the system handles it. diff --git a/weave/legacy/weave/panels/panel_basic.py b/weave_query/weave_query/panels/panel_basic.py similarity index 71% rename from weave/legacy/weave/panels/panel_basic.py rename to weave_query/weave_query/panels/panel_basic.py index 8ae26009cf2..4341182957e 100644 --- a/weave/legacy/weave/panels/panel_basic.py +++ b/weave_query/weave_query/panels/panel_basic.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel @weave.type() diff --git a/weave/legacy/weave/panels/panel_board.py b/weave_query/weave_query/panels/panel_board.py similarity index 91% rename from weave/legacy/weave/panels/panel_board.py rename to weave_query/weave_query/panels/panel_board.py index ab14570b1ef..b13596e41c3 100644 --- a/weave/legacy/weave/panels/panel_board.py +++ b/weave_query/weave_query/panels/panel_board.py @@ -1,10 +1,11 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import panel -from weave.legacy.weave.panels import panel_group +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import panel +from weave_query.panels import panel_group @dataclasses.dataclass @@ -51,7 +52,7 @@ def varbar(editable=True, items=None) -> panel_group.Group: def main() -> panel_group.Group: - return weave.legacy.weave.panels.Group( + return weave_query.panels.Group( layoutMode="grid", showExpressions=True, enableAddPanel=True, @@ -65,11 +66,11 @@ def Board( ): showExpressions = True if editable else "titleBar" vb = vars - if not isinstance(vb, weave.legacy.weave.panels.Group): + if not isinstance(vb, weave_query.panels.Group): vb = varbar(editable=editable, items=vars) main = panels - if not isinstance(panels, weave.legacy.weave.panels.Group): + if not isinstance(panels, weave_query.panels.Group): main_items = {} main_panel_layouts: list[panel_group.LayedOutPanel] = [] for i, p in enumerate(panels): diff --git a/weave/legacy/weave/panels/panel_card.py b/weave_query/weave_query/panels/panel_card.py similarity index 89% rename from weave/legacy/weave/panels/panel_card.py rename to weave_query/weave_query/panels/panel_card.py index 0eacbcba710..0e999438d2f 100644 --- a/weave/legacy/weave/panels/panel_card.py +++ b/weave_query/weave_query/panels/panel_card.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, panel, panel_util CardContentType = typing.TypeVar("CardContentType") diff --git a/weave/legacy/weave/panels/panel_color.py b/weave_query/weave_query/panels/panel_color.py similarity index 71% rename from weave/legacy/weave/panels/panel_color.py rename to weave_query/weave_query/panels/panel_color.py index f984a7fbba4..334f11cf8a5 100644 --- a/weave/legacy/weave/panels/panel_color.py +++ b/weave_query/weave_query/panels/panel_color.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, panel, panel_util @weave.type() diff --git a/weave/legacy/weave/panels/panel_daterange.py b/weave_query/weave_query/panels/panel_daterange.py similarity index 89% rename from weave/legacy/weave/panels/panel_daterange.py rename to weave_query/weave_query/panels/panel_daterange.py index f06df0b3c75..0a8ddeacc84 100644 --- a/weave/legacy/weave/panels/panel_daterange.py +++ b/weave_query/weave_query/panels/panel_daterange.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, panel, panel_util @weave.type() diff --git a/weave/legacy/weave/panels/panel_domain.py b/weave_query/weave_query/panels/panel_domain.py similarity index 80% rename from weave/legacy/weave/panels/panel_domain.py rename to weave_query/weave_query/panels/panel_domain.py index 535edd09dab..03105c305ac 100644 --- a/weave/legacy/weave/panels/panel_domain.py +++ b/weave_query/weave_query/panels/panel_domain.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel @weave.type(__override_name="wb_trace_tree-traceViewer") # type: ignore diff --git a/weave/legacy/weave/panels/panel_dropdown.py b/weave_query/weave_query/panels/panel_dropdown.py similarity index 86% rename from weave/legacy/weave/panels/panel_dropdown.py rename to weave_query/weave_query/panels/panel_dropdown.py index 6eda21e6563..c45e5c73595 100644 --- a/weave/legacy/weave/panels/panel_dropdown.py +++ b/weave_query/weave_query/panels/panel_dropdown.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, panel, panel_util @weave.type() @@ -28,7 +29,7 @@ def __init__( self.config = DropdownConfig() if "choices" in options: self.config.choices = options["choices"] - if isinstance(self.input_node, weave.legacy.weave.graph.VoidNode): + if isinstance(self.input_node, weave_query.graph.VoidNode): choices_type = typing.cast(weave.types.List, self.config.choices.type) self.input_node = weave_internal.const( [], weave.types.List(choices_type.object_type) diff --git a/weave/legacy/weave/panels/panel_each.py b/weave_query/weave_query/panels/panel_each.py similarity index 80% rename from weave/legacy/weave/panels/panel_each.py rename to weave_query/weave_query/panels/panel_each.py index 6ae0188c5e5..ffdb66b6d3a 100644 --- a/weave/legacy/weave/panels/panel_each.py +++ b/weave_query/weave_query/panels/panel_each.py @@ -1,10 +1,11 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel -from weave.legacy.weave.panels.bank import default_panel_bank_flow_section_config -from weave.legacy.weave.panels.panel_group import PanelBankSectionConfig +import weave_query as weave +import weave_query +from weave_query import graph, panel +from weave_query.panels.bank import default_panel_bank_flow_section_config +from weave_query.panels.panel_group import PanelBankSectionConfig PanelType = typing.TypeVar("PanelType") diff --git a/weave/legacy/weave/panels/panel_each_column.py b/weave_query/weave_query/panels/panel_each_column.py similarity index 80% rename from weave/legacy/weave/panels/panel_each_column.py rename to weave_query/weave_query/panels/panel_each_column.py index 04b6f01aaa4..aea7918980f 100644 --- a/weave/legacy/weave/panels/panel_each_column.py +++ b/weave_query/weave_query/panels/panel_each_column.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel -from weave.legacy.weave.panels.panel_group import PanelBankSectionConfig +import weave_query as weave +import weave_query +from weave_query import graph, panel +from weave_query.panels.panel_group import PanelBankSectionConfig RenderType = typing.TypeVar("RenderType") diff --git a/weave_query/weave_query/panels/panel_expression.py b/weave_query/weave_query/panels/panel_expression.py new file mode 100644 index 00000000000..96761979520 --- /dev/null +++ b/weave_query/weave_query/panels/panel_expression.py @@ -0,0 +1,8 @@ +import weave_query as weave +import weave_query +from weave_query import panel + + +@weave.type() +class Expression(panel.Panel): + id = "Expression" diff --git a/weave/legacy/weave/panels/panel_facet.py b/weave_query/weave_query/panels/panel_facet.py similarity index 86% rename from weave/legacy/weave/panels/panel_facet.py rename to weave_query/weave_query/panels/panel_facet.py index bfaa9c3378f..06d18833ec2 100644 --- a/weave/legacy/weave/panels/panel_facet.py +++ b/weave_query/weave_query/panels/panel_facet.py @@ -1,12 +1,13 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import graph, panel, panel_util -from weave.legacy.weave.arrow import list_ -from weave.legacy.weave.panels import table_state +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import graph, panel, panel_util +from weave_query.arrow import list_ +from weave_query.panels import table_state @weave.type() @@ -38,10 +39,10 @@ class FacetConfig: default_factory=lambda: None ) xAxisLabel: weave.Node[str] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) yAxisLabel: weave.Node[str] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) @@ -120,14 +121,14 @@ def selected(self): ) x_fn = self.config.table.columnSelectFunctions[self.config.dims.x] y_fn = self.config.table.columnSelectFunctions[self.config.dims.y] - filtered = weave.legacy.weave.ops.List.filter( + filtered = weave_query.ops.List.filter( self.input_node, - lambda item: weave.legacy.weave.ops.Boolean.bool_and( - weave.legacy.weave.ops.String.__eq__( + lambda item: weave_query.ops.Boolean.bool_and( + weave_query.ops.String.__eq__( x_fn, self.config.selectedCell["x"], ), - weave.legacy.weave.ops.String.__eq__( + weave_query.ops.String.__eq__( y_fn, self.config.selectedCell["y"], ), diff --git a/weave/legacy/weave/panels/panel_facet_tabs.py b/weave_query/weave_query/panels/panel_facet_tabs.py similarity index 70% rename from weave/legacy/weave/panels/panel_facet_tabs.py rename to weave_query/weave_query/panels/panel_facet_tabs.py index 2a62ebea446..b19d6b4032d 100644 --- a/weave/legacy/weave/panels/panel_facet_tabs.py +++ b/weave_query/weave_query/panels/panel_facet_tabs.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel -from weave.legacy.weave.panels.panel_group import PanelBankSectionConfig +import weave_query as weave +import weave_query +from weave_query import graph, panel +from weave_query.panels.panel_group import PanelBankSectionConfig RenderType = typing.TypeVar("RenderType") @@ -11,7 +12,7 @@ @weave.type() class FacetTabsConfig(typing.Generic[RenderType]): tab: weave.Node[typing.Optional[typing.Any]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) panel: RenderType = dataclasses.field(default_factory=lambda: graph.VoidNode()) # type: ignore diff --git a/weave/legacy/weave/panels/panel_filter_editor.py b/weave_query/weave_query/panels/panel_filter_editor.py similarity index 90% rename from weave/legacy/weave/panels/panel_filter_editor.py rename to weave_query/weave_query/panels/panel_filter_editor.py index c04e3b07818..01b223765ad 100644 --- a/weave/legacy/weave/panels/panel_filter_editor.py +++ b/weave_query/weave_query/panels/panel_filter_editor.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel +import weave_query as weave +import weave_query +from weave_query import graph, panel ExpressionType = typing.TypeVar("ExpressionType") diff --git a/weave/legacy/weave/panels/panel_function_editor.py b/weave_query/weave_query/panels/panel_function_editor.py similarity index 83% rename from weave/legacy/weave/panels/panel_function_editor.py rename to weave_query/weave_query/panels/panel_function_editor.py index dc3f3f488f3..de4ee0bbd9f 100644 --- a/weave/legacy/weave/panels/panel_function_editor.py +++ b/weave_query/weave_query/panels/panel_function_editor.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel +import weave_query as weave +import weave_query +from weave_query import graph, panel ExpressionType = typing.TypeVar("ExpressionType") diff --git a/weave/legacy/weave/panels/panel_group.py b/weave_query/weave_query/panels/panel_group.py similarity index 97% rename from weave/legacy/weave/panels/panel_group.py rename to weave_query/weave_query/panels/panel_group.py index 54e7566e501..08ab8790c0b 100644 --- a/weave/legacy/weave/panels/panel_group.py +++ b/weave_query/weave_query/panels/panel_group.py @@ -2,9 +2,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import ( +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import ( errors, codifiable_value_mixin, codify, @@ -13,11 +14,11 @@ panel, panel_util, ) -from weave.legacy.weave.panels.bank import ( +from weave_query.panels.bank import ( default_panel_bank_flow_section_config, flow_layout, ) -from weave.legacy.weave.panels.panel_group_panel_info import PanelInfo +from weave_query.panels.panel_group_panel_info import PanelInfo ItemsType = typing.TypeVar("ItemsType") @@ -337,7 +338,7 @@ def to_code(self) -> typing.Optional[str]: ",".join([f_name + "=" + f_val for f_name, f_val in field_vals]) + "," ) return ( - f"""weave.legacy.weave.panels.panel_group.Group({input_node_str} {param_str})""" + f"""weave_query.panels.panel_group.Group({input_node_str} {param_str})""" ) # @property diff --git a/weave/legacy/weave/panels/panel_group_panel_info.py b/weave_query/weave_query/panels/panel_group_panel_info.py similarity index 100% rename from weave/legacy/weave/panels/panel_group_panel_info.py rename to weave_query/weave_query/panels/panel_group_panel_info.py diff --git a/weave/legacy/weave/panels/panel_grouping_editor.py b/weave_query/weave_query/panels/panel_grouping_editor.py similarity index 90% rename from weave/legacy/weave/panels/panel_grouping_editor.py rename to weave_query/weave_query/panels/panel_grouping_editor.py index ce608643040..27d00430d63 100644 --- a/weave/legacy/weave/panels/panel_grouping_editor.py +++ b/weave_query/weave_query/panels/panel_grouping_editor.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel +import weave_query as weave +import weave_query +from weave_query import graph, panel ExpressionType = typing.TypeVar("ExpressionType") diff --git a/weave/legacy/weave/panels/panel_histogram.py b/weave_query/weave_query/panels/panel_histogram.py similarity index 73% rename from weave/legacy/weave/panels/panel_histogram.py rename to weave_query/weave_query/panels/panel_histogram.py index 79a91e9f726..403fb770554 100644 --- a/weave/legacy/weave/panels/panel_histogram.py +++ b/weave_query/weave_query/panels/panel_histogram.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel # TODO: This id conflicts with the histogram type! Panel types # should automatically have Panel in the name but they don't at the moment. diff --git a/weave/legacy/weave/panels/panel_html.py b/weave_query/weave_query/panels/panel_html.py similarity index 85% rename from weave/legacy/weave/panels/panel_html.py rename to weave_query/weave_query/panels/panel_html.py index bba1afb0b55..1fe8c1a700c 100644 --- a/weave/legacy/weave/panels/panel_html.py +++ b/weave_query/weave_query/panels/panel_html.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import graph, ops, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, ops, panel, panel_util @weave.type() diff --git a/weave/legacy/weave/panels/panel_labeled_item.py b/weave_query/weave_query/panels/panel_labeled_item.py similarity index 89% rename from weave/legacy/weave/panels/panel_labeled_item.py rename to weave_query/weave_query/panels/panel_labeled_item.py index 08c5703dc7f..6831ca12855 100644 --- a/weave/legacy/weave/panels/panel_labeled_item.py +++ b/weave_query/weave_query/panels/panel_labeled_item.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, panel, panel_util ItemType = typing.TypeVar("ItemType") diff --git a/weave/legacy/weave/panels/panel_legacy.py b/weave_query/weave_query/panels/panel_legacy.py similarity index 97% rename from weave/legacy/weave/panels/panel_legacy.py rename to weave_query/weave_query/panels/panel_legacy.py index 9e7c255dd1d..544e45cdba1 100644 --- a/weave/legacy/weave/panels/panel_legacy.py +++ b/weave_query/weave_query/panels/panel_legacy.py @@ -11,7 +11,8 @@ import dataclasses import typing -import weave +import weave_query as weave +import weave_query @dataclasses.dataclass @@ -73,7 +74,7 @@ class LPanel: def define_panel(p: LPanel): - class DummyClass(weave.legacy.weave.panel.Panel): + class DummyClass(weave_query.panel.Panel): id = p.panel_id type_cache.append(DummyClass) diff --git a/weave/legacy/weave/panels/panel_markdown.py b/weave_query/weave_query/panels/panel_markdown.py similarity index 85% rename from weave/legacy/weave/panels/panel_markdown.py rename to weave_query/weave_query/panels/panel_markdown.py index fc489f6efc3..4dbf4b5f718 100644 --- a/weave/legacy/weave/panels/panel_markdown.py +++ b/weave_query/weave_query/panels/panel_markdown.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import graph, ops, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import graph, ops, panel, panel_util @weave.type() diff --git a/weave/legacy/weave/panels/panel_object_picker.py b/weave_query/weave_query/panels/panel_object_picker.py similarity index 94% rename from weave/legacy/weave/panels/panel_object_picker.py rename to weave_query/weave_query/panels/panel_object_picker.py index 35a7321166c..f17656743fb 100644 --- a/weave/legacy/weave/panels/panel_object_picker.py +++ b/weave_query/weave_query/panels/panel_object_picker.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import graph, panel +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import graph, panel ChoiceType = typing.TypeVar("ChoiceType") diff --git a/weave/legacy/weave/panels/panel_plot.py b/weave_query/weave_query/panels/panel_plot.py similarity index 98% rename from weave/legacy/weave/panels/panel_plot.py rename to weave_query/weave_query/panels/panel_plot.py index a14469bec3a..17f36621bae 100644 --- a/weave/legacy/weave/panels/panel_plot.py +++ b/weave_query/weave_query/panels/panel_plot.py @@ -3,13 +3,14 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import errors, codifiable_value_mixin, codify, graph, panel -from weave.legacy.weave.ops_primitives import boolean, list_ -from weave.legacy.weave.ops_primitives import dict as dict_ -from weave.legacy.weave.panels import panel_table, table_state +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import errors, codifiable_value_mixin, codify, graph, panel +from weave_query.ops_primitives import boolean, list_ +from weave_query.ops_primitives import dict as dict_ +from weave_query.panels import panel_table, table_state @weave.type() @@ -696,7 +697,7 @@ def to_code(self) -> typing.Optional[str]: param_str = ( ",".join([f_name + "=" + f_val for f_name, f_val in field_vals]) + "," ) - return f"""weave.legacy.weave.panels.panel_plot.Plot({codify.object_to_code_no_format(self.input_node)}, {param_str})""" + return f"""weave_query.panels.panel_plot.Plot({codify.object_to_code_no_format(self.input_node)}, {param_str})""" def make_set_all_series(dim_name: str) -> typing.Callable[[Plot, typing.Any], None]: diff --git a/weave/legacy/weave/panels/panel_query.py b/weave_query/weave_query/panels/panel_query.py similarity index 89% rename from weave/legacy/weave/panels/panel_query.py rename to weave_query/weave_query/panels/panel_query.py index 0336cd9e0f7..cfca8fa0562 100644 --- a/weave/legacy/weave/panels/panel_query.py +++ b/weave_query/weave_query/panels/panel_query.py @@ -1,10 +1,11 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import graph, panel -from weave.legacy.weave.panels import table_state +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import graph, panel +from weave_query.panels import table_state @weave.type() @@ -18,7 +19,7 @@ class QueryDimsConfig: @weave.type() class QueryCondition: expression: weave.Node[typing.Any] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) editor: EditorType = dataclasses.field(default_factory=lambda: graph.VoidNode()) # type: ignore @@ -76,7 +77,7 @@ def selected(self): and self.config.tableState.preFilterFunction is not None and self.config.tableState.preFilterFunction.type != weave.types.Invalid() ): - table_node = weave.legacy.weave.ops.List.filter( + table_node = weave_query.ops.List.filter( table_node, lambda row: weave_internal.call_fn( self.config.tableState.preFilterFunction, {"row": row} diff --git a/weave/legacy/weave/panels/panel_sections.py b/weave_query/weave_query/panels/panel_sections.py similarity index 70% rename from weave/legacy/weave/panels/panel_sections.py rename to weave_query/weave_query/panels/panel_sections.py index e23cbfff43b..7bf4f2e4045 100644 --- a/weave/legacy/weave/panels/panel_sections.py +++ b/weave_query/weave_query/panels/panel_sections.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import graph, panel -from weave.legacy.weave.panels.panel_group import PanelBankSectionConfig +import weave_query as weave +import weave_query +from weave_query import graph, panel +from weave_query.panels.panel_group import PanelBankSectionConfig RenderType = typing.TypeVar("RenderType") @@ -11,7 +12,7 @@ @weave.type() class SectionsConfig(typing.Generic[RenderType]): section: weave.Node[typing.Optional[typing.Any]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) panel: RenderType = dataclasses.field(default_factory=lambda: graph.VoidNode()) # type: ignore diff --git a/weave/legacy/weave/panels/panel_select.py b/weave_query/weave_query/panels/panel_select.py similarity index 83% rename from weave/legacy/weave/panels/panel_select.py rename to weave_query/weave_query/panels/panel_select.py index 07ca97bde51..bb6b7ccb6ff 100644 --- a/weave/legacy/weave/panels/panel_select.py +++ b/weave_query/weave_query/panels/panel_select.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import graph, panel +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import graph, panel @weave.type() @@ -27,7 +28,7 @@ def __init__(self, input_node=graph.VoidNode(), vars=None, config=None, **option self.config = SelectEditorConfig() if "choices" in options: self.config.choices = options["choices"] - if isinstance(self.input_node, weave.legacy.weave.graph.VoidNode): + if isinstance(self.input_node, weave_query.graph.VoidNode): # TODO: not string! self.input_node = weave_internal.const( [], weave.types.List(self.config.choices.type.object_type) diff --git a/weave/legacy/weave/panels/panel_sidebarcontainer.py b/weave_query/weave_query/panels/panel_sidebarcontainer.py similarity index 89% rename from weave/legacy/weave/panels/panel_sidebarcontainer.py rename to weave_query/weave_query/panels/panel_sidebarcontainer.py index 23ec5927233..b5dbe95ef8f 100644 --- a/weave/legacy/weave/panels/panel_sidebarcontainer.py +++ b/weave_query/weave_query/panels/panel_sidebarcontainer.py @@ -1,5 +1,5 @@ -from weave.legacy.weave import graph -from weave.legacy.weave.panels import panel +from weave_query import graph +from weave_query.panels import panel class VerticalContainerConfig: diff --git a/weave/legacy/weave/panels/panel_slider.py b/weave_query/weave_query/panels/panel_slider.py similarity index 82% rename from weave/legacy/weave/panels/panel_slider.py rename to weave_query/weave_query/panels/panel_slider.py index b7eef8aceb4..bc0b0defdd0 100644 --- a/weave/legacy/weave/panels/panel_slider.py +++ b/weave_query/weave_query/panels/panel_slider.py @@ -1,9 +1,10 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import panel @weave.type() @@ -28,7 +29,7 @@ class Slider(panel.Panel): def __post_init__(self, *args): super().__post_init__(*args) - if isinstance(self.input_node, weave.legacy.weave.graph.VoidNode): + if isinstance(self.input_node, weave_query.graph.VoidNode): self.__dict__["input_node"] = weave_internal.const(0) @weave.op() diff --git a/weave/legacy/weave/panels/panel_string.py b/weave_query/weave_query/panels/panel_string.py similarity index 89% rename from weave/legacy/weave/panels/panel_string.py rename to weave_query/weave_query/panels/panel_string.py index 58cecb54794..af1f0c45619 100644 --- a/weave/legacy/weave/panels/panel_string.py +++ b/weave_query/weave_query/panels/panel_string.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel ModeOption = typing.Literal["plaintext", "markdown", "diff"] diff --git a/weave/legacy/weave/panels/panel_string_editor.py b/weave_query/weave_query/panels/panel_string_editor.py similarity index 67% rename from weave/legacy/weave/panels/panel_string_editor.py rename to weave_query/weave_query/panels/panel_string_editor.py index 3aeb0f440d6..1ee6df177c2 100644 --- a/weave/legacy/weave/panels/panel_string_editor.py +++ b/weave_query/weave_query/panels/panel_string_editor.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel @weave.type() diff --git a/weave/legacy/weave/panels/panel_table.py b/weave_query/weave_query/panels/panel_table.py similarity index 93% rename from weave/legacy/weave/panels/panel_table.py rename to weave_query/weave_query/panels/panel_table.py index e9fb6b0760d..598a251e9b4 100644 --- a/weave/legacy/weave/panels/panel_table.py +++ b/weave_query/weave_query/panels/panel_table.py @@ -1,12 +1,13 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import codifiable_value_mixin, codify, panel -from weave.legacy.weave.graph import ConstNode, Node, OutputNode, VoidNode -from weave.legacy.weave.panels import table_state -from weave.legacy.weave.panels.panel_query import Query +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import codifiable_value_mixin, codify, panel +from weave_query.graph import ConstNode, Node, OutputNode, VoidNode +from weave_query.panels import table_state +from weave_query.panels.panel_query import Query @weave.type("tablePanelConfig") @@ -20,7 +21,7 @@ class TableConfig: class ColumnDef(typing.TypedDict): columnName: str - columnSelectFunction: weave.legacy.weave.graph.Node + columnSelectFunction: weave_query.graph.Node @dataclasses.dataclass @@ -128,7 +129,7 @@ def to_code(self) -> typing.Optional[str]: param_str = ( ",".join([f_name + "=" + f_val for f_name, f_val in field_vals]) + "," ) - return f"""weave.legacy.weave.panels.panel_table.Table({codify.object_to_code_no_format(self.input_node)}, {param_str})""" + return f"""weave_query.panels.panel_table.Table({codify.object_to_code_no_format(self.input_node)}, {param_str})""" def add_column( self, @@ -165,14 +166,14 @@ def _get_composite_group_key(self: typing.Union[Table, Query]) -> str: # TODO: preserve arrow def _get_pinned_node(self: typing.Union[Table, Query], data_or_rows_node: Node) -> Node: if self.config is None: - return weave.legacy.weave.ops.make_list() + return weave_query.ops.make_list() composite_group_key = _get_composite_group_key(self) pinned_data = self.config.pinnedRows.get(composite_group_key) if pinned_data is None or len(pinned_data) == 0: - return weave.legacy.weave.ops.make_list() + return weave_query.ops.make_list() - return weave.legacy.weave.ops.make_list( + return weave_query.ops.make_list( **{ f"v_{pin_ndx}": OutputNode( data_or_rows_node.type, @@ -213,7 +214,7 @@ def _get_rows_node(self: Table, apply_sort: bool = True) -> Node: and self.config.tableState.preFilterFunction is not None and self.config.tableState.preFilterFunction.type != weave.types.Invalid() ): - data_node = weave.legacy.weave.ops.List.filter( + data_node = weave_query.ops.List.filter( data_node, lambda row, index: weave_internal.call_fn( self.config.tableState.preFilterFunction, {"row": row, "index": index} @@ -226,9 +227,9 @@ def _get_rows_node(self: Table, apply_sort: bool = True) -> Node: group_ids: typing.Set[str] = set() if self.config and self.config.tableState.groupBy: group_ids = set(self.config.tableState.groupBy) - data_node = weave.legacy.weave.ops.List.groupby( + data_node = weave_query.ops.List.groupby( data_node, - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{ columns[col_id]["columnName"]: weave_internal.call_fn( columns[col_id]["columnSelectFunction"], @@ -242,9 +243,9 @@ def _get_rows_node(self: Table, apply_sort: bool = True) -> Node: ) # Apply Selection - data_node = weave.legacy.weave.ops.List.map( + data_node = weave_query.ops.List.map( data_node, - lambda row, index: weave.legacy.weave.ops.dict_( + lambda row, index: weave_query.ops.dict_( **{ col_def["columnName"]: ( weave_internal.call_fn( @@ -275,9 +276,9 @@ def make_sort_fn(sort_def, row_node): # else: # return row_node[col_name] - data_node = weave.legacy.weave.ops.List.sort( + data_node = weave_query.ops.List.sort( data_node, - lambda row: weave.legacy.weave.ops.make_list( + lambda row: weave_query.ops.make_list( **{ f"{sort_ndx}": make_sort_fn(sort_def, row) for sort_ndx, sort_def in enumerate(sort_defs) diff --git a/weave/legacy/weave/panels/panel_trace.py b/weave_query/weave_query/panels/panel_trace.py similarity index 93% rename from weave/legacy/weave/panels/panel_trace.py rename to weave_query/weave_query/panels/panel_trace.py index cd8f0ff4f56..596a8e9eadd 100644 --- a/weave/legacy/weave/panels/panel_trace.py +++ b/weave_query/weave_query/panels/panel_trace.py @@ -1,8 +1,9 @@ import dataclasses import typing -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel span_typed_dict_type = weave.types.TypedDict( { @@ -62,4 +63,4 @@ def __init__(self, input_node, vars=None, config=None, **options): ) def active_span(self: Trace): index = 0 if self.config is None else self.config.selectedSpanIndex - return weave.legacy.weave.ops_arrow.list_ops.index(self.input_node, index) + return weave_query.ops_arrow.list_ops.index(self.input_node, index) diff --git a/weave/legacy/weave/panels/panel_trace_span.py b/weave_query/weave_query/panels/panel_trace_span.py similarity index 72% rename from weave/legacy/weave/panels/panel_trace_span.py rename to weave_query/weave_query/panels/panel_trace_span.py index 35b565d6350..6509685200a 100644 --- a/weave/legacy/weave/panels/panel_trace_span.py +++ b/weave_query/weave_query/panels/panel_trace_span.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave import panel +import weave_query as weave +import weave_query +from weave_query import panel @weave.type("traceSpanPanel") diff --git a/weave/legacy/weave/panels/panel_weavelink.py b/weave_query/weave_query/panels/panel_weavelink.py similarity index 87% rename from weave/legacy/weave/panels/panel_weavelink.py rename to weave_query/weave_query/panels/panel_weavelink.py index 1d822212323..8e47a5185b6 100644 --- a/weave/legacy/weave/panels/panel_weavelink.py +++ b/weave_query/weave_query/panels/panel_weavelink.py @@ -1,15 +1,16 @@ import dataclasses import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import graph, ops, panel, panel_util +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import graph, ops, panel, panel_util @weave.type() class WeaveLinkConfig: to: weave.Node[typing.Optional[typing.Any]] = dataclasses.field( - default_factory=lambda: weave.legacy.weave.graph.VoidNode() + default_factory=lambda: weave_query.graph.VoidNode() ) vars: typing.Dict[str, graph.Node] = dataclasses.field(default_factory=dict) diff --git a/weave/legacy/weave/panels/table_state.py b/weave_query/weave_query/panels/table_state.py similarity index 97% rename from weave/legacy/weave/panels/table_state.py rename to weave_query/weave_query/panels/table_state.py index 0a333efe967..bf917da5aeb 100644 --- a/weave/legacy/weave/panels/table_state.py +++ b/weave_query/weave_query/panels/table_state.py @@ -7,9 +7,9 @@ import string import typing -from weave.legacy.weave import weave_internal -from weave.legacy.weave import decorator_type, graph, ops, panel, weave_types -from weave.legacy.weave.language_features.tagging import tagged_value_type +from weave_query import weave_internal +from weave_query import decorator_type, graph, ops, panel, weave_types +from weave_query.language_features.tagging import tagged_value_type @decorator_type.type() diff --git a/weave/legacy/weave/panels_py/__init__.py b/weave_query/weave_query/panels_py/__init__.py similarity index 64% rename from weave/legacy/weave/panels_py/__init__.py rename to weave_query/weave_query/panels_py/__init__.py index 90abece1622..9d14d96034d 100644 --- a/weave/legacy/weave/panels_py/__init__.py +++ b/weave_query/weave_query/panels_py/__init__.py @@ -1,8 +1,8 @@ -from weave.legacy.weave import context_state as _context_state +from weave_query import context_state as _context_state _loading_builtins_token = _context_state.set_loading_built_ins() -from weave.legacy.weave.panels_py import ( +from weave_query.panels_py import ( generator_templates, panel_autoboard, panel_llm_monitor, @@ -12,6 +12,6 @@ ) # This is just an example, uncomment to enable -# from weave.legacy.weave.panels_py import panel_example_custom_board +# from weave_query.panels_py import panel_example_custom_board _context_state.clear_loading_built_ins(_loading_builtins_token) diff --git a/weave/legacy/weave/panels_py/generator_templates.py b/weave_query/weave_query/panels_py/generator_templates.py similarity index 97% rename from weave/legacy/weave/panels_py/generator_templates.py rename to weave_query/weave_query/panels_py/generator_templates.py index 63cf1d0c6c8..cf23bee0add 100644 --- a/weave/legacy/weave/panels_py/generator_templates.py +++ b/weave_query/weave_query/panels_py/generator_templates.py @@ -18,8 +18,8 @@ import dataclasses import typing -from weave.legacy.weave import weave_types -from weave.legacy.weave import decorator_op, graph, registry_mem +from weave_query import weave_types +from weave_query import decorator_op, graph, registry_mem @dataclasses.dataclass diff --git a/weave/legacy/weave/panels_py/instructions/panel_autoboard.md b/weave_query/weave_query/panels_py/instructions/panel_autoboard.md similarity index 100% rename from weave/legacy/weave/panels_py/instructions/panel_autoboard.md rename to weave_query/weave_query/panels_py/instructions/panel_autoboard.md diff --git a/weave/legacy/weave/panels_py/instructions/panel_llm_monitor.md b/weave_query/weave_query/panels_py/instructions/panel_llm_monitor.md similarity index 100% rename from weave/legacy/weave/panels_py/instructions/panel_llm_monitor.md rename to weave_query/weave_query/panels_py/instructions/panel_llm_monitor.md diff --git a/weave/legacy/weave/panels_py/instructions/panel_trace_monitor.md b/weave_query/weave_query/panels_py/instructions/panel_trace_monitor.md similarity index 93% rename from weave/legacy/weave/panels_py/instructions/panel_trace_monitor.md rename to weave_query/weave_query/panels_py/instructions/panel_trace_monitor.md index 4f49b229fb0..349cfcaf4c9 100644 --- a/weave/legacy/weave/panels_py/instructions/panel_trace_monitor.md +++ b/weave_query/weave_query/panels_py/instructions/panel_trace_monitor.md @@ -25,7 +25,7 @@ pip install weave If you are already using `Langchain`, simply create a tracer and add it as a callback to your next call: ```python -from weave.legacy.weave.monitoring.langchain import WeaveTracer +from weave_query.monitoring.langchain import WeaveTracer tracer = WeaveTracer(f"{WB_ENTITY}/{WB_PROJECT}/{WB_STREAM}") llm.run(question, callbacks=[tracer]) @@ -38,7 +38,7 @@ llm.run(question, callbacks=[tracer]) If you have existing code, the Trace decorator (and related utilities) allows you to instrument and log in a variety of formats. For example: ```python -from weave.legacy.weave.monitoring import init_monitor +from weave_query.monitoring import init_monitor mon = init_monitor(f"{WB_ENTITY}/{WB_PROJECT}/{WB_STREAM}") @@ -55,7 +55,7 @@ def adder(a, b): Finally, if you want to manually log span data, you can do so as well by logging directly to a StreamTable: ```python -from weave.legacy.weave.monitoring import StreamTable +from weave_query.monitoring import StreamTable from weave.stream_data_interfaces import TraceSpanDict st = StreamTable(f"{WB_ENTITY}/{WB_PROJECT}/{WB_STREAM}") diff --git a/weave/legacy/weave/panels_py/panel_autoboard.py b/weave_query/weave_query/panels_py/panel_autoboard.py similarity index 84% rename from weave/legacy/weave/panels_py/panel_autoboard.py rename to weave_query/weave_query/panels_py/panel_autoboard.py index 810bfa88fc4..c873b07f14f 100644 --- a/weave/legacy/weave/panels_py/panel_autoboard.py +++ b/weave_query/weave_query/panels_py/panel_autoboard.py @@ -25,11 +25,12 @@ import os import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.panels import panel_plot -from weave.legacy.weave.panels_py.generator_templates import template_registry -from weave.legacy.weave import util +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.panels import panel_plot +from weave_query.panels_py.generator_templates import template_registry +from weave_query import util @weave.type() @@ -72,10 +73,10 @@ def timeseries( x_axis_type = input_node[x_axis_key].type.object_type # type: ignore if weave.types.optional(weave.types.Timestamp()).assign_type(x_axis_type): x_title = "" - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice + bin_fn = weave_query.ops.timestamp_bins_nice elif weave.types.optional(weave.types.Number()).assign_type(x_axis_type): x_title = x_axis_key - bin_fn = weave.legacy.weave.ops.numbers_bins_equal + bin_fn = weave_query.ops.numbers_bins_equal else: raise ValueError(f"Unsupported type for x_axis_key {x_axis_key}: {x_axis_type}") if mark == "bar": @@ -84,7 +85,7 @@ def timeseries( # TODO: should be midpoint x = lambda row: row[x_axis_key].bin(bin_fn(bin_domain_node, n_bins))["start"] - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( input_node, x=x, x_title=x_title, @@ -108,12 +109,12 @@ def timeseries_avg_line( ) -> weave.Panel: x_axis_type = input_node[x_axis_key].type.object_type # type: ignore if weave.types.optional(weave.types.Timestamp()).assign_type(x_axis_type): - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice + bin_fn = weave_query.ops.timestamp_bins_nice elif weave.types.optional(weave.types.Number()).assign_type(x_axis_type): - bin_fn = weave.legacy.weave.ops.numbers_bins_equal + bin_fn = weave_query.ops.numbers_bins_equal else: raise ValueError(f"Unsupported type for x_axis_key {x_axis_key}: {x_axis_type}") - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( input_node, x=lambda row: row[x_axis_key].bin(bin_fn(bin_domain_node, 100))["start"], x_title=x_axis_key, @@ -139,13 +140,13 @@ def timeseries_sum_bar( x_axis_type = input_node[x_axis_key].type.object_type # type: ignore if weave.types.optional(weave.types.Timestamp()).assign_type(x_axis_type): x_title = "" - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice + bin_fn = weave_query.ops.timestamp_bins_nice elif weave.types.optional(weave.types.Number()).assign_type(x_axis_type): x_title = x_axis_key - bin_fn = weave.legacy.weave.ops.numbers_bins_equal + bin_fn = weave_query.ops.numbers_bins_equal else: raise ValueError(f"Unsupported type for x_axis_key {x_axis_key}: {x_axis_type}") - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( input_node, x=lambda row: row[x_axis_key].bin(bin_fn(bin_domain_node, n_bins)), x_title=x_title, @@ -170,13 +171,13 @@ def timeseries_count_bar( x_axis_type = input_node[x_axis_key].type.object_type # type: ignore if weave.types.optional(weave.types.Timestamp()).assign_type(x_axis_type): x_title = "" - bin_fn = weave.legacy.weave.ops.timestamp_bins_nice + bin_fn = weave_query.ops.timestamp_bins_nice elif weave.types.optional(weave.types.Number()).assign_type(x_axis_type): x_title = x_axis_key - bin_fn = weave.legacy.weave.ops.numbers_bins_equal + bin_fn = weave_query.ops.numbers_bins_equal else: raise ValueError(f"Unsupported type for x_axis_key {x_axis_key}: {x_axis_type}") - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( input_node, x=lambda row: row[x_axis_key].bin(bin_fn(bin_domain_node, n_bins)), x_title=x_title, @@ -192,7 +193,7 @@ def categorical_dist( input_node: weave.Node[list[typing.Any]], key: str, ) -> weave.Panel: - return weave.legacy.weave.panels.Plot( + return weave_query.panels.Plot( input_node, y=lambda row: row[key], x=lambda row: row.count(), @@ -317,49 +318,49 @@ def auto_panels( panel = categorical_dist(window_data_node, key) categorical_panels.append(panel) - metrics = weave.legacy.weave.panels.Group( - layoutMode=weave.legacy.weave.panels.GroupLayoutFlow(2, 3), + metrics = weave_query.panels.Group( + layoutMode=weave_query.panels.GroupLayoutFlow(2, 3), items={"panel%s" % i: panel for i, panel in enumerate(metric_panels)}, ) - categoricals = weave.legacy.weave.panels.Group( - layoutMode=weave.legacy.weave.panels.GroupLayoutFlow(2, 3), + categoricals = weave_query.panels.Group( + layoutMode=weave_query.panels.GroupLayoutFlow(2, 3), items={"panel%s" % i: panel for i, panel in enumerate(categorical_panels)}, ) control_items = [ - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( input_node, id="data", ), # TODO: We need a filter editor. Can start with a filter expression # editor and make it more user-friendly later - weave.legacy.weave.panels.GroupPanel( - lambda data: weave.legacy.weave.ops.make_list( + weave_query.panels.GroupPanel( + lambda data: weave_query.ops.make_list( a=data[x_axis].min(), b=data[x_axis].max() ), id="data_range", hidden=True, ), - weave.legacy.weave.panels.GroupPanel(None, id="zoom_range", hidden=True), - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel(None, id="zoom_range", hidden=True), + weave_query.panels.GroupPanel( lambda zoom_range, data_range: zoom_range.coalesce(data_range), id="bin_range", hidden=True, ), - weave.legacy.weave.panels.GroupPanel( - lambda data, zoom_range: weave.legacy.weave.panels.DateRange( + weave_query.panels.GroupPanel( + lambda data, zoom_range: weave_query.panels.DateRange( zoom_range, domain=data[x_axis] ), id="date_picker", ), # TODO: groupby should really be a Dropdown / multi-select instead # of an expression - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( groupby, id="groupby", ), - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( lambda data, bin_range: data.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_and( + lambda row: weave_query.ops.Boolean.bool_and( row[x_axis] >= bin_range[0], row[x_axis] < bin_range[1] ) ), @@ -369,21 +370,21 @@ def auto_panels( ] panels = [ - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( metrics, id="metrics", - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12), + layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12), ), - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( categoricals, id="categoricals", - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=12), + layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=12), ), ] if "step" not in x_axis: panels.insert( 0, - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( timeseries_count_bar( data_node, time_domain_node, @@ -393,18 +394,18 @@ def auto_panels( 150, ), id="volume", - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), + layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), ), ) panels.append( - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( window_data_node, id="table", - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), + layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), ), ) - return weave.legacy.weave.panels.Board(vars=control_items, panels=panels, editable=False) + return weave_query.panels.Board(vars=control_items, panels=panels, editable=False) # The interface for constructing this Panel from Python @@ -415,7 +416,7 @@ class AutoBoard(weave.Panel): config: typing.Optional[AutoBoardConfig] = None @weave.op() # type: ignore - def render(self) -> weave.legacy.weave.panels.Group: + def render(self) -> weave_query.panels.Group: return auto_panels(self.input_node, self.config) # type: ignore @@ -426,7 +427,7 @@ def render(self) -> weave.legacy.weave.panels.Group: def seed_autoboard( input_node: weave.Node[typing.Any], config: typing.Optional[AutoBoardConfig] = None, -) -> weave.legacy.weave.panels.Group: +) -> weave_query.panels.Group: return auto_panels(input_node, config) # type: ignore diff --git a/weave/legacy/weave/panels_py/panel_eval.py b/weave_query/weave_query/panels_py/panel_eval.py similarity index 66% rename from weave/legacy/weave/panels_py/panel_eval.py rename to weave_query/weave_query/panels_py/panel_eval.py index 3cf7afacd07..0e39e74b149 100644 --- a/weave/legacy/weave/panels_py/panel_eval.py +++ b/weave_query/weave_query/panels_py/panel_eval.py @@ -1,5 +1,6 @@ -import weave -from weave.legacy.weave.panels import panel_board +import weave_query as weave +import weave_query +from weave_query.panels import panel_board # This is not yet general, it describes a board for a specific # formulation of a text extraction problem @@ -13,34 +14,34 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore summary = varbar.add( "summary", - weave.legacy.weave.ops.make_list( - a=weave.legacy.weave.ops.TypedDict.merge( - weave.legacy.weave.ops.dict_(name="baseline"), + weave_query.ops.make_list( + a=weave_query.ops.TypedDict.merge( + weave_query.ops.dict_(name="baseline"), baseline_eval_result["summary"], ), - b=weave.legacy.weave.ops.TypedDict.merge( - weave.legacy.weave.ops.dict_(name="candidate"), + b=weave_query.ops.TypedDict.merge( + weave_query.ops.dict_(name="candidate"), candidate_eval_result["summary"], ), ), ) - weave.legacy.weave.ops.make_list( + weave_query.ops.make_list( a=baseline_eval_result["eval_table"], b=baseline_eval_result["eval_table"] ) concatted_evals = varbar.add( "concatted_evals", - weave.legacy.weave.ops.List.concat( - weave.legacy.weave.ops.make_list( + weave_query.ops.List.concat( + weave_query.ops.make_list( a=baseline_eval_result["eval_table"].map( - lambda row: weave.legacy.weave.ops.TypedDict.merge( - weave.legacy.weave.ops.dict_(name="baseline"), row + lambda row: weave_query.ops.TypedDict.merge( + weave_query.ops.dict_(name="baseline"), row ) ), b=candidate_eval_result["eval_table"].map( - lambda row: weave.legacy.weave.ops.TypedDict.merge( - weave.legacy.weave.ops.dict_(name="candidate"), row + lambda row: weave_query.ops.TypedDict.merge( + weave_query.ops.dict_(name="candidate"), row ) ), ) @@ -50,8 +51,8 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore # join evals together first joined_evals = varbar.add( "joined_evals", - weave.legacy.weave.ops.join_all( - weave.legacy.weave.ops.make_list( + weave_query.ops.join_all( + weave_query.ops.make_list( a=baseline_eval_result["eval_table"], b=candidate_eval_result["eval_table"], ), @@ -63,7 +64,7 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore # then join dataset to evals dataset_evals = varbar.add( "dataset_evals", - weave.legacy.weave.ops.join_2( + weave_query.ops.join_2( dataset_var, joined_evals, lambda row: row["id"], @@ -75,7 +76,7 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore ), ) - main = weave.legacy.weave.panels.Group( + main = weave_query.panels.Group( layoutMode="grid", showExpressions=True, enableAddPanel=True, @@ -87,72 +88,72 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore main.add( "avg_f1", - weave.legacy.weave.panels.Plot( + weave_query.panels.Plot( summary, x=lambda row: row["avg_f1"], y=lambda row: row["name"], color=lambda row: row["name"], ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=0, w=12, h=4), + layout=weave_query.panels.GroupPanelLayout(x=0, y=0, w=12, h=4), ) main.add( "latency", - weave.legacy.weave.panels.Plot( + weave_query.panels.Plot( concatted_evals, x=lambda row: row["summary"]["latency"], y=lambda row: row["name"], color=lambda row: row["name"], mark="boxplot", ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=0, w=12, h=4), + layout=weave_query.panels.GroupPanelLayout(x=12, y=0, w=12, h=4), ) main.add( "field_name_f1", - weave.legacy.weave.panels.Plot( + weave_query.panels.Plot( summary, x=lambda row: row["field_name.f1"], y=lambda row: row["name"], color=lambda row: row["name"], ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=8, h=4), + layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=8, h=4), ) main.add( "field_shares_f1", - weave.legacy.weave.panels.Plot( + weave_query.panels.Plot( summary, x=lambda row: row["field_shares.f1"], y=lambda row: row["name"], color=lambda row: row["name"], ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=8, y=4, w=8, h=4), + layout=weave_query.panels.GroupPanelLayout(x=8, y=4, w=8, h=4), ) main.add( "field_directors_f1", - weave.legacy.weave.panels.Plot( + weave_query.panels.Plot( summary, x=lambda row: row["field_directors.f1"], y=lambda row: row["name"], color=lambda row: row["name"], ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=16, y=4, w=8, h=4), + layout=weave_query.panels.GroupPanelLayout(x=16, y=4, w=8, h=4), ) - # ct = main.add('concat_t', concatted_evals, layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=24, h=12)) + # ct = main.add('concat_t', concatted_evals, layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=24, h=12)) # main.add('dataset_table', dataset) # main.add('joined_evals', joined_evals) # main.add( # "dataset_evals", # dataset_evals, - # layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=4, w=24, h=6), + # layout=weave_query.panels.GroupPanelLayout(x=0, y=4, w=24, h=6), # ) ##### Example details # more ideas: show examples that all got wrong, or that are confusing - # facet_f1 = weave.legacy.weave.panels.Facet( + # facet_f1 = weave_query.panels.Facet( # dataset_evals, # x=lambda row: row["evals.summary"][0]["f1"], # y=lambda row: row["evals.summary"][1]["f1"], @@ -162,10 +163,10 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore # f1_comparison = main.add( # "f1_comparison", # facet_f1, - # layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=8, w=12, h=6), + # layout=weave_query.panels.GroupPanelLayout(x=0, y=8, w=12, h=6), # ) - facet_correct = weave.legacy.weave.panels.Facet( + facet_correct = weave_query.panels.Facet( dataset_evals, x=lambda row: row["evals.summary"][0]["correct"], x_title="baseline correct", @@ -177,34 +178,34 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore correct_comparison = main.add( "correct_comparison", facet_correct, - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=8, w=12, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=8, w=12, h=6), ) main.add( "help", - weave.legacy.weave.panels.PanelString( + weave_query.panels.PanelString( "Click a cell in in the panel to the left to load examples for that cell.\n\nClick a row number in the table below to see details for that row.", mode="markdown", ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=8, w=12, h=6), + layout=weave_query.panels.GroupPanelLayout(x=12, y=8, w=12, h=6), ) # main.add( # "example_latencies", - # weave.legacy.weave.panels.Plot( + # weave_query.panels.Plot( # dataset_evals, # x=lambda row: row["evals.summary"]["latency"][0], # y=lambda row: row["evals.summary"]["latency"][1], # ), - # layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=8, w=12, h=6), + # layout=weave_query.panels.GroupPanelLayout(x=12, y=8, w=12, h=6), # ) - sel_ex_table = weave.legacy.weave.panels.Table(correct_comparison.selected()) + sel_ex_table = weave_query.panels.Table(correct_comparison.selected()) sel_ex_table.config.rowSize = 2 sel_ex_table.add_column(lambda row: row["dataset.id"], "id") sel_ex_table.add_column(lambda row: row["dataset.example"], "example") sel_ex_table.add_column(lambda row: row["dataset.label.name"], "label.name") sel_ex_table.add_column( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( baseline=row["evals.result"][0]["name"], candidate=row["evals.result"][1]["name"], ), @@ -212,7 +213,7 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore ) sel_ex_table.add_column(lambda row: row["dataset.label.shares"], "label.shares") sel_ex_table.add_column( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( baseilne=row["evals.result"][0]["shares"].toString(), candidate=row["evals.result"][1]["shares"].toString(), ), @@ -222,14 +223,14 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore lambda row: row["dataset.label.directors"], "label.directors" ) sel_ex_table.add_column( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( baseilne=row["evals.result"][0]["directors"].toString(), candidate=row["evals.result"][1]["directors"].toString(), ), "result.directors", ) sel_ex_table.add_column( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( baseilne=row["evals.summary"][0]["latency"], candidate=row["evals.summary"][1]["latency"], ), @@ -239,19 +240,19 @@ def eval_board(dataset, eval_result0, eval_result1): # type: ignore selected_examples = main.add( "selected_examples", sel_ex_table, - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=14, w=24, h=12), + layout=weave_query.panels.GroupPanelLayout(x=0, y=14, w=24, h=12), ) main.add( "baseilne_detail", selected_examples.active_data()["evals.summary"][0], - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=26, w=12, h=8), + layout=weave_query.panels.GroupPanelLayout(x=0, y=26, w=12, h=8), ) main.add( "candidate_detail", selected_examples.active_data()["evals.summary"][1], - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=26, w=12, h=8), + layout=weave_query.panels.GroupPanelLayout(x=12, y=26, w=12, h=8), ) - return weave.legacy.weave.panels.Board(vars=varbar, panels=main) + return weave_query.panels.Board(vars=varbar, panels=main) diff --git a/weave/legacy/weave/panels_py/panel_example_custom_board.py b/weave_query/weave_query/panels_py/panel_example_custom_board.py similarity index 76% rename from weave/legacy/weave/panels_py/panel_example_custom_board.py rename to weave_query/weave_query/panels_py/panel_example_custom_board.py index eb118a56d5d..a5860ba5237 100644 --- a/weave/legacy/weave/panels_py/panel_example_custom_board.py +++ b/weave_query/weave_query/panels_py/panel_example_custom_board.py @@ -1,7 +1,8 @@ -import weave -from weave.legacy.weave import weave_internal as internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.panels_py.generator_templates import template_registry +import weave_query as weave +import weave_query +from weave_query import weave_internal as internal +from weave_query import weave_types as types +from weave_query.panels_py.generator_templates import template_registry # IMPORTANT: To enable this (or any template), it must be imported in # weave/panels_py/__init__.py This example is explicitly commented out since it @@ -40,13 +41,13 @@ ) def board( input_node, -) -> weave.legacy.weave.panels.Group: +) -> weave_query.panels.Group: # Define your VarBar variables here control_items = [ - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( internal.const("Example Custom Board"), id="title" ), - weave.legacy.weave.panels.GroupPanel(input_node, id="data"), + weave_query.panels.GroupPanel(input_node, id="data"), ] title_var = internal.make_var_node(input_node.type, "title") @@ -54,8 +55,8 @@ def board( # Define your panels here panels = [ - weave.legacy.weave.panels.BoardPanel(title_var, id="title_panel"), - weave.legacy.weave.panels.BoardPanel(data_var, id="table"), + weave_query.panels.BoardPanel(title_var, id="title_panel"), + weave_query.panels.BoardPanel(data_var, id="table"), ] # Example of using the input type to modify the board: @@ -63,13 +64,13 @@ def board( for column_name, column_type in input_node.type.object_type.property_types.items(): if types.optional(types.Number()).assign_type(column_type): panels.append( - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( data_var[column_name], # type: ignore id=column_name + "_distribution", ) ) - return weave.legacy.weave.panels.Board(vars=control_items, panels=panels) + return weave_query.panels.Board(vars=control_items, panels=panels) template_registry.register( diff --git a/weave/legacy/weave/panels_py/panel_llm_monitor.py b/weave_query/weave_query/panels_py/panel_llm_monitor.py similarity index 85% rename from weave/legacy/weave/panels_py/panel_llm_monitor.py rename to weave_query/weave_query/panels_py/panel_llm_monitor.py index ed5c3563ec9..f902c86ddb8 100644 --- a/weave/legacy/weave/panels_py/panel_llm_monitor.py +++ b/weave_query/weave_query/panels_py/panel_llm_monitor.py @@ -1,17 +1,18 @@ import os import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_internal as internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import util, dispatch -from weave.legacy.weave.panels import panel_board, panel_group -from weave.legacy.weave.panels_py import panel_autoboard -from weave.legacy.weave.panels_py.generator_templates import template_registry +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import weave_internal as internal +from weave_query import weave_types as types +from weave_query import util, dispatch +from weave_query.panels import panel_board, panel_group +from weave_query.panels_py import panel_autoboard +from weave_query.panels_py.generator_templates import template_registry -panels = weave.legacy.weave.panels -ops = weave.legacy.weave.ops +panels = weave_query.panels +ops = weave_query.ops # BOARD_ID must be unique across all ops. It must only contain letters and underscores. @@ -101,7 +102,7 @@ # input_node: weave.Node[list[typing.Any]] # @weave.op() -# def render(self) -> weave.legacy.weave.panels.Table: +# def render(self) -> weave_query.panels.Table: # table = panels.Table( # self.input_node, # columns=[lambda row: row["inputs"]["messages"][-1]["content"]], @@ -137,7 +138,7 @@ def openai_request_cost(record) -> float: # type: ignore model = record["output.model"] pt = record["summary.prompt_tokens"] ct = record["summary.completion_tokens"] - cost_per_1000 = weave.legacy.weave.ops.case( + cost_per_1000 = weave_query.ops.case( [ # finetuned {"when": model.startsWith("ada:"), "then": pt * 0.0016 + ct * 0.0016}, @@ -196,7 +197,7 @@ def board( augmented_data = varbar.add( "augmented_data", source_data.with_columns( - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( **{ "summary.cost": source_data.map( lambda row: openai_request_cost(row) @@ -231,7 +232,7 @@ def board( ## 1. raw_data_range is derived from raw_data filtered_range = varbar.add( "filtered_range", - weave.legacy.weave.ops.make_list( + weave_query.ops.make_list( a=filtered_data[timestamp_col_name].min(), b=filtered_data[timestamp_col_name].max(), ), @@ -244,7 +245,7 @@ def board( ## 2.b: Setup a date picker to set the user_zoom_range varbar.add( "time_range", - weave.legacy.weave.panels.DateRange( + weave_query.panels.DateRange( user_zoom_range, domain=source_data[timestamp_col_name] ), ) @@ -259,7 +260,7 @@ def board( window_data = varbar.add( "window_data", augmented_data.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_and( + lambda row: weave_query.ops.Boolean.bool_and( row[timestamp_col_name] >= bin_range[0], row[timestamp_col_name] <= bin_range[1], ) @@ -269,7 +270,7 @@ def board( filters = varbar.add( "filters", - weave.legacy.weave.panels.FilterEditor(filter_fn, node=window_data), + weave_query.panels.FilterEditor(filter_fn, node=window_data), ) filtered_window_data = varbar.add( @@ -278,14 +279,14 @@ def board( grouping = varbar.add( "grouping", - weave.legacy.weave.panels.GroupingEditor(grouping_fn, node=window_data), + weave_query.panels.GroupingEditor(grouping_fn, node=window_data), ) height = 5 ### Overview tab - overview_tab = weave.legacy.weave.panels.Group( + overview_tab = weave_query.panels.Group( layoutMode="grid", showExpressions=True, enableAddPanel=True, @@ -304,7 +305,7 @@ def board( n_bins=100, mark="bar", ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=0, w=24, h=height), + layout=weave_query.panels.GroupPanelLayout(x=0, y=0, w=24, h=height), ) overview_tab.add( @@ -320,7 +321,7 @@ def board( x_domain=user_zoom_range, n_bins=50, ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=height, w=12, h=height), + layout=weave_query.panels.GroupPanelLayout(x=0, y=height, w=12, h=height), ) overview_tab.add( @@ -336,29 +337,29 @@ def board( x_domain=user_zoom_range, n_bins=50, ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=height, w=12, h=height), + layout=weave_query.panels.GroupPanelLayout(x=12, y=height, w=12, h=height), ) overview_tab.add( "avg_cost_per_req", filtered_window_data["summary.cost"].avg(), # type: ignore - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=height * 2, w=6, h=3), + layout=weave_query.panels.GroupPanelLayout(x=0, y=height * 2, w=6, h=3), ) overview_tab.add( "avg_prompt_tokens_per_req", filtered_window_data["summary.prompt_tokens"].avg(), # type: ignore - layout=weave.legacy.weave.panels.GroupPanelLayout(x=6, y=height * 2, w=6, h=3), + layout=weave_query.panels.GroupPanelLayout(x=6, y=height * 2, w=6, h=3), ) overview_tab.add( "avg_completion_tokens_per_req", filtered_window_data["summary.completion_tokens"].avg(), # type: ignore - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=height * 2, w=6, h=3), + layout=weave_query.panels.GroupPanelLayout(x=12, y=height * 2, w=6, h=3), ) ( overview_tab.add( "avg_total_tokens_per_req", filtered_window_data["summary.total_tokens"].avg(), # type: ignore - layout=weave.legacy.weave.panels.GroupPanelLayout(x=18, y=height * 2, w=6, h=3), + layout=weave_query.panels.GroupPanelLayout(x=18, y=height * 2, w=6, h=3), ), ) @@ -366,12 +367,12 @@ def board( # TODO: This doesn't really work yet (needs some manual UI configuration currently, # and it's ugly). # overview_tab.add( - # "attributes", weave.legacy.weave.panels.EachColumn(filtered_window_data["attributes"]) + # "attributes", weave_query.panels.EachColumn(filtered_window_data["attributes"]) # ) ### Requests tab - # requests_tab = weave.legacy.weave.panels.Group( + # requests_tab = weave_query.panels.Group( # layoutMode="grid", # showExpressions=True, # ) # l, showExpressions="titleBar") @@ -399,7 +400,7 @@ def board( requests_table_var = overview_tab.add( "table", requests_table, - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=13, w=24, h=8), + layout=weave_query.panels.GroupPanelLayout(x=0, y=13, w=24, h=8), ) overview_tab.add( "input", @@ -407,19 +408,19 @@ def board( requests_table_var.active_data()["inputs.messages"], columns=[lambda row: row["role"], lambda row: row["content"]], ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=21, w=12, h=8), + layout=weave_query.panels.GroupPanelLayout(x=0, y=21, w=12, h=8), ) overview_tab.add( "output", requests_table_var.active_row(), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=21, w=12, h=8), + layout=weave_query.panels.GroupPanelLayout(x=12, y=21, w=12, h=8), ) - # attributes_tab = weave.legacy.weave.panels.Group(layoutMode="grid") + # attributes_tab = weave_query.panels.Group(layoutMode="grid") - # users_tab = weave.legacy.weave.panels.Group(layoutMode="grid") + # users_tab = weave_query.panels.Group(layoutMode="grid") - # models_tab = weave.legacy.weave.panels.Group(layoutMode="grid") + # models_tab = weave_query.panels.Group(layoutMode="grid") # tabs = panels.Group( # layoutMode="tab", diff --git a/weave/legacy/weave/panels_py/panel_observability.py b/weave_query/weave_query/panels_py/panel_observability.py similarity index 81% rename from weave/legacy/weave/panels_py/panel_observability.py rename to weave_query/weave_query/panels_py/panel_observability.py index 1987039cfcb..6ce14e518ee 100644 --- a/weave/legacy/weave/panels_py/panel_observability.py +++ b/weave_query/weave_query/panels_py/panel_observability.py @@ -1,10 +1,11 @@ -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave.panels import panel_board -from weave.legacy.weave.panels_py.generator_templates import template_registry +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query.panels import panel_board +from weave_query.panels_py.generator_templates import template_registry -panels = weave.legacy.weave.panels +panels = weave_query.panels BOARD_INPUT_WEAVE_TYPE = types.List( types.TypedDict( @@ -76,16 +77,16 @@ def observability( timestamp_col_name = "timestamp" num_buckets = 80 - now = weave.legacy.weave.ops.datetime_now() + now = weave_query.ops.datetime_now() - dashboard = weave.legacy.weave.panels.Group( + dashboard = weave_query.panels.Group( layoutMode="grid", showExpressions=False, enableAddPanel=False, disableDeletePanel=True, ) - display_states = weave.legacy.weave.ops.dict_( + display_states = weave_query.ops.dict_( **{ "running": "running", "failed": "failed", @@ -100,7 +101,7 @@ def observability( varbar = panel_board.varbar(editable=False) source_data = input_node.map( - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{ "timestamp": row[timestamp_col_name], "entity_name": row["entity_name"], @@ -141,18 +142,18 @@ def observability( seven_days_in_seconds = 60 * 60 * 24 * 7 window_start = varbar.add( "window_start", - weave.legacy.weave.ops.from_number(now - seven_days_in_seconds), + weave_query.ops.from_number(now - seven_days_in_seconds), hidden=True, ) window_end = varbar.add( "window_end", - weave.legacy.weave.ops.from_number(now), + weave_query.ops.from_number(now), hidden=True, ) filtered_range = varbar.add( "filtered_range", - weave.legacy.weave.ops.make_list( + weave_query.ops.make_list( a=window_start, b=window_end, ), @@ -173,9 +174,9 @@ def observability( ) window_data = source_data.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_and( + lambda row: weave_query.ops.Boolean.bool_and( row["state"] != "TO_REMOVE", # remove hidden states - weave.legacy.weave.ops.Boolean.bool_and( + weave_query.ops.Boolean.bool_and( row[timestamp_col_name] >= bin_range[0], row[timestamp_col_name] <= bin_range[1], ), @@ -196,7 +197,7 @@ def observability( panels.FilterEditor(filter_fn, node=window_data), ) - colors_node = weave.legacy.weave.ops.dict_( + colors_node = weave_query.ops.dict_( **{ "running": "rgb(57, 126, 237)", "failed": "rgb(255, 122, 136)", @@ -216,7 +217,7 @@ def observability( queued_time_data = varbar.add( "queued_time_data", filtered_window_data.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_or( + lambda row: weave_query.ops.Boolean.bool_or( row["state"] == "queued", row["state"] == "pending", ), @@ -226,11 +227,11 @@ def observability( is_start_stop_state = weave_internal.define_fn( {"row": source_data.type.object_type}, - lambda row: weave.legacy.weave.ops.Boolean.bool_or( + lambda row: weave_query.ops.Boolean.bool_or( row["state"] == "running", - weave.legacy.weave.ops.Boolean.bool_or( + weave_query.ops.Boolean.bool_or( row["state"] == "finished", - weave.legacy.weave.ops.Boolean.bool_or( + weave_query.ops.Boolean.bool_or( row["state"] == "crashed", row["state"] == "failed", ), @@ -241,17 +242,17 @@ def observability( state_transitions_plot = panels.Plot( filtered_window_data, x=lambda row: row[timestamp_col_name].bin( - weave.legacy.weave.ops.timestamp_bins_nice(bin_range, num_buckets) + weave_query.ops.timestamp_bins_nice(bin_range, num_buckets) ), x_title="Time", y=lambda row: row.count(), y_title="Count of transitions by state", label=lambda row: row["state"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "State": row["state"][0], "Count": row.count(), - "Job (s)": weave.legacy.weave.ops.join_to_str(row["job"].unique(), ","), + "Job (s)": weave_query.ops.join_to_str(row["job"].unique(), ","), } ), color_title="state", @@ -261,12 +262,12 @@ def observability( domain_x=user_zoom_range, ) - runs_grouped = weave.legacy.weave.ops.List.groupby( + runs_grouped = weave_query.ops.List.groupby( queued_time_data, lambda row: row["trace_id"] ) - runs_mapped = weave.legacy.weave.ops.List.map( + runs_mapped = weave_query.ops.List.map( runs_grouped, - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{ "trace_id": row["trace_id"][0], "entity_name": row["entity_name"][0], @@ -275,10 +276,10 @@ def observability( "job": row["job"][-1], "enqueued": row[timestamp_col_name][0], "run_start": row[timestamp_col_name][-1], - "duration": weave.legacy.weave.ops.Number.__truediv__( - weave.legacy.weave.ops.Number.__mul__( - weave.legacy.weave.ops.timedelta_total_seconds( - weave.legacy.weave.ops.datetime_sub( + "duration": weave_query.ops.Number.__truediv__( + weave_query.ops.Number.__mul__( + weave_query.ops.timedelta_total_seconds( + weave_query.ops.datetime_sub( row[timestamp_col_name].max(), row[timestamp_col_name].min(), ), @@ -292,7 +293,7 @@ def observability( ) runs_mapped_filtered = varbar.add( "runs_mapped_filtered", - weave.legacy.weave.ops.List.filter( + weave_query.ops.List.filter( runs_mapped, lambda row: row["duration"] >= 0, ), @@ -302,19 +303,19 @@ def observability( queued_time_plot = panels.Plot( runs_mapped_filtered, x=lambda row: row["run_start"].bin( - weave.legacy.weave.ops.timestamp_bins_nice(bin_range, num_buckets) + weave_query.ops.timestamp_bins_nice(bin_range, num_buckets) ), x_title="Time", y=lambda row: row["duration"].sum(), y_title="Time spent queued (m)", label=lambda row: grouping_fn(row), - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ - "Job (s)": weave.legacy.weave.ops.join_to_str(row["job"].unique(), ","), - "User (s)": weave.legacy.weave.ops.join_to_str( + "Job (s)": weave_query.ops.join_to_str(row["job"].unique(), ","), + "User (s)": weave_query.ops.join_to_str( row["entity_name"].unique(), "," ), - "Project (s)": weave.legacy.weave.ops.join_to_str( + "Project (s)": weave_query.ops.join_to_str( row["project_name"].unique(), "," ), "Duration (m)": row["duration"].sum(), @@ -329,7 +330,7 @@ def observability( start_stop_states = varbar.add( "start_stop_states", - weave.legacy.weave.ops.List.filter(filtered_window_data, is_start_stop_state), + weave_query.ops.List.filter(filtered_window_data, is_start_stop_state), hidden=True, ) @@ -339,7 +340,7 @@ def observability( x_title="Time", y_title="Job", y=lambda row: row["job"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "Job": row["job"][0], "User": row["entity_name"][0], @@ -347,10 +348,10 @@ def observability( "Project": row["project_name"][0], "Run ID": row["run_id"][-1], "Status": row["state"][-1], - "Duration (m)": weave.legacy.weave.ops.Number.__truediv__( - weave.legacy.weave.ops.Number.__mul__( - weave.legacy.weave.ops.timedelta_total_seconds( - weave.legacy.weave.ops.datetime_sub( + "Duration (m)": weave_query.ops.Number.__truediv__( + weave_query.ops.Number.__mul__( + weave_query.ops.timedelta_total_seconds( + weave_query.ops.datetime_sub( row[timestamp_col_name].max(), row[timestamp_col_name].min(), ), @@ -378,7 +379,7 @@ def observability( jobs_table = panels.Table(jobs) # type: ignore jobs_table.add_column(lambda row: row["run_id"], "Run", groupby=True) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.run_ops.str_run_link( + lambda row: weave_query.ops.run_ops.str_run_link( entity_name=row["queue_uri"][0].split(":").index(2), project_name=row["project_name"][0], name=row["run_id"][0], @@ -396,26 +397,26 @@ def observability( "Current state", ) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.cond( + weave_query.ops.dict_( a=row["state"][-1] != "running", b=row["state"][-1] == "running", ), - weave.legacy.weave.ops.dict_( - a=weave.legacy.weave.ops.Number.__truediv__( - weave.legacy.weave.ops.timedelta_total_seconds( - weave.legacy.weave.ops.datetime_sub( + weave_query.ops.dict_( + a=weave_query.ops.Number.__truediv__( + weave_query.ops.timedelta_total_seconds( + weave_query.ops.datetime_sub( row[timestamp_col_name].max(), row[timestamp_col_name].min(), ) ), 60, ), - b=weave.legacy.weave.ops.Number.__truediv__( - weave.legacy.weave.ops.timedelta_total_seconds( - weave.legacy.weave.ops.datetime_sub( - weave.legacy.weave.ops.from_number( - weave.legacy.weave.ops.datetime_now() + b=weave_query.ops.Number.__truediv__( + weave_query.ops.timedelta_total_seconds( + weave_query.ops.datetime_sub( + weave_query.ops.from_number( + weave_query.ops.datetime_now() ), row[timestamp_col_name].min(), ) @@ -427,66 +428,66 @@ def observability( "Runtime (m)", ) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.cond( + weave_query.ops.dict_( a=row["state"][-1] != "running", b=row["state"][-1] == "running", ), - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( a=row["metrics"]["system"]["cpu_cores_util"][-1].avg(), - b=weave.legacy.weave.ops.make_const_node(types.NoneType(), None), + b=weave_query.ops.make_const_node(types.NoneType(), None), ), ), "Avg. CPU %", ) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.cond( + weave_query.ops.dict_( a=row["state"][-1] != "running", b=row["state"][-1] == "running", ), - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( a=row["metrics"]["system"]["gpu_cores_util"][-1].avg(), - b=weave.legacy.weave.ops.make_const_node(types.NoneType(), None), + b=weave_query.ops.make_const_node(types.NoneType(), None), ), ), "Avg. GPU %", ) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.cond( + weave_query.ops.dict_( a=row["state"][-1] != "running", b=row["state"][-1] == "running", ), - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( a=row["metrics"]["system"]["gpu_cores_mem"][-1].avg(), - b=weave.legacy.weave.ops.make_const_node(types.NoneType(), None), + b=weave_query.ops.make_const_node(types.NoneType(), None), ), ), "Avg. GPU mem. %", ) jobs_table.add_column( - lambda row: weave.legacy.weave.ops.cond( - weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.cond( + weave_query.ops.dict_( a=row["state"][-1] != "running", b=row["state"][-1] == "running", ), - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( a=row["metrics"]["system"]["memory"][-1], - b=weave.legacy.weave.ops.make_const_node(types.NoneType(), None), + b=weave_query.ops.make_const_node(types.NoneType(), None), ), ), "Avg. mem (MB)", ) - runs_table_data = weave.legacy.weave.ops.List.groupby( + runs_table_data = weave_query.ops.List.groupby( filtered_window_data, lambda row: row["trace_id"] ) runs_table_data_mapped = varbar.add( "runs_table_data", - weave.legacy.weave.ops.List.map( + weave_query.ops.List.map( runs_table_data, - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{ "trace_id": row["trace_id"][0], "user": row["entity_name"][0], @@ -522,7 +523,7 @@ def observability( ) runs_table.add_column( lambda row: row.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_or( + lambda row: weave_query.ops.Boolean.bool_or( row["states"][-1] == "crashed", row["states"][-1] == "failed", ), @@ -533,9 +534,9 @@ def observability( finished_runs = varbar.add( "finished_runs", filtered_window_data.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_or( + lambda row: weave_query.ops.Boolean.bool_or( row["state"] == "finished", - weave.legacy.weave.ops.Boolean.bool_or( + weave_query.ops.Boolean.bool_or( row["state"] == "crashed", row["state"] == "failed", ), @@ -556,24 +557,24 @@ def observability( no_legend=True, ) - metric_plot_data = weave.legacy.weave.ops.List.groupby( + metric_plot_data = weave_query.ops.List.groupby( start_stop_states, lambda row: row["trace_id"] ) metric_plot_data_mapped = varbar.add( "metric_plot_data", - weave.legacy.weave.ops.List.map( + weave_query.ops.List.map( metric_plot_data, - lambda row: weave.legacy.weave.ops.dict_( + lambda row: weave_query.ops.dict_( **{ "trace_id": row["trace_id"][0], "run_id": row["run_id"][-1], "entity_name": row["entity_name"][0], "project_name": row["project_name"][0], "job": row["job"][0], - "duration": weave.legacy.weave.ops.Number.__truediv__( - weave.legacy.weave.ops.Number.__mul__( - weave.legacy.weave.ops.timedelta_total_seconds( - weave.legacy.weave.ops.datetime_sub( + "duration": weave_query.ops.Number.__truediv__( + weave_query.ops.Number.__mul__( + weave_query.ops.timedelta_total_seconds( + weave_query.ops.datetime_sub( row[timestamp_col_name].max(), row[timestamp_col_name].min(), ), @@ -598,7 +599,7 @@ def observability( x_title="Run duration (minutes)", y_title="GPU utilization (%)", y=lambda row: row["GPU util %"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "Run ID": row["run_id"], "Project": row["project_name"], @@ -622,7 +623,7 @@ def observability( x_title="Run duration (minutes)", y_title="CPU utilization (%)", y=lambda row: row["CPU util %"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "Run ID": row["run_id"], "Project": row["project_name"], @@ -646,7 +647,7 @@ def observability( x_title="Run duration (minutes)", y_title="GPU memory (%)", y=lambda row: row["GPU memory %"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "Run ID": row["run_id"], "Project": row["project_name"], @@ -670,7 +671,7 @@ def observability( x_title="Run duration (minutes)", y_title="Memory usage (MB)", y=lambda row: row["Memory (MB)"], - tooltip=lambda row: weave.legacy.weave.ops.dict_( + tooltip=lambda row: weave_query.ops.dict_( **{ "Run ID": row["run_id"], "Project": row["project_name"], @@ -724,7 +725,7 @@ def observability( ) selected_jobs = panels.Table(latest_runs_plot_selector.selected_rows()) # type: ignore selected_jobs.add_column( - lambda row: weave.legacy.weave.ops.run_ops.str_run_link( + lambda row: weave_query.ops.run_ops.str_run_link( entity_name=row["c_4.Team"], project_name=row["c_4.Project"], name=row["c_4.Run ID"], diff --git a/weave/legacy/weave/panels_py/panel_seedboard.py b/weave_query/weave_query/panels_py/panel_seedboard.py similarity index 58% rename from weave/legacy/weave/panels_py/panel_seedboard.py rename to weave_query/weave_query/panels_py/panel_seedboard.py index c21cd0e66de..6aba210fff0 100644 --- a/weave/legacy/weave/panels_py/panel_seedboard.py +++ b/weave_query/weave_query/panels_py/panel_seedboard.py @@ -1,8 +1,9 @@ import typing -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave.panels_py.generator_templates import template_registry +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query.panels_py.generator_templates import template_registry @weave.type() @@ -17,22 +18,22 @@ class PyBoardSeedBoardConfig: def seed_board( input_node: weave.Node[typing.Any], config: typing.Optional[PyBoardSeedBoardConfig] = None, -) -> weave.legacy.weave.panels.Group: +) -> weave_query.panels.Group: control_items = [ - weave.legacy.weave.panels.GroupPanel( + weave_query.panels.GroupPanel( input_node, id="data", ), ] panels = [ - weave.legacy.weave.panels.BoardPanel( + weave_query.panels.BoardPanel( weave_internal.make_var_node(input_node.type, "data"), id="panel", - layout=weave.legacy.weave.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), + layout=weave_query.panels.BoardPanelLayout(x=0, y=0, w=24, h=6), ), ] - return weave.legacy.weave.panels.Board(vars=control_items, panels=panels) + return weave_query.panels.Board(vars=control_items, panels=panels) template_registry.register( diff --git a/weave/legacy/weave/panels_py/panel_trace_monitor.py b/weave_query/weave_query/panels_py/panel_trace_monitor.py similarity index 81% rename from weave/legacy/weave/panels_py/panel_trace_monitor.py rename to weave_query/weave_query/panels_py/panel_trace_monitor.py index e1cf168c432..6d3a4399c88 100644 --- a/weave/legacy/weave/panels_py/panel_trace_monitor.py +++ b/weave_query/weave_query/panels_py/panel_trace_monitor.py @@ -1,17 +1,18 @@ import os -import weave -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_internal as internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import util, dispatch, graph -from weave.legacy.weave.panels import panel_board, panel_group, panel_trace -from weave.legacy.weave.panels.panel_trace_span import TraceSpanModelPanel, TraceSpanPanel -from weave.legacy.weave.panels_py import panel_autoboard -from weave.legacy.weave.panels_py.generator_templates import template_registry +import weave_query as weave +import weave_query +from weave_query import weave_internal +from weave_query import weave_internal as internal +from weave_query import weave_types as types +from weave_query import util, dispatch, graph +from weave_query.panels import panel_board, panel_group, panel_trace +from weave_query.panels.panel_trace_span import TraceSpanModelPanel, TraceSpanPanel +from weave_query.panels_py import panel_autoboard +from weave_query.panels_py.generator_templates import template_registry -panels = weave.legacy.weave.panels -ops = weave.legacy.weave.ops +panels = weave_query.panels +ops = weave_query.ops # BOARD_ID must be unique across all ops. It must only contain letters and underscores. @@ -101,7 +102,7 @@ def board( ## 1. raw_data_range is derived from raw_data filtered_range = varbar.add( "filtered_range", - weave.legacy.weave.ops.make_list( + weave_query.ops.make_list( a=filtered_data[timestamp_col_name].min(), b=filtered_data[timestamp_col_name].max(), ), @@ -114,7 +115,7 @@ def board( ## 2.b: Setup a date picker to set the user_zoom_range varbar.add( "time_range", - weave.legacy.weave.panels.DateRange( + weave_query.panels.DateRange( user_zoom_range, domain=trace_roots[timestamp_col_name] ), ) @@ -129,7 +130,7 @@ def board( window_data = varbar.add( "window_data", trace_roots.filter( - lambda row: weave.legacy.weave.ops.Boolean.bool_and( + lambda row: weave_query.ops.Boolean.bool_and( row[timestamp_col_name] >= bin_range[0], row[timestamp_col_name] <= bin_range[1], ) @@ -139,7 +140,7 @@ def board( filters = varbar.add( "filters", - weave.legacy.weave.panels.FilterEditor(filter_fn, node=window_data), + weave_query.panels.FilterEditor(filter_fn, node=window_data), ) filtered_window_data = varbar.add( @@ -148,7 +149,7 @@ def board( ### Overview tab - overview_tab = weave.legacy.weave.panels.Group( + overview_tab = weave_query.panels.Group( layoutMode="grid", showExpressions=True, enableAddPanel=True, @@ -171,13 +172,13 @@ def board( x_domain=user_zoom_range, n_bins=50, ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=0, w=6, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=0, w=6, h=6), ) overview_tab.add( "latency_distribution", filtered_window_data.map(lambda row: row["end_time_s"] - row["start_time_s"]), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=6, y=0, w=6, h=6), + layout=weave_query.panels.GroupPanelLayout(x=6, y=0, w=6, h=6), ) overview_tab.add( @@ -198,12 +199,12 @@ def board( x_domain=user_zoom_range, n_bins=50, ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=12, y=0, w=6, h=6), + layout=weave_query.panels.GroupPanelLayout(x=12, y=0, w=6, h=6), ) overview_tab.add( "success_distribution", - weave.legacy.weave.ops.dict_( + weave_query.ops.dict_( **{ "success": filtered_window_data.filter( lambda row: row["status_code"] == "SUCCESS" @@ -213,13 +214,13 @@ def board( ).count(), } ), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=18, y=0, w=6, h=6), + layout=weave_query.panels.GroupPanelLayout(x=18, y=0, w=6, h=6), ) traces_table_var = overview_tab.add( "traces_table", make_span_table(filtered_window_data), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=6, w=24, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=6, w=24, h=6), ) trace_spans = all_spans.filter( @@ -231,13 +232,13 @@ def board( trace_viewer_var = overview_tab.add( "trace_viewer", trace_viewer, - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=12, w=16, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=12, w=16, h=6), ) selected_trace_model = overview_tab.add( "selected_trace_model", TraceSpanModelPanel(traces_table_var.active_data()), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=18, w=16, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=18, w=16, h=6), ) active_span = trace_viewer_var.active_span() @@ -245,7 +246,7 @@ def board( selected_span_details = overview_tab.add( "selected_span_details", TraceSpanPanel(active_span), - layout=weave.legacy.weave.panels.GroupPanelLayout(x=16, y=12, w=8, h=12), + layout=weave_query.panels.GroupPanelLayout(x=16, y=12, w=8, h=12), ) similar_spans = all_spans.filter(lambda row: row["name"] == active_span["name"]) @@ -254,7 +255,7 @@ def board( similar_spans_table_var = overview_tab.add( "similar_spans_table", similar_spans_table, - layout=weave.legacy.weave.panels.GroupPanelLayout(x=0, y=22, w=24, h=6), + layout=weave_query.panels.GroupPanelLayout(x=0, y=22, w=24, h=6), ) return panels.Board(vars=varbar, panels=overview_tab) diff --git a/weave/legacy/weave/parallelism.py b/weave_query/weave_query/parallelism.py similarity index 98% rename from weave/legacy/weave/parallelism.py rename to weave_query/weave_query/parallelism.py index 78d5fa7e3f3..c765701ab14 100644 --- a/weave/legacy/weave/parallelism.py +++ b/weave_query/weave_query/parallelism.py @@ -3,7 +3,7 @@ from concurrent.futures import ThreadPoolExecutor from typing import Callable, Generator, Iterator, Optional, TypeVar -from weave.legacy.weave import ( +from weave_query import ( cache, context, context_state, diff --git a/weave/legacy/weave/partial_object.py b/weave_query/weave_query/partial_object.py similarity index 96% rename from weave/legacy/weave/partial_object.py rename to weave_query/weave_query/partial_object.py index bec6862b70a..33935012622 100644 --- a/weave/legacy/weave/partial_object.py +++ b/weave_query/weave_query/partial_object.py @@ -2,8 +2,8 @@ import typing from dataclasses import dataclass, field -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import artifact_fs +from weave_query import weave_types as types +from weave_query import artifact_fs T = typing.TypeVar("T", bound="PartialObject") @@ -136,7 +136,7 @@ def from_dict(cls, d: dict) -> "PartialObjectType": def save_instance( self, obj: PartialObject, artifact: artifact_fs.FilesystemArtifact, name: str ) -> None: - from weave.legacy.weave import mappers_python + from weave_query import mappers_python serializer = mappers_python.map_to_python(self, artifact) result = serializer.apply(obj) @@ -151,7 +151,7 @@ def load_instance( name: str, extra: typing.Optional[list] = None, ) -> PartialObject: - from weave.legacy.weave import mappers_python + from weave_query import mappers_python with artifact.open( f"{name}.{self.keyless_weave_type_class.__name__}WithKeys.json" diff --git a/weave/legacy/weave/path_util.py b/weave_query/weave_query/path_util.py similarity index 90% rename from weave/legacy/weave/path_util.py rename to weave_query/weave_query/path_util.py index e52d5fa912d..d4f962d4c33 100644 --- a/weave/legacy/weave/path_util.py +++ b/weave_query/weave_query/path_util.py @@ -1,7 +1,7 @@ import pathlib import typing -from weave.legacy.weave import errors +from weave_query import errors def safe_join(*args: typing.Union[str, pathlib.Path]) -> str: diff --git a/weave/legacy/weave/propagate_gql_keys.py b/weave_query/weave_query/propagate_gql_keys.py similarity index 93% rename from weave/legacy/weave/propagate_gql_keys.py rename to weave_query/weave_query/propagate_gql_keys.py index a605b407cf3..641fd771fae 100644 --- a/weave/legacy/weave/propagate_gql_keys.py +++ b/weave_query/weave_query/propagate_gql_keys.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import gql_op_plugin, graph, input_provider, op_def, partial_object, registry_mem +from weave_query import weave_types as types +from weave_query import gql_op_plugin, graph, input_provider, op_def, partial_object, registry_mem def _propagate_gql_keys_for_node( @@ -13,7 +13,7 @@ def _propagate_gql_keys_for_node( ) -> types.Type: # Mutates node # TODO: see if this can be done without mutations - from weave.legacy.weave.language_features.tagging import ( + from weave_query.language_features.tagging import ( opdef_util, tagged_value_type, tagged_value_type_helpers, diff --git a/weave/legacy/weave/pyfunc_type_util.py b/weave_query/weave_query/pyfunc_type_util.py similarity index 98% rename from weave/legacy/weave/pyfunc_type_util.py rename to weave_query/weave_query/pyfunc_type_util.py index 2a12827822f..e72bbb41285 100644 --- a/weave/legacy/weave/pyfunc_type_util.py +++ b/weave_query/weave_query/pyfunc_type_util.py @@ -1,10 +1,10 @@ import inspect import typing -from weave.legacy.weave import infer_types, op_args +from weave_query import infer_types, op_args -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types +from weave_query import errors +from weave_query import weave_types as types InputTypeItemType = typing.Union[types.Type, typing.Callable[..., types.Type]] InputTypeType = typing.Union[op_args.OpArgs, typing.Mapping[str, InputTypeItemType]] diff --git a/weave/legacy/weave/ref_base.py b/weave_query/weave_query/ref_base.py similarity index 95% rename from weave/legacy/weave/ref_base.py rename to weave_query/weave_query/ref_base.py index c5cd519acd3..455f7fec7f1 100644 --- a/weave/legacy/weave/ref_base.py +++ b/weave_query/weave_query/ref_base.py @@ -4,17 +4,17 @@ import typing import weakref -from weave.legacy.weave import box, context_state, object_context, uris -from weave.legacy.weave.language_features.tagging import tag_store +from weave_query import box, context_state, object_context, uris +from weave_query.language_features.tagging import tag_store -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types +from weave_query import errors +from weave_query import weave_types as types # We store Refs here if we can't attach them directly to the object REFS: weakref.WeakValueDictionary[int, "Ref"] = weakref.WeakValueDictionary() if typing.TYPE_CHECKING: - from weave.legacy.weave import weave_types as types + from weave_query import weave_types as types def _map_to_ref_strs(obj: typing.Any) -> typing.Any: diff --git a/weave/legacy/weave/ref_util.py b/weave_query/weave_query/ref_util.py similarity index 94% rename from weave/legacy/weave/ref_util.py rename to weave_query/weave_query/ref_util.py index 97da18ffc15..6be21524f5a 100644 --- a/weave/legacy/weave/ref_util.py +++ b/weave_query/weave_query/ref_util.py @@ -2,7 +2,7 @@ import typing from urllib import parse -from weave.legacy.weave import box +from weave_query import box DICT_KEY_EDGE_NAME = "key" LIST_INDEX_EDGE_NAME = "index" @@ -21,8 +21,8 @@ def parse_local_ref_str(s: str) -> typing.Tuple[str, typing.Optional[list[str]]] def val_with_relative_ref( parent_object: typing.Any, child_object: typing.Any, ref_extra_parts: list[str] ) -> typing.Any: - from weave.legacy.weave import context_state - from weave.legacy.weave import ref_base + from weave_query import context_state + from weave_query import ref_base # If we already have a ref, resolve it if isinstance(child_object, ref_base.Ref): @@ -31,7 +31,7 @@ def val_with_relative_ref( # Only do this if ref_tracking_enabled right now. I just want to # avoid introducing new behavior into W&B prod for the moment. if context_state.ref_tracking_enabled(): - from weave.legacy.weave import storage + from weave_query import storage child_ref = storage.get_ref(child_object) parent_ref = ref_base.get_ref(parent_object) diff --git a/weave/legacy/weave/registry_mem.py b/weave_query/weave_query/registry_mem.py similarity index 95% rename from weave/legacy/weave/registry_mem.py rename to weave_query/weave_query/registry_mem.py index 7e0f0905b17..14fd37df18c 100644 --- a/weave/legacy/weave/registry_mem.py +++ b/weave_query/weave_query/registry_mem.py @@ -1,12 +1,12 @@ import datetime import typing -from weave.legacy.weave import weave_types -from weave.legacy.weave import storage, errors, context_state, op_aliases, op_args, uris -from weave.legacy.weave.op_args import OpNamedArgs +from weave_query import weave_types +from weave_query import storage, errors, context_state, op_aliases, op_args, uris +from weave_query.op_args import OpNamedArgs if typing.TYPE_CHECKING: - from weave.legacy.weave.op_def import OpDef + from weave_query.op_def import OpDef class Registry: @@ -122,7 +122,7 @@ def is_chainable(op): # type: ignore return [op for op in self._ops.values() if is_chainable(op)] # type: ignore[no-untyped-call] def load_saved_ops(self): # type: ignore - from weave.legacy.weave import op_def_type + from weave_query import op_def_type for op_ref in storage.objects(op_def_type.OpDefType()): try: diff --git a/weave/legacy/weave/run.py b/weave_query/weave_query/run.py similarity index 100% rename from weave/legacy/weave/run.py rename to weave_query/weave_query/run.py diff --git a/weave/legacy/weave/run_streamtable_span.py b/weave_query/weave_query/run_streamtable_span.py similarity index 93% rename from weave/legacy/weave/run_streamtable_span.py rename to weave_query/weave_query/run_streamtable_span.py index 1583f6e2af4..9b94477ed57 100644 --- a/weave/legacy/weave/run_streamtable_span.py +++ b/weave_query/weave_query/run_streamtable_span.py @@ -1,10 +1,10 @@ import typing from typing import Iterable -from weave.legacy.weave import stream_data_interfaces -from weave.legacy.weave.eager import WeaveIter -from weave.legacy.weave import artifact_wandb, uris -from weave.legacy.weave.run import Run +from weave_query import stream_data_interfaces +from weave_query.eager import WeaveIter +from weave_query import artifact_wandb, uris +from weave_query.run import Run class RunStreamTableSpan: diff --git a/weave/legacy/weave/runfiles_wandb.py b/weave_query/weave_query/runfiles_wandb.py similarity index 97% rename from weave/legacy/weave/runfiles_wandb.py rename to weave_query/weave_query/runfiles_wandb.py index 201baaed024..d9ae4e2068e 100644 --- a/weave/legacy/weave/runfiles_wandb.py +++ b/weave_query/weave_query/runfiles_wandb.py @@ -6,10 +6,10 @@ import shutil import typing -from weave.legacy.weave import environment as weave_env -from weave.legacy.weave import filesystem -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ( +from weave_query import environment as weave_env +from weave_query import filesystem +from weave_query import weave_types as types +from weave_query import ( artifact_fs, errors, file_util, diff --git a/weave/legacy/weave/runs.py b/weave_query/weave_query/runs.py similarity index 92% rename from weave/legacy/weave/runs.py rename to weave_query/weave_query/runs.py index f20967a4d8e..ca0c243bd1c 100644 --- a/weave/legacy/weave/runs.py +++ b/weave_query/weave_query/runs.py @@ -1,7 +1,7 @@ import dataclasses import typing -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types @dataclasses.dataclass diff --git a/weave/legacy/weave/serialize.py b/weave_query/weave_query/serialize.py similarity index 97% rename from weave/legacy/weave/serialize.py rename to weave_query/weave_query/serialize.py index f39954a1375..0775ee7865f 100644 --- a/weave/legacy/weave/serialize.py +++ b/weave_query/weave_query/serialize.py @@ -7,9 +7,9 @@ import random import typing -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import storage, errors, graph, memo, value_or_error +from weave_query import weave_internal +from weave_query import weave_types as types +from weave_query import storage, errors, graph, memo, value_or_error NodeOrOp = typing.Union[graph.Node, graph.Op] diff --git a/weave/legacy/weave/server.py b/weave_query/weave_query/server.py similarity index 97% rename from weave/legacy/weave/server.py rename to weave_query/weave_query/server.py index 90c2092b1ae..4695f649375 100644 --- a/weave/legacy/weave/server.py +++ b/weave_query/weave_query/server.py @@ -12,7 +12,7 @@ import requests from werkzeug.serving import make_server -from weave.legacy.weave import ( +from weave_query import ( cache, context, engine_trace, @@ -27,8 +27,8 @@ storage, weave_types, ) -from weave.legacy.weave.language_features.tagging import tag_store -from weave.legacy.weave.language_features.tagging.tag_store import isolated_tagging_context +from weave_query.language_features.tagging import tag_store +from weave_query.language_features.tagging.tag_store import isolated_tagging_context # A function to monkeypatch the request post method # def patch_request_post(): @@ -198,7 +198,7 @@ def execute(self, nodes, no_cache=False): # type: ignore class HttpServer(threading.Thread): def __init__(self, port=0, host="localhost"): # type: ignore - from weave import weave_server + from weave_query import weave_server self.host = host diff --git a/weave/legacy/weave/server_error_handling.py b/weave_query/weave_query/server_error_handling.py similarity index 98% rename from weave/legacy/weave/server_error_handling.py rename to weave_query/weave_query/server_error_handling.py index 1e3b10ba96f..6fcc5e4a575 100644 --- a/weave/legacy/weave/server_error_handling.py +++ b/weave_query/weave_query/server_error_handling.py @@ -26,9 +26,9 @@ from werkzeug import Response from werkzeug import exceptions as werkzeug_exceptions from werkzeug import http as werkzeug_http -from weave.legacy.weave import errors +from weave_query import errors -from weave.legacy.weave import util +from weave_query import util class WeaveInternalHttpException(werkzeug_exceptions.HTTPException): diff --git a/weave/legacy/weave/server_interface.py b/weave_query/weave_query/server_interface.py similarity index 100% rename from weave/legacy/weave/server_interface.py rename to weave_query/weave_query/server_interface.py diff --git a/weave/legacy/weave/show.py b/weave_query/weave_query/show.py similarity index 95% rename from weave/legacy/weave/show.py rename to weave_query/weave_query/show.py index 5e59d05272e..b90c7de74d5 100644 --- a/weave/legacy/weave/show.py +++ b/weave_query/weave_query/show.py @@ -5,10 +5,10 @@ from IPython.display import IFrame, display -from weave.legacy.weave import storage, artifact_fs, context, errors, graph, ops, node_ref, panel, ref_base -from weave.legacy.weave import util +from weave_query import storage, artifact_fs, context, errors, graph, ops, node_ref, panel, ref_base +from weave_query import util from . import usage_analytics -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types from . import weavejs_fixes @@ -21,7 +21,7 @@ def make_varname_for_type(t: types.Type): # type: ignore def make_container( obj: typing.Union[panel.Panel, graph.Node], name: str ) -> panel.Panel: - from weave.legacy.weave.panels import Group + from weave_query.panels import Group if isinstance(obj, graph.Node): return Group( diff --git a/weave/legacy/weave/signal_handlers.py b/weave_query/weave_query/signal_handlers.py similarity index 99% rename from weave/legacy/weave/signal_handlers.py rename to weave_query/weave_query/signal_handlers.py index be47f10103a..c2824747cf9 100644 --- a/weave/legacy/weave/signal_handlers.py +++ b/weave_query/weave_query/signal_handlers.py @@ -10,7 +10,7 @@ import typing from types import FrameType -from weave.legacy.weave import environment +from weave_query import environment def dump_folder() -> pathlib.Path: diff --git a/weave/legacy/weave/stitch.py b/weave_query/weave_query/stitch.py similarity index 98% rename from weave/legacy/weave/stitch.py rename to weave_query/weave_query/stitch.py index 69aba75e31f..e9d39008092 100644 --- a/weave/legacy/weave/stitch.py +++ b/weave_query/weave_query/stitch.py @@ -22,11 +22,11 @@ import dataclasses import typing -from weave.legacy.weave import graph, op_def, registry_mem -from weave.legacy.weave.language_features.tagging import opdef_util +from weave_query import graph, op_def, registry_mem +from weave_query.language_features.tagging import opdef_util -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types +from weave_query import errors +from weave_query import weave_types as types from . import _dict_utils diff --git a/weave/legacy/weave/storage.py b/weave_query/weave_query/storage.py similarity index 98% rename from weave/legacy/weave/storage.py rename to weave_query/weave_query/storage.py index a99dba4a90f..efe8edb95c4 100644 --- a/weave/legacy/weave/storage.py +++ b/weave_query/weave_query/storage.py @@ -7,7 +7,7 @@ import re import typing -from weave.legacy.weave import ( +from weave_query import ( artifact_base, artifact_fs, artifact_local, @@ -21,12 +21,12 @@ timestamp, ) -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types Ref = ref_base.Ref if typing.TYPE_CHECKING: - from weave.legacy.weave.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun + from weave_query.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun def split_path_dotfile(path, dotfile_name): # type: ignore @@ -62,7 +62,7 @@ def _get_weave_type_with_refs(obj: typing.Any): # type: ignore def _ensure_object_components_are_published( # type: ignore obj: typing.Any, wb_type: types.Type, artifact: artifact_wandb.WandbArtifact ): - from weave.legacy.weave.mappers_publisher import map_to_python_remote + from weave_query.mappers_publisher import map_to_python_remote mapper = map_to_python_remote(wb_type, artifact) return mapper.apply(obj) @@ -450,7 +450,7 @@ def to_json_with_refs( # type: ignore """ # This is newer than to_python, save and publish above, and doesn't use the "mapper" # pattern, which is overkill. Much better to just write a simple function like this. - from weave.legacy.weave import op_def + from weave_query import op_def if wb_type is None: wb_type = types.TypeRegistry.type_of(obj) @@ -498,7 +498,7 @@ def convert_timestamps_to_epoch_ms(obj: typing.Any) -> typing.Any: def to_weavejs(obj, artifact: typing.Optional[artifact_base.Artifact] = None): # type: ignore - from weave.legacy.weave.arrow import list_ as arrow_list + from weave_query.arrow import list_ as arrow_list obj = box.unbox(obj) if isinstance(obj, (str, int, float, bool, type(None))): diff --git a/weave/legacy/weave/stream_data_interfaces.py b/weave_query/weave_query/stream_data_interfaces.py similarity index 100% rename from weave/legacy/weave/stream_data_interfaces.py rename to weave_query/weave_query/stream_data_interfaces.py diff --git a/weave/legacy/weave/timestamp.py b/weave_query/weave_query/timestamp.py similarity index 100% rename from weave/legacy/weave/timestamp.py rename to weave_query/weave_query/timestamp.py diff --git a/weave/legacy/weave/trace_legacy.py b/weave_query/weave_query/trace_legacy.py similarity index 96% rename from weave/legacy/weave/trace_legacy.py rename to weave_query/weave_query/trace_legacy.py index e4f0a008198..f69c1ba0dca 100644 --- a/weave/legacy/weave/trace_legacy.py +++ b/weave_query/weave_query/trace_legacy.py @@ -1,11 +1,11 @@ import os import typing -from weave.legacy.weave import artifact_local, graph, runs +from weave_query import artifact_local, graph, runs from . import ref_base from . import errors -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types def get_obj_creator(ref: ref_base.Ref) -> typing.Optional[runs.Run]: diff --git a/weave/legacy/weave/trace_local.py b/weave_query/weave_query/trace_local.py similarity index 95% rename from weave/legacy/weave/trace_local.py rename to weave_query/weave_query/trace_local.py index 3b969dc5d89..29e61c6543d 100644 --- a/weave/legacy/weave/trace_local.py +++ b/weave_query/weave_query/trace_local.py @@ -5,14 +5,14 @@ import typing from typing import Mapping -from weave.legacy.weave import artifact_local, graph, op_def, op_policy, runs +from weave_query import artifact_local, graph, op_def, op_policy, runs from . import ref_base -from weave.legacy.weave import ( +from weave_query import ( storage, weave_internal, ) -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types @dataclasses.dataclass @@ -118,13 +118,13 @@ def get_run(self, run_key: RunKey) -> graph.Node[runs.Run]: return self._single_run(run_key) def get_run_val(self, run_key: RunKey) -> typing.Optional[runs.Run]: - from weave.legacy.weave import execute_fast + from weave_query import execute_fast res = execute_fast._execute_fn_no_engine(None, None, self.get_run(run_key)) # type: ignore[no-untyped-call] return res def save_run(self, run: runs.Run): # type: ignore - from weave.legacy.weave.ops_primitives import weave_api + from weave_query.ops_primitives import weave_api run_key = RunKey(run.op_name, run.id) if self._should_save_to_table(run_key): diff --git a/weave/legacy/weave/types_numpy.py b/weave_query/weave_query/types_numpy.py similarity index 96% rename from weave/legacy/weave/types_numpy.py rename to weave_query/weave_query/types_numpy.py index 8d72409f7a3..bf4ea584fc3 100644 --- a/weave/legacy/weave/types_numpy.py +++ b/weave_query/weave_query/types_numpy.py @@ -1,6 +1,6 @@ import numpy as np -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types # TODO: this doesn't match how extra works for list types... diff --git a/weave/legacy/weave/uris.py b/weave_query/weave_query/uris.py similarity index 98% rename from weave/legacy/weave/uris.py rename to weave_query/weave_query/uris.py index f207ff32cb7..4cc2161d0ef 100644 --- a/weave/legacy/weave/uris.py +++ b/weave_query/weave_query/uris.py @@ -2,7 +2,7 @@ import typing from urllib import parse -from weave.legacy.weave import errors +from weave_query import errors if typing.TYPE_CHECKING: from . import ref_base diff --git a/weave/legacy/weave/urls.py b/weave_query/weave_query/urls.py similarity index 97% rename from weave/legacy/weave/urls.py rename to weave_query/weave_query/urls.py index bb021607a58..2fcdf4ee9c2 100644 --- a/weave/legacy/weave/urls.py +++ b/weave_query/weave_query/urls.py @@ -4,7 +4,7 @@ from wandb import util as wb_util -from weave.legacy.weave import context_state, environment +from weave_query import context_state, environment BROWSE3_PATH = "browse3" WEAVE_SLUG = "weave" diff --git a/weave/legacy/weave/usage_analytics.py b/weave_query/weave_query/usage_analytics.py similarity index 95% rename from weave/legacy/weave/usage_analytics.py rename to weave_query/weave_query/usage_analytics.py index f2acef97b0f..ba5d2ef2a68 100644 --- a/weave/legacy/weave/usage_analytics.py +++ b/weave_query/weave_query/usage_analytics.py @@ -3,7 +3,7 @@ import analytics -from weave.legacy.weave import context_state +from weave_query import context_state from . import environment diff --git a/weave/legacy/weave/util.py b/weave_query/weave_query/util.py similarity index 98% rename from weave/legacy/weave/util.py rename to weave_query/weave_query/util.py index f057ac40073..f72cc0f8d2e 100644 --- a/weave/legacy/weave/util.py +++ b/weave_query/weave_query/util.py @@ -8,7 +8,7 @@ # import ipynbname import typing -from weave.legacy.weave.errors import WeaveFingerprintErrorMixin +from weave_query.errors import WeaveFingerprintErrorMixin sentry_inited = False diff --git a/weave/legacy/weave/val_const.py b/weave_query/weave_query/val_const.py similarity index 90% rename from weave/legacy/weave/val_const.py rename to weave_query/weave_query/val_const.py index 458034826e9..c3e46d72675 100644 --- a/weave/legacy/weave/val_const.py +++ b/weave_query/weave_query/val_const.py @@ -7,7 +7,7 @@ import typing -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types class Const: diff --git a/weave/legacy/weave/value_or_error.py b/weave_query/weave_query/value_or_error.py similarity index 100% rename from weave/legacy/weave/value_or_error.py rename to weave_query/weave_query/value_or_error.py diff --git a/weave_query/weave_query/version.py b/weave_query/weave_query/version.py new file mode 100644 index 00000000000..1cf6267ae58 --- /dev/null +++ b/weave_query/weave_query/version.py @@ -0,0 +1 @@ +VERSION = "0.1.0" diff --git a/weave/legacy/weave/wandb_api.py b/weave_query/weave_query/wandb_api.py similarity index 98% rename from weave/legacy/weave/wandb_api.py rename to weave_query/weave_query/wandb_api.py index d0edbeaa8be..89fc4e8f863 100644 --- a/weave/legacy/weave/wandb_api.py +++ b/weave_query/weave_query/wandb_api.py @@ -14,12 +14,12 @@ from gql.transport.requests import RequestsHTTPTransport from requests.auth import HTTPBasicAuth -from weave.legacy.weave import errors -from weave.legacy.weave import environment as weave_env -from weave.legacy.weave import wandb_client_api, engine_trace +from weave_query import errors +from weave_query import environment as weave_env +from weave_query import wandb_client_api, engine_trace # Importing at the top-level namespace so other files can import from here. -from weave.legacy.weave.context_state import WandbApiContext, _wandb_api_context +from weave_query.context_state import WandbApiContext, _wandb_api_context tracer = engine_trace.tracer() # type: ignore diff --git a/weave/legacy/weave/wandb_client_api.py b/weave_query/weave_query/wandb_client_api.py similarity index 98% rename from weave/legacy/weave/wandb_client_api.py rename to weave_query/weave_query/wandb_client_api.py index 350dd9b8eba..3bfb93ff63c 100644 --- a/weave/legacy/weave/wandb_client_api.py +++ b/weave_query/weave_query/wandb_client_api.py @@ -12,7 +12,7 @@ from wandb.errors import CommError as WandbCommError from wandb.sdk.internal.internal_api import _thread_local_api_settings -from weave.legacy.weave import errors +from weave_query import errors def wandb_public_api() -> public.Api: diff --git a/weave/legacy/weave/wandb_file_manager.py b/weave_query/weave_query/wandb_file_manager.py similarity index 99% rename from weave/legacy/weave/wandb_file_manager.py rename to weave_query/weave_query/wandb_file_manager.py index af631151048..6c5949de4c3 100644 --- a/weave/legacy/weave/wandb_file_manager.py +++ b/weave_query/weave_query/wandb_file_manager.py @@ -12,8 +12,8 @@ from requests.auth import HTTPBasicAuth from wandb.sdk.lib import hashutil -from weave.legacy.weave import environment as weave_env -from weave.legacy.weave import filesystem, artifact_wandb, cache, errors, wandb_api, engine_trace, weave_http +from weave_query import environment as weave_env +from weave_query import filesystem, artifact_wandb, cache, errors, wandb_api, engine_trace, weave_http tracer = engine_trace.tracer() # type: ignore diff --git a/weave/legacy/weave/wandb_interface/wandb_artifact_pusher.py b/weave_query/weave_query/wandb_interface/wandb_artifact_pusher.py similarity index 95% rename from weave/legacy/weave/wandb_interface/wandb_artifact_pusher.py rename to weave_query/weave_query/wandb_interface/wandb_artifact_pusher.py index 0bbda99b705..086c184b9f0 100644 --- a/weave/legacy/weave/wandb_interface/wandb_artifact_pusher.py +++ b/weave_query/weave_query/wandb_interface/wandb_artifact_pusher.py @@ -5,9 +5,9 @@ from wandb import Artifact from wandb.apis.public import api as wb_public -from weave.legacy.weave import engine_trace -from weave.legacy.weave import wandb_client_api -from weave.legacy.weave.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun +from weave_query import engine_trace +from weave_query import wandb_client_api +from weave_query.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun def artifact_commithash_by_digest( diff --git a/weave/legacy/weave/wandb_interface/wandb_lite_run.py b/weave_query/weave_query/wandb_interface/wandb_lite_run.py similarity index 98% rename from weave/legacy/weave/wandb_interface/wandb_lite_run.py rename to weave_query/weave_query/wandb_interface/wandb_lite_run.py index 9703a9d88e4..11e000ce221 100644 --- a/weave/legacy/weave/wandb_interface/wandb_lite_run.py +++ b/weave_query/weave_query/wandb_interface/wandb_lite_run.py @@ -15,8 +15,8 @@ from wandb.sdk.internal.sender import _manifest_json_from_proto from wandb.sdk.lib import runid -from weave.legacy.weave import errors -from weave.legacy.weave import engine_trace, wandb_client_api +from weave_query import errors +from weave_query import engine_trace, wandb_client_api logger = logging.getLogger(__name__) diff --git a/weave/legacy/weave/wandb_interface/wandb_stream_table.py b/weave_query/weave_query/wandb_interface/wandb_stream_table.py similarity index 97% rename from weave/legacy/weave/wandb_interface/wandb_stream_table.py rename to weave_query/weave_query/wandb_interface/wandb_stream_table.py index 2669282ee2d..eda69512f2b 100644 --- a/weave/legacy/weave/wandb_interface/wandb_stream_table.py +++ b/weave_query/weave_query/wandb_interface/wandb_stream_table.py @@ -15,8 +15,8 @@ from wandb.sdk.lib.paths import LogicalPath from wandb.sdk.lib.printer import get_printer -from weave.legacy.weave import weave_types -from weave.legacy.weave import ( +from weave_query import weave_types +from weave_query import ( storage, errors, artifact_base, @@ -27,8 +27,8 @@ runfiles_wandb, wandb_api, ) -from weave.legacy.weave.core_types.stream_table_type import StreamTableType -from weave.legacy.weave.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun +from weave_query.core_types.stream_table_type import StreamTableType +from weave_query.wandb_interface.wandb_lite_run import InMemoryLazyLiteRun if typing.TYPE_CHECKING: from wandb.sdk.internal.file_pusher import FilePusher @@ -201,8 +201,8 @@ def log(self, row_or_rows: ROW_TYPE) -> None: self._log_row(row) def rows(self) -> graph.Node: - from weave.legacy.weave.ops_domain import stream_table_ops - from weave.legacy.weave.ops_primitives import weave_api + from weave_query.ops_domain import stream_table_ops + from weave_query.ops_primitives import weave_api if self._weave_stream_table_ref is None: raise errors.WeaveInternalError("ref is None after ensure") @@ -211,7 +211,7 @@ def rows(self) -> graph.Node: ) def _ipython_display_(self) -> graph.Node: - from weave.legacy.weave import show + from weave_query import show return show.show(self.rows()) diff --git a/weave/legacy/weave/wandb_util.py b/weave_query/weave_query/wandb_util.py similarity index 98% rename from weave/legacy/weave/wandb_util.py rename to weave_query/weave_query/wandb_util.py index 11c6c717eb9..30f3e2331e2 100644 --- a/weave/legacy/weave/wandb_util.py +++ b/weave_query/weave_query/wandb_util.py @@ -1,8 +1,8 @@ import typing -from weave.legacy.weave import errors -from weave.legacy.weave import weave_types as types -from weave.legacy.weave import ops, ops_domain +from weave_query import errors +from weave_query import weave_types as types +from weave_query import ops, ops_domain class Weave0TypeJson(typing.TypedDict): diff --git a/weave/legacy/weave/weave_http.py b/weave_query/weave_query/weave_http.py similarity index 98% rename from weave/legacy/weave/weave_http.py rename to weave_query/weave_query/weave_http.py index f425dd2567b..39bd91fbb9c 100644 --- a/weave/legacy/weave/weave_http.py +++ b/weave_query/weave_query/weave_http.py @@ -13,7 +13,7 @@ import requests.auth import yarl -from weave.legacy.weave import engine_trace, filesystem, server_error_handling +from weave_query import engine_trace, filesystem, server_error_handling logging.getLogger("aiohttp.access").setLevel(logging.WARNING) logging.getLogger("aiohttp.client").setLevel(logging.WARNING) diff --git a/weave/legacy/weave/weave_inspector.py b/weave_query/weave_query/weave_inspector.py similarity index 99% rename from weave/legacy/weave/weave_inspector.py rename to weave_query/weave_query/weave_inspector.py index fdcde5393c6..7cc69485ed5 100644 --- a/weave/legacy/weave/weave_inspector.py +++ b/weave_query/weave_query/weave_inspector.py @@ -105,9 +105,9 @@ import tabulate -from weave.legacy.weave import graph +from weave_query import graph -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types from .partial_object import PartialObjectType @@ -137,7 +137,7 @@ def _node_type_name(node: graph.Node) -> str: def _type_name(node_type: types.Type) -> str: - from weave.legacy.weave.language_features.tagging import tagged_value_type + from weave_query.language_features.tagging import tagged_value_type if isinstance(node_type, tagged_value_type.TaggedValueType): return f"TV({_type_name(node_type.value)})" diff --git a/weave/legacy/weave/weave_internal.py b/weave_query/weave_query/weave_internal.py similarity index 93% rename from weave/legacy/weave/weave_internal.py rename to weave_query/weave_query/weave_internal.py index 4d485658814..3278d1430f8 100644 --- a/weave/legacy/weave/weave_internal.py +++ b/weave_query/weave_query/weave_internal.py @@ -1,7 +1,7 @@ import typing -from weave.legacy.weave import client_interface, context_state, errors, graph -from weave.legacy.weave import weave_types as types +from weave_query import client_interface, context_state, errors, graph +from weave_query import weave_types as types def dereference_variables( @@ -83,14 +83,14 @@ def use( def make_var_node(type_: types.Type, name: str) -> graph.VarNode: # Circular import. TODO: fix - from weave.legacy.weave import dispatch + from weave_query import dispatch return dispatch.RuntimeVarNode(type_, name) def make_const_node(type_: types.Type, val: typing.Any) -> graph.ConstNode: # Circular import. TODO: fix - from weave.legacy.weave import dispatch + from weave_query import dispatch return dispatch.RuntimeConstNode(type_, val) @@ -114,7 +114,7 @@ def make_output_node( type_: types.Type, op_name: str, op_params: dict[str, graph.Node] ) -> graph.OutputNode: # Circular import. TODO: fix - from weave.legacy.weave import dispatch + from weave_query import dispatch return dispatch.RuntimeOutputNode(type_, op_name, op_params) @@ -125,7 +125,7 @@ def define_fn( ) -> graph.ConstNode: var_nodes = [make_var_node(t, k) for k, t in parameters.items()] try: - from weave.legacy.weave import op_def + from weave_query import op_def with op_def.no_refine(): fnNode = body(*var_nodes) @@ -148,7 +148,7 @@ def define_fn( # and the function doesn't explicitly operate on tagged values. this ensures that the input tags # are propagated appropriately to the output type of the function. def refine_graph(node: graph.Node) -> graph.Node: - from weave.legacy.weave.registry_mem import memory_registry + from weave_query.registry_mem import memory_registry if isinstance(node, (graph.ConstNode, graph.VoidNode, graph.VarNode)): return node @@ -176,6 +176,6 @@ def manual_call( You can produce incorrect nodes this way. Use with caution. """ - from weave.legacy.weave import dispatch + from weave_query import dispatch return dispatch.RuntimeOutputNode(output_type, op_name, inputs) diff --git a/weave/legacy/weave/weave_pydantic.py b/weave_query/weave_query/weave_pydantic.py similarity index 95% rename from weave/legacy/weave/weave_pydantic.py rename to weave_query/weave_query/weave_pydantic.py index 0c9b0f7c7ad..eac49d694b2 100644 --- a/weave/legacy/weave/weave_pydantic.py +++ b/weave_query/weave_query/weave_pydantic.py @@ -1,6 +1,6 @@ from pydantic import BaseModel, create_model -from weave.legacy.weave import weave_types as types +from weave_query import weave_types as types from . import infer_types diff --git a/weave/weave_server.py b/weave_query/weave_query/weave_server.py similarity index 97% rename from weave/weave_server.py rename to weave_query/weave_query/weave_server.py index 2da3e6cd542..50a55058af1 100644 --- a/weave/weave_server.py +++ b/weave_query/weave_query/weave_server.py @@ -25,7 +25,7 @@ from flask_cors import CORS from werkzeug.exceptions import HTTPException -from weave.legacy.weave import ( +from weave_query import ( context_state, engine_trace, environment, @@ -41,8 +41,8 @@ wandb_api, weavejs_fixes, ) -from weave.legacy.weave.language_features.tagging import tag_store -from weave.legacy.weave.server_error_handling import ( +from weave_query.language_features.tagging import tag_store +from weave_query.server_error_handling import ( client_safe_http_exceptions_as_werkzeug, ) @@ -93,7 +93,7 @@ def execute(self, document, *args, **kwargs): # Ensure these are imported and registered -from weave.legacy.weave import ops +from weave_query import ops # NOTE: Fixes flask dev server's auto-reload capability, by forcing it to use # stat mode instead of watchdog mode. It turns out that "import wandb" breaks @@ -112,11 +112,11 @@ def execute(self, document, *args, **kwargs): def import_ecosystem(): - from weave.legacy.weave import ops, panels, panels_py + from weave_query import ops, panels, panels_py # Attempt to import MVP ecosystem modules try: - from weave.legacy.weave.ecosystem import langchain, replicate + from weave_query.ecosystem import langchain, replicate except ImportError: pass @@ -129,7 +129,7 @@ def import_ecosystem(): # except (ImportError, OSError, wandb.Error): # print("Error: Couldn't import faiss module for Weaveflow.") try: - from weave.legacy.weave.ecosystem import all + from weave_query.ecosystem import all except (ImportError, OSError, wandb.Error): pass diff --git a/weave/legacy/weave/weave_types.py b/weave_query/weave_query/weave_types.py similarity index 99% rename from weave/legacy/weave/weave_types.py rename to weave_query/weave_query/weave_types.py index 92c09f0cbb3..fdeb4a7d2b3 100644 --- a/weave/legacy/weave/weave_types.py +++ b/weave_query/weave_query/weave_types.py @@ -11,20 +11,20 @@ import pydantic from dateutil.parser import isoparse -from weave.legacy.weave import ( +from weave_query import ( box, context_state, errors, mappers_python, object_type_ref_util, ) -from weave.legacy.weave import timestamp as weave_timestamp +from weave_query import timestamp as weave_timestamp if typing.TYPE_CHECKING: - from weave.legacy.weave import artifact_base - from weave.legacy.weave.artifact_fs import FilesystemArtifact + from weave_query import artifact_base + from weave_query.artifact_fs import FilesystemArtifact - from weave.legacy.weave import weave_inspector + from weave_query import weave_inspector def to_weavejs_typekey(k: str) -> str: @@ -126,7 +126,7 @@ def type_class_of(obj): # type: ignore @staticmethod def type_of(obj: typing.Any) -> "Type": # type: ignore - from weave.legacy.weave import ref_base + from weave_query import ref_base if ( context_state.ref_tracking_enabled() @@ -460,7 +460,7 @@ def _make(cls, kwargs={}): # type: ignore def _inspect(self) -> "weave_inspector.TypeInspector": # type: ignore """Only intended to be used by developers to help debug the graph.""" # Circular import, so we do it here. - from weave.legacy.weave import weave_inspector + from weave_query import weave_inspector return weave_inspector.TypeInspector(self) @@ -1061,7 +1061,7 @@ def property_types(self) -> dict[str, Type]: # type: ignore @classmethod def typeclass_of_class(cls, check_class): # type: ignore - from weave.legacy.weave import weave_pydantic + from weave_query import weave_pydantic if not issubclass(check_class, pydantic.BaseModel): return cls @@ -1278,7 +1278,7 @@ def _hashable(self): # type: ignore @classmethod def type_of_instance(cls, obj): # type: ignore - from weave.legacy.weave import infer_types + from weave_query import infer_types attr_types = {} for field in dataclasses.fields(obj): @@ -1361,7 +1361,7 @@ def save_instance(self, obj, artifact, name): # type: ignore def load_instance(self, artifact, name, extra=None): # type: ignore with artifact.open(f"{name}.object.json") as f: # TODO: no circular imports! - from weave.legacy.weave import graph + from weave_query import graph return graph.Node.node_from_json(json.load(f)) @@ -1385,7 +1385,7 @@ def _is_assignable_to(self, other_type) -> typing.Optional[bool]: # type: ignor return None def save_instance(self, obj, artifact, name): # type: ignore - from weave.legacy.weave import ref_base + from weave_query import ref_base obj_ref = ref_base.get_ref(obj) if obj_ref is None: @@ -1419,7 +1419,7 @@ class LocalArtifactRefType(FilesystemArtifactRefType): @dataclasses.dataclass(frozen=True) class WandbArtifactRefType(FilesystemArtifactRefType): def load_instance(self, artifact, name, extra=None): # type: ignore - from weave.legacy.weave import artifact_wandb + from weave_query import artifact_wandb return artifact_wandb.WandbArtifactRef(artifact, name) @@ -1571,7 +1571,7 @@ def merge_types(a: Type, b: Type) -> Type: This implementation must match list.concat implementations (which is the only way to extend a list in Weave). Ie list.concat(list[a], [b]) -> list[merge_types(a, b)] """ - from weave.legacy.weave.language_features.tagging import tagged_value_type + from weave_query.language_features.tagging import tagged_value_type if a == b: return a diff --git a/weave/legacy/weave/weavejs_fixes.py b/weave_query/weave_query/weavejs_fixes.py similarity index 99% rename from weave/legacy/weave/weavejs_fixes.py rename to weave_query/weave_query/weavejs_fixes.py index 6957e839a8d..7ee02c7beb0 100644 --- a/weave/legacy/weave/weavejs_fixes.py +++ b/weave_query/weave_query/weavejs_fixes.py @@ -8,9 +8,9 @@ import math import typing -from weave.legacy.weave import graph +from weave_query import graph -from weave.legacy.weave import weave_types +from weave_query import weave_types def _convert_specific_opname_to_generic_opname( diff --git a/weave/legacy/weave/weavify.py b/weave_query/weave_query/weavify.py similarity index 93% rename from weave/legacy/weave/weavify.py rename to weave_query/weave_query/weavify.py index af81e62d492..21f7e33adb8 100644 --- a/weave/legacy/weave/weavify.py +++ b/weave_query/weave_query/weavify.py @@ -1,12 +1,12 @@ import typing -from weave.legacy.weave import errors, graph, op_args, val_const +from weave_query import errors, graph, op_args, val_const -from weave.legacy.weave import weave_internal -from weave.legacy.weave import weave_types as types +from weave_query import weave_internal +from weave_query import weave_types as types if typing.TYPE_CHECKING: - from weave.legacy.weave import op_def + from weave_query import op_def def verify_weave_fn_is_valid(op: "op_def.OpDef", weavified: graph.Node) -> None: @@ -79,7 +79,7 @@ def weave_fn_body(*args: graph.VarNode) -> graph.Node: def weavify_object(obj: typing.Any) -> graph.Node: - from weave.legacy.weave.ops_primitives import dict_, make_list + from weave_query.ops_primitives import dict_, make_list if isinstance(obj, graph.Node): return obj From 4c02b0f20ada2f8fa0f7fa5692cac63d528e6726 Mon Sep 17 00:00:00 2001 From: Tim Sweeney Date: Mon, 30 Sep 2024 10:19:01 -0700 Subject: [PATCH 091/179] chore: Trivial change for CI retrigger #2529init (#2529) --- README.md | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/README.md b/README.md index 4154fcb4c4f..7da126b6748 100644 --- a/README.md +++ b/README.md @@ -6,7 +6,7 @@ [![Github Checks](https://img.shields.io/github/check-runs/wandb/weave/master )](https://github.com/wandb/weave) -Weave is a toolkit for developing Generative AI applications, built by [Weights & Biases](https://wandb.ai/). +Weave is a toolkit for developing Generative AI applications, built by [Weights & Biases](https://wandb.ai/)! --- From 86cd4b09fa5e29c329cdc1f28d17703aa127b8ad Mon Sep 17 00:00:00 2001 From: Andrew Truong Date: Mon, 30 Sep 2024 13:23:11 -0400 Subject: [PATCH 092/179] chore(weave): Refactor hotfixes #2530 --- .github/workflows/upload-assets.yaml | 20 ++++++++++---------- weave/trace/weave_init.py | 2 +- 2 files changed, 11 insertions(+), 11 deletions(-) diff --git a/.github/workflows/upload-assets.yaml b/.github/workflows/upload-assets.yaml index 06d952de921..a6beaa39144 100644 --- a/.github/workflows/upload-assets.yaml +++ b/.github/workflows/upload-assets.yaml @@ -14,8 +14,8 @@ jobs: environment: name: release permissions: - contents: "write" - id-token: "write" + contents: 'write' + id-token: 'write' steps: - uses: actions/checkout@v3 with: @@ -23,10 +23,10 @@ jobs: fetch-depth: 0 - uses: actions/setup-node@v1 with: - node-version: "20.x" - - id: "build" + node-version: '20.x' + - id: 'build' run: | - ./weave/frontend/build.sh + ./weave_query/weave_query/frontend/build.sh if [[ -z "$(git status weave/frontend/sha1.txt --porcelain)" ]] then echo "Frontend assets has not changed, skipping publishing" @@ -36,19 +36,19 @@ jobs: git diff echo "UPLOAD_ASSETS=true" >> "$GITHUB_OUTPUT" fi - - id: "auth" - name: "Authenticate to Google Cloud" - uses: "google-github-actions/auth@v1" + - id: 'auth' + name: 'Authenticate to Google Cloud' + uses: 'google-github-actions/auth@v1' if: ${{ steps.build.outputs.UPLOAD_ASSETS == 'true' }} with: workload_identity_provider: ${{ secrets.WORKLOAD_IDENTITY_PROVIDER }} # the service account secret format is wrong, hard coding it until it is fixed in core #service_account: ${{ secrets.WORKLOAD_IDENTITY_SERVICE_ACCOUNT }} service_account: tf-github-ci-weave@wandb-production.iam.gserviceaccount.com - - id: "upload-and-push" + - id: 'upload-and-push' if: ${{ steps.build.outputs.UPLOAD_ASSETS == 'true' }} run: | - ./weave/frontend/bundle.sh + ./weave_query/weave_query/frontend/bundle.sh git config --global user.name 'Weave Build Bot' git config --global user.email weave@wandb.com git commit -a -m 'chore(bot): update frontend bundle sha [no ci]' diff --git a/weave/trace/weave_init.py b/weave/trace/weave_init.py index 69cc8793965..7aa95fa741c 100644 --- a/weave/trace/weave_init.py +++ b/weave/trace/weave_init.py @@ -76,7 +76,7 @@ def init_weave( else: _current_inited_client.reset() - from weave_query import wandb_api # type: ignore + from weave.wandb_interface import wandb_api # type: ignore # Must init to read ensure we've read auth from the environment, in # case we're on a new thread. From 1a3bdcfaba91fcb225be61dc1f7d7d908f57de28 Mon Sep 17 00:00:00 2001 From: Jamie Rasmussen <112953339+jamie-rasmussen@users.noreply.github.com> Date: Mon, 30 Sep 2024 13:45:24 -0500 Subject: [PATCH 093/179] chore: update string popup styling (#2508) --- .../Home/Browse2/CellValueString.tsx | 26 +++++++++---------- 1 file changed, 12 insertions(+), 14 deletions(-) diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse2/CellValueString.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse2/CellValueString.tsx index 8e9b1ec1739..03a1ab7b62c 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse2/CellValueString.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse2/CellValueString.tsx @@ -75,7 +75,6 @@ const Toolbar = styled.div` display: flex; align-items: center; padding: 4px 0; - border-bottom: 1px solid ${Colors.MOON_150}; `; Toolbar.displayName = 'S.Toolbar'; @@ -164,17 +163,6 @@ const CellValueStringWithPopup = ({value}: CellValueStringProps) => { -
    + )} + + + ); +}; + +const useTruncatedData = (data: Data) => { + const [truncatedData, setTruncatedData] = useState(data); + const [truncatedStore, setTruncatedStore] = useState({}); + + useEffect(() => { + const {store, result} = traverseAndTruncate(data); + setTruncatedData(result); + setTruncatedStore(store); + }, [data]); + + return {truncatedData, truncatedStore, setTruncatedData, setTruncatedStore}; +}; diff --git a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewerSection.tsx b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewerSection.tsx index de632732b2b..74cdcd2f79f 100644 --- a/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewerSection.tsx +++ b/weave-js/src/components/PagePanelComponents/Home/Browse3/pages/CallPage/ObjectViewerSection.tsx @@ -19,7 +19,7 @@ import {isCustomWeaveTypePayload} from '../../typeViews/customWeaveType.types'; import {CustomWeaveTypeDispatcher} from '../../typeViews/CustomWeaveTypeDispatcher'; import {OBJECT_ATTR_EDGE_NAME} from '../wfReactInterface/constants'; import {WeaveCHTable, WeaveCHTableSourceRefContext} from './DataTableView'; -import {ObjectViewer} from './ObjectViewer'; +import {ARRAY_TRUNCATION_LENGTH, ObjectViewer} from './ObjectViewer'; import {getValueType, traverse} from './traverse'; import {ValueView} from './ValueView'; @@ -156,7 +156,13 @@ const ObjectViewerSectionNonEmpty = ({ setTreeExpanded(true); } setMode('expanded'); - setExpandedIds(getGroupIds()); + if (getGroupIds().length > ARRAY_TRUNCATION_LENGTH) { + setExpandedIds( + getGroupIds().slice(0, expandedIds.length + ARRAY_TRUNCATION_LENGTH) + ); + } else { + setExpandedIds(getGroupIds()); + } }; // On first render and when data changes, recompute expansion state @@ -187,7 +193,7 @@ const ObjectViewerSectionNonEmpty = ({ icon="expand-uncollapse" active={mode === 'expanded'} onClick={onClickExpanded} - tooltip="View expanded" + tooltip={`Expand next ${ARRAY_TRUNCATION_LENGTH} rows`} />