From 2423ace49268f323992393386cf762a61f82a769 Mon Sep 17 00:00:00 2001 From: aaronvg Date: Tue, 11 Jun 2024 21:11:00 -0700 Subject: [PATCH] add new promptfiddle backend proxy (#667) --- .../scripts/update-schema-wasm.sh | 1 + fiddle/.gitignore | 5 - fiddle/backend/.dockerignore | 7 - fiddle/backend/.gitignore | 1 - fiddle/backend/Dockerfile | 72 - fiddle/backend/README.md | 45 - fiddle/backend/app/lint.py | 4 - fiddle/backend/app/main.py | 310 -- fiddle/backend/baml-README.md | 46 - .../baml_client/__do_not_import/__init__.py | 12 - .../__do_not_import/clients/__init__.py | 11 - .../__do_not_import/clients/client_claude.py | 23 - .../clients/client_claudeinstant.py | 23 - .../__do_not_import/clients/client_gpt3.py | 23 - .../__do_not_import/clients/client_gpt4.py | 23 - .../clients/client_gpt4turbo.py | 23 - .../__do_not_import/functions/__init__.py | 11 - .../functions/fx_ambiguousterm.py | 67 - .../functions/fx_ambiguousterm.pyi | 178 -- .../functions/fx_chainofthought.py | 67 - .../functions/fx_chainofthought.pyi | 178 -- .../functions/fx_contradictions.py | 67 - .../functions/fx_contradictions.pyi | 178 -- .../functions/fx_exampleprovider.py | 67 - .../functions/fx_exampleprovider.pyi | 178 -- .../functions/fx_nolargedistance.py | 67 - .../functions/fx_nolargedistance.pyi | 178 -- .../__do_not_import/functions/fx_notipping.py | 67 - .../functions/fx_notipping.pyi | 178 -- .../functions/fx_offensivelanguage.py | 67 - .../functions/fx_offensivelanguage.pyi | 178 -- .../__do_not_import/generated_baml_client.py | 70 - .../__do_not_import/impls/__init__.py | 18 - .../impls/fx_ambiguousterm_impl_version1.py | 88 - .../impls/fx_chainofthought_impl_version1.py | 88 - .../impls/fx_contradictions_impl_version1.py | 93 - .../impls/fx_exampleprovider_impl_version1.py | 94 - .../impls/fx_nolargedistance_impl_version1.py | 86 - .../impls/fx_notipping_impl_version1.py | 83 - .../fx_offensivelanguage_impl_version1.py | 83 - .../__do_not_import/types/__init__.py | 19 - .../__do_not_import/types/classes/__init__.py | 11 - .../types/classes/cls_linteroutput.py | 21 - .../types/classes/cls_linteroutput2.py | 22 - .../__do_not_import/types/partial/__init__.py | 19 - .../types/partial/classes/__init__.py | 11 - .../types/partial/classes/cls_linteroutput.py | 21 - .../partial/classes/cls_linteroutput2.py | 22 - fiddle/backend/baml_client/__init__.py | 14 - fiddle/backend/baml_client/baml.lock | 7 - .../baml_client/baml_types/__init__.py | 47 - .../backend/baml_client/baml_types/partial.py | 19 - .../backend/baml_client/testing/__init__.py | 17 - fiddle/backend/baml_client/tests/__init__.py | 11 - .../baml_client/tests/test_ambiguousterm.py | 49 - .../baml_client/tests/test_chainofthought.py | 65 - .../baml_client/tests/test_contradictions.py | 33 - .../baml_client/tests/test_exampleprovider.py | 33 - .../backend/baml_client/tracing/__init__.py | 18 - fiddle/backend/baml_example_app.py | 100 - .../AmbiguousTerm/encouraging_coral.json | 3 - .../__tests__/AmbiguousTerm/test1.json | 3 - .../learn-baml-extract-level1.json | 3 - .../reasoning-out-of-order.json | 3 - .../__tests__/ChainOfThought/test1.json | 3 - .../__tests__/Contradictions/schema_test.json | 3 - .../__tests__/ExampleProvider/test1.json | 3 - fiddle/backend/baml_src/clients.baml | 39 - fiddle/backend/baml_src/main.baml | 13 - fiddle/backend/baml_src/models.baml | 2 - .../baml_src/rules/ambiguous-term.baml | 28 - .../baml_src/rules/chain-of-thought.baml | 28 - .../baml_src/rules/contradictions.baml | 72 - .../baml_src/rules/example-provider.baml | 34 - .../baml_src/rules/this-offends-me.baml | 77 - fiddle/backend/bootstrap.sh | 18 - fiddle/backend/poetry.lock | 2072 -------------- fiddle/backend/pyproject.toml | 19 - fiddle/client.py | 37 - fiddle/inputs/main.baml | 43 - fiddle/inputs/test_case.json | 3 - fiddle/latin.txt | 1 - integ-tests/typescript/tests/shrek_img.png | Bin 0 -> 115070 bytes root.code-workspace | 9 +- .../baml-schema-wasm-web/scripts/build.sh | 3 +- .../fiddle-frontend/app/PostHogPageView.tsx | 2 +- .../[project_id]/_components/ProjectView.tsx | 2 +- .../app/[project_id]/_components/Tour.tsx | 3 +- .../app/_components/ExampleProjectCard.tsx | 2 +- typescript/fiddle-frontend/next.config.mjs | 14 +- typescript/fiddle-frontend/package.json | 4 +- .../fiddle-frontend/pages/api/[...path].ts | 52 + typescript/fiddle-frontend/vercel-build.sh | 1 + typescript/fiddle-proxy/.gitignore | 1 + typescript/fiddle-proxy/Dockerfile | 18 + .../fiddle-proxy}/fly.toml | 10 +- typescript/fiddle-proxy/package-lock.json | 2539 +++++++++++++++++ typescript/fiddle-proxy/package.json | 21 + typescript/fiddle-proxy/server.js | 49 + .../src/baml_wasm_web/EventListener.tsx | 7 +- typescript/pnpm-lock.yaml | 6 + 101 files changed, 2718 insertions(+), 6149 deletions(-) delete mode 100644 fiddle/.gitignore delete mode 100644 fiddle/backend/.dockerignore delete mode 100644 fiddle/backend/.gitignore delete mode 100644 fiddle/backend/Dockerfile delete mode 100644 fiddle/backend/README.md delete mode 100644 fiddle/backend/app/lint.py delete mode 100644 fiddle/backend/app/main.py delete mode 100644 fiddle/backend/baml-README.md delete mode 100644 fiddle/backend/baml_client/__do_not_import/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/client_claude.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/client_claudeinstant.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/client_gpt3.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/client_gpt4.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/clients/client_gpt4turbo.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.pyi delete mode 100644 fiddle/backend/baml_client/__do_not_import/generated_baml_client.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_ambiguousterm_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_chainofthought_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_contradictions_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_exampleprovider_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_nolargedistance_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_notipping_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/impls/fx_offensivelanguage_impl_version1.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/classes/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput2.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/partial/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/partial/classes/__init__.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput.py delete mode 100644 fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput2.py delete mode 100644 fiddle/backend/baml_client/__init__.py delete mode 100644 fiddle/backend/baml_client/baml.lock delete mode 100644 fiddle/backend/baml_client/baml_types/__init__.py delete mode 100644 fiddle/backend/baml_client/baml_types/partial.py delete mode 100644 fiddle/backend/baml_client/testing/__init__.py delete mode 100644 fiddle/backend/baml_client/tests/__init__.py delete mode 100644 fiddle/backend/baml_client/tests/test_ambiguousterm.py delete mode 100644 fiddle/backend/baml_client/tests/test_chainofthought.py delete mode 100644 fiddle/backend/baml_client/tests/test_contradictions.py delete mode 100644 fiddle/backend/baml_client/tests/test_exampleprovider.py delete mode 100644 fiddle/backend/baml_client/tracing/__init__.py delete mode 100644 fiddle/backend/baml_example_app.py delete mode 100644 fiddle/backend/baml_src/__tests__/AmbiguousTerm/encouraging_coral.json delete mode 100644 fiddle/backend/baml_src/__tests__/AmbiguousTerm/test1.json delete mode 100644 fiddle/backend/baml_src/__tests__/ChainOfThought/learn-baml-extract-level1.json delete mode 100644 fiddle/backend/baml_src/__tests__/ChainOfThought/reasoning-out-of-order.json delete mode 100644 fiddle/backend/baml_src/__tests__/ChainOfThought/test1.json delete mode 100644 fiddle/backend/baml_src/__tests__/Contradictions/schema_test.json delete mode 100644 fiddle/backend/baml_src/__tests__/ExampleProvider/test1.json delete mode 100644 fiddle/backend/baml_src/clients.baml delete mode 100644 fiddle/backend/baml_src/main.baml delete mode 100644 fiddle/backend/baml_src/models.baml delete mode 100644 fiddle/backend/baml_src/rules/ambiguous-term.baml delete mode 100644 fiddle/backend/baml_src/rules/chain-of-thought.baml delete mode 100644 fiddle/backend/baml_src/rules/contradictions.baml delete mode 100644 fiddle/backend/baml_src/rules/example-provider.baml delete mode 100644 fiddle/backend/baml_src/rules/this-offends-me.baml delete mode 100755 fiddle/backend/bootstrap.sh delete mode 100644 fiddle/backend/poetry.lock delete mode 100644 fiddle/backend/pyproject.toml delete mode 100644 fiddle/client.py delete mode 100644 fiddle/inputs/main.baml delete mode 100644 fiddle/inputs/test_case.json delete mode 100644 fiddle/latin.txt create mode 100644 integ-tests/typescript/tests/shrek_img.png create mode 100644 typescript/fiddle-frontend/pages/api/[...path].ts create mode 100644 typescript/fiddle-proxy/.gitignore create mode 100644 typescript/fiddle-proxy/Dockerfile rename {fiddle/backend => typescript/fiddle-proxy}/fly.toml (63%) create mode 100644 typescript/fiddle-proxy/package-lock.json create mode 100644 typescript/fiddle-proxy/package.json create mode 100644 typescript/fiddle-proxy/server.js diff --git a/engine/baml-schema-wasm/scripts/update-schema-wasm.sh b/engine/baml-schema-wasm/scripts/update-schema-wasm.sh index 313c7e04a..58b0e6871 100755 --- a/engine/baml-schema-wasm/scripts/update-schema-wasm.sh +++ b/engine/baml-schema-wasm/scripts/update-schema-wasm.sh @@ -36,6 +36,7 @@ fi printf '%s\n' "Starting build :: baml-schema-wasm" cargo build --release --color=always --target=wasm32-unknown-unknown --manifest-path=$baml_schema_wasm_dir/Cargo.toml + ## Build target specific steps if [ "$TARGET" == "node" ]; then printf '%s\n' "Generating node module" diff --git a/fiddle/.gitignore b/fiddle/.gitignore deleted file mode 100644 index 58d286cf9..000000000 --- a/fiddle/.gitignore +++ /dev/null @@ -1,5 +0,0 @@ -# created by virtualenv automatically -lib/ -bin/ -__pycache__ -pyvenv.cfg diff --git a/fiddle/backend/.dockerignore b/fiddle/backend/.dockerignore deleted file mode 100644 index 71b63767e..000000000 --- a/fiddle/backend/.dockerignore +++ /dev/null @@ -1,7 +0,0 @@ -# flyctl launch added from .gitignore -**/__pycache__ - -# flyctl launch added from .venv/.gitignore -# created by virtualenv automatically -.venv/**/* -fly.toml diff --git a/fiddle/backend/.gitignore b/fiddle/backend/.gitignore deleted file mode 100644 index ed8ebf583..000000000 --- a/fiddle/backend/.gitignore +++ /dev/null @@ -1 +0,0 @@ -__pycache__ \ No newline at end of file diff --git a/fiddle/backend/Dockerfile b/fiddle/backend/Dockerfile deleted file mode 100644 index 49819f94e..000000000 --- a/fiddle/backend/Dockerfile +++ /dev/null @@ -1,72 +0,0 @@ -############################################### -# Base Image -############################################### -FROM python:3.9-slim as python-base - - -ENV PYTHONUNBUFFERED=1 \ - PYTHONDONTWRITEBYTECODE=1 \ - PIP_NO_CACHE_DIR=off \ - PIP_DISABLE_PIP_VERSION_CHECK=on \ - PIP_DEFAULT_TIMEOUT=100 \ - POETRY_VERSION=1.7.1 \ - POETRY_HOME="/opt/poetry" \ - POETRY_VIRTUALENVS_IN_PROJECT=true \ - POETRY_NO_INTERACTION=1 \ - PYSETUP_PATH="/code" \ - VENV_PATH="/code/.venv" - -# prepend poetry and venv to path -ENV PATH="$POETRY_HOME/bin:$VENV_PATH/bin:$PATH" - -############################################### -# Builder Image -############################################### -FROM python-base as builder-base -RUN apt-get update \ - && apt-get install --no-install-recommends -y \ - curl \ - build-essential \ - libcurl4-openssl-dev \ - libssl-dev - -# install poetry - respects $POETRY_VERSION & $POETRY_HOME -RUN curl -sSL https://install.python-poetry.org | python3 - - -# copy project requirement files here to ensure they will be cached. -WORKDIR $PYSETUP_PATH -COPY poetry.lock pyproject.toml ./ - -# install runtime deps - uses $POETRY_VIRTUALENVS_IN_PROJECT internally -RUN poetry install --no-dev - -############################################### -# Production Image -############################################### -FROM python-base as production -COPY --from=builder-base $PYSETUP_PATH $PYSETUP_PATH - -RUN apt-get update \ - && apt-get install --no-install-recommends -y \ - curl - -RUN curl -fsSL -o install-baml.sh https://raw.githubusercontent.com/BoundaryML/homebrew-baml/main/install-baml.sh - -RUN chmod +x install-baml.sh - -# replace the sudo -RUN sed -i 's/sudo //g' install-baml.sh - -RUN TERM=xterm bash ./install-baml.sh - -# Note it seems that the baml from the poetry.toml is the one that is still installed, so that version is the -# one that matters. So perhaps remove this. -RUN pip install baml -RUN pip install pytest -RUN pip show baml - -RUN baml version - -WORKDIR $PYSETUP_PATH -COPY app $PYSETUP_PATH/app -CMD ["uvicorn", "app.main:app", "--host", "0.0.0.0", "--port", "8000"] \ No newline at end of file diff --git a/fiddle/backend/README.md b/fiddle/backend/README.md deleted file mode 100644 index cac7be417..000000000 --- a/fiddle/backend/README.md +++ /dev/null @@ -1,45 +0,0 @@ -baml fiddle - -docker build -t fiddle . --platform linux/amd64 -docker run -p 8000:8000 fiddle - -## Run without docker - -First activate the virutal environment in fiddle/ dir -(create virtualenv if not available: `virtualenv .`) -`source bin/activate` - -Then do the following steps: - -### Install deps - -`pip install baml pytest python-dotenv` - -`cd backend` -`uvicorn app.main:app --host 0.0.0.0 --port 8000 --reload` - -Now the server will have access to a python env that has `baml` python package installed. - -## Test command - -Run this from the same virtualenv you created in fiddle/ -`python client.py` - -OR you can try to use curl: - -``` -curl -X POST "http://localhost:8000/fiddle" \ --H "Content-Type: application/json" \ --d '{ - "files": [ - { - "name": "baml_src/main.baml", - "content": "generator lang_python {\n language python\n // This is where your non-baml source code located\n // (relative directory where pyproject.toml, package.json, etc. lives)\n project_root \"..\" \n // This command is used by \"baml test\" to run tests\n // defined in the playground\n test_command \"pytest -s\"\n // This command is used by \"baml update-client\" to install\n // dependencies to your language environment\n install_command \"poetry add baml@latest\"\n package_version_command \"poetry show baml\"\n}\n\nfunction ExtractVerbs {\n input string\n /// list of verbs\n output string[]\n}\n\nclient GPT4 {\n provider baml-openai-chat\n options {\n model gpt-4 \n api_key env.OPENAI_API_KEY\n }\n}\n\nimpl version1 {\n client GPT4\n prompt #\"\n Extract the verbs from this INPUT:\n \n INPUT:\n ---\n {#input}\n ---\n {// this is a comment inside a prompt! //}\n Return a {#print_type(output)}.\n\n Response:\n \"#\n}" - }, - { - "name": "baml_src/__tests__/ExtractVerbs/test1.json", - "content": " - } - ] -}' -``` diff --git a/fiddle/backend/app/lint.py b/fiddle/backend/app/lint.py deleted file mode 100644 index 49287b06c..000000000 --- a/fiddle/backend/app/lint.py +++ /dev/null @@ -1,4 +0,0 @@ - - -def hello(): - pass \ No newline at end of file diff --git a/fiddle/backend/app/main.py b/fiddle/backend/app/main.py deleted file mode 100644 index 011026daf..000000000 --- a/fiddle/backend/app/main.py +++ /dev/null @@ -1,310 +0,0 @@ -import os -import shutil -import tempfile -from fastapi import FastAPI, Request, HTTPException, Depends, BackgroundTasks -from fastapi.responses import StreamingResponse -import subprocess -import asyncio -from pydantic import BaseModel -from typing import List, Optional, Dict -from dotenv import load_dotenv -from uuid import uuid4 -from fastapi.middleware.cors import CORSMiddleware - -# from baml_client import baml -# from baml_client.baml_types import LinterOutput - - -origins = [ - "http://localhost.tiangolo.com", - "https://localhost.tiangolo.com", - "http://localhost", - "http://localhost:3000", -] - -load_dotenv() - - -# class TestImplementation(BaseModel): -# name: str - - -class Test(BaseModel): - name: str - impls: List[str] - - -class Function(BaseModel): - name: str - tests: List[Test] - run_all_available_tests: Optional[bool] = False - - -class TestRequest(BaseModel): - functions: List[Function] - - -class FileModel(BaseModel): - name: str - content: str - - -class RunTests(BaseModel): - files: List[FileModel] - testRequest: TestRequest - - -app = FastAPI() - -app.add_middleware( - CORSMiddleware, - allow_origins=["*"], - allow_credentials=True, - allow_methods=["*"], - allow_headers=["*"], -) - -fiddle_dir = os.environ.get("FIDDLE_DIR", "/tmp/fiddle") - -generator_block = """\ -generator lang_python { - language python - // This is where your non-baml source code located - // (relative directory where pyproject.toml, package.json, etc. lives) - project_root ".." - // This command is used by "baml test" to run tests - // defined in the playground - test_command "pytest -s" - // This command is used by "baml update-client" to install - // dependencies to your language environment - install_command "poetry add baml@latest" - package_version_command "poetry show baml" -} -""" - - -async def process_output(process): - async for line in process.stdout: - yield "STDOUT", line.decode() - async for line in process.stderr: - yield "STDERR", line.decode() - - -async def handle_client(reader, writer, output_queue: asyncio.Queue): - while True: - data = await reader.readline() - if not data: - break - message = data.decode() - await output_queue.put(("PORT", message)) - - -async def generator(output_queue: asyncio.Queue): - while True: - output = await output_queue.get() - if output is None: # None is the signal to stop - break - source, line = output - yield f"data: : {line}\n\n" - - -async def stream_subprocess_and_port_output(command, cwd, output_queue: asyncio.Queue): - # Initialize the server to listen on an available port - server = await asyncio.start_server( - lambda r, w: handle_client(r, w, output_queue), "0.0.0.0", 0 - ) - port = server.sockets[0].getsockname()[1] - # Serve until the subprocess exits - output_task = None - try: - # Adjust the command to include the dynamically determined port - full_command = command.format(port=port) - print("running command: ", full_command) - process = await asyncio.create_subprocess_shell( - full_command, - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - cwd=cwd, - shell=True, - env=os.environ.copy(), - ) - - # Function to forward subprocess output to the queue - async def forward_output(): - async for source, line in process_output(process): - await output_queue.put((source, line)) - - # Run the forward_output task alongside the server - output_task = asyncio.create_task(forward_output()) - - await process.wait() - print("Process exited---------") - finally: - print("Closing server---------") - # Attempt to clean up the directory - try: - shutil.rmtree(cwd) - except Exception as e: - print(f"Error removing directory {cwd}: {e}") - - server.close() - await server.wait_closed() - print("Cancelling task---------") - if output_task is not None: - output_task.cancel() - # Indicate completion by putting None into the queue - await output_queue.put(None) - - -async def create_temp_files(): - dir_to_use = f"{fiddle_dir}-{uuid4()}" - os.makedirs(f"{dir_to_use}", exist_ok=True) - try: - yield dir_to_use - finally: - pass - # shutil.rmtree(fiddle_dir) - - -@app.get("/") -def hello_world(): - return "

Hello, World!

" - - -@app.post("/fiddle") -async def fiddle(request: RunTests, tmpdir: str = Depends(create_temp_files)): - files = request.files - test_request = request.testRequest - print(request) - - main_found = False - - for file in files: - if "main.baml" in file.name: - file.content = generator_block + file.content - main_found = True - # Ensure the directory path exists - file_directory = os.path.join(tmpdir, os.path.dirname(file.name)) - os.makedirs(file_directory, exist_ok=True) # Create any directories in the path - - # Now it's safe to write the file - file_path = os.path.join(tmpdir, file.name) - with open(file_path, "w") as f: - f.write(file.content) - - if not main_found: - file_path = os.path.join(tmpdir, "baml_src/main.baml") - os.makedirs(os.path.dirname(file_path), exist_ok=True) - with open(file_path, "w") as f: - f.write(generator_block) - - await asyncio.sleep(1.0) - # Use asyncio subprocess for non-blocking call - process = await asyncio.create_subprocess_shell( - "baml build", - cwd=tmpdir, - stdout=asyncio.subprocess.PIPE, - stderr=asyncio.subprocess.PIPE, - ) - stdout, stderr = await process.communicate() - print("--------- baml build output ---------") - print(stdout.decode()) - print(stderr.decode()) - if process.returncode != 0: - raise HTTPException(status_code=400, detail="BAML build failed") - - output_queue = asyncio.Queue() - if test_request: - selected_tests = [ - f"-i {fn.name}:{impl}:{test.name}" - for fn in test_request.functions - for test in fn.tests - for impl in test.impls - ] - - is_single_function = len(test_request.functions) == 1 - test_filter = ( - f"-i {test_request.functions[0].name}:" - if is_single_function and test_request.functions[0].run_all_available_tests - else " ".join(selected_tests) - ) - else: - test_filter = "" - - # Modify the test_command to include test_filter - test_command = f"baml test {test_filter} run --playground-port {{port}}" - - streaming_gen = generator(output_queue) - asyncio.create_task( - stream_subprocess_and_port_output(test_command, tmpdir, output_queue) - ) - - # Corrected to await the streaming function correctly - return StreamingResponse(streaming_gen, media_type="text/plain") - - -# class LintRequest(BaseModel): -# lintingRules: List[str] -# promptTemplate: str -# promptVariables: Dict[str, str] - - -# class LinterRuleOutput(BaseModel): -# diagnostics: List[LinterOutput] -# ruleName: str - - -# @app.post("/lint") -# async def lint(request: LintRequest) -> List[LinterRuleOutput]: -# result1, result2, res3, res4, res5, res6, res7 = await asyncio.gather( -# baml.Contradictions(request.promptTemplate), -# baml.ChainOfThought(request.promptTemplate), -# baml.AmbiguousTerm(request.promptTemplate), -# baml.OffensiveLanguage(request.promptTemplate), -# baml.ExampleProvider(request.promptTemplate), -# baml.NoTipping(request.promptTemplate), -# baml.NoLargeDistance(request.promptTemplate), -# ) - -# res1_outputs = [ -# LinterOutput( -# exactPhrase=item.exactPhrase, -# recommendation=item.recommendation, -# fix=item.fix, -# reason=item.reason, -# ) -# for item in result1 -# ] - -# res3 = [ -# LinterOutput( -# exactPhrase=item.exactPhrase, -# recommendation=item.recommendation, -# fix=item.fix, -# reason=item.reason, -# ) -# for item in res3 -# if item.exactPhrase not in ["impl version1", "client GPT4"] -# ] - -# print(result1) -# print(result2) -# print(res3) - -# return [ -# LinterRuleOutput( -# diagnostics=res1_outputs, -# ruleName="Contradictions", -# ), -# LinterRuleOutput(diagnostics=res4, ruleName="OffensiveLanguage"), -# # LinterRuleOutput(diagnostics=res5, ruleName="ExampleProvider"), -# # LinterRuleOutput(diagnostics=res3, ruleName="AmbiguousTerm"), -# LinterRuleOutput(diagnostics=result2, ruleName="ChainOfThought"), -# LinterRuleOutput(diagnostics=res6, ruleName="Tipping"), -# LinterRuleOutput(diagnostics=res7, ruleName="NoLargeDistance"), -# ] - - -# if __name__ == '__main__': -# os.makedirs("/tmp/baml", exist_ok=True) -# app.run(host="0.0.0.0", port=8000) diff --git a/fiddle/backend/baml-README.md b/fiddle/backend/baml-README.md deleted file mode 100644 index 290962d59..000000000 --- a/fiddle/backend/baml-README.md +++ /dev/null @@ -1,46 +0,0 @@ -# Getting started with BAML - -## Installations - -Make sure to download the [VSCode Playground](https://marketplace.visualstudio.com/items?itemName=boundary.baml). - -To use BAML with either python or typescript, you should run: - -```shell -$ baml update-client -``` - -This will keep client side libraries in sync. It also prints the commands being run, which you can run manually if they fail. - -## Running tests - -You can run tests via: - -```shell -# To run tests -$ baml test run - -# To list tests -$ baml test - -# For more help -$ baml test --help -``` - -## Integrating BAML with python / ts - -You can run: - -```shell -$ python -m baml_example_app -``` - -The `baml_example_app.py` file shows how to import from the code BAML generates. - -## Deploying - -You don't need the BAML compiler when you deploy / release. Your `baml_client` folder contains everything you may need. - -## Reporting bugs - -Report any issues on our [Github](https://www.github.com/boundaryml/baml) or [Discord](https://discord.gg/BTNBeXGuaS) diff --git a/fiddle/backend/baml_client/__do_not_import/__init__.py b/fiddle/backend/baml_client/__do_not_import/__init__.py deleted file mode 100644 index c6a9eb227..000000000 --- a/fiddle/backend/baml_client/__do_not_import/__init__.py +++ /dev/null @@ -1,12 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - -from . import impls diff --git a/fiddle/backend/baml_client/__do_not_import/clients/__init__.py b/fiddle/backend/baml_client/__do_not_import/clients/__init__.py deleted file mode 100644 index 9725e141c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - diff --git a/fiddle/backend/baml_client/__do_not_import/clients/client_claude.py b/fiddle/backend/baml_client/__do_not_import/clients/client_claude.py deleted file mode 100644 index c63b2a925..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/client_claude.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.provider_manager import LLMManager -from os import environ - - -Claude = LLMManager.add_llm( - name="Claude", - provider="baml-anthropic-chat", - retry_policy=None, - redactions=["api_key"], - options=dict( - model_name="claude-2.1", - api_key=environ['ANTHROPIC_API_KEY'], - ), -) diff --git a/fiddle/backend/baml_client/__do_not_import/clients/client_claudeinstant.py b/fiddle/backend/baml_client/__do_not_import/clients/client_claudeinstant.py deleted file mode 100644 index 88c6a5b95..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/client_claudeinstant.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.provider_manager import LLMManager -from os import environ - - -ClaudeInstant = LLMManager.add_llm( - name="ClaudeInstant", - provider="baml-anthropic-chat", - retry_policy=None, - redactions=["api_key"], - options=dict( - model_name="claude-instant-1.2", - api_key=environ['ANTHROPIC_API_KEY'], - ), -) diff --git a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt3.py b/fiddle/backend/baml_client/__do_not_import/clients/client_gpt3.py deleted file mode 100644 index fd6d3030e..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt3.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.provider_manager import LLMManager -from os import environ - - -GPT3 = LLMManager.add_llm( - name="GPT3", - provider="baml-openai-chat", - retry_policy=None, - redactions=["api_key"], - options=dict( - model="gpt-3.5-turbo", - api_key=environ['OPENAI_API_KEY'], - ), -) diff --git a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4.py b/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4.py deleted file mode 100644 index 0ae652eef..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.provider_manager import LLMManager -from os import environ - - -GPT4 = LLMManager.add_llm( - name="GPT4", - provider="baml-openai-chat", - retry_policy=None, - redactions=["api_key"], - options=dict( - model="gpt-4", - api_key=environ['OPENAI_API_KEY'], - ), -) diff --git a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4turbo.py b/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4turbo.py deleted file mode 100644 index 25aa6499a..000000000 --- a/fiddle/backend/baml_client/__do_not_import/clients/client_gpt4turbo.py +++ /dev/null @@ -1,23 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.provider_manager import LLMManager -from os import environ - - -GPT4Turbo = LLMManager.add_llm( - name="GPT4Turbo", - provider="baml-openai-chat", - retry_policy=None, - redactions=["api_key"], - options=dict( - model="gpt-4-turbo", - api_key=environ['OPENAI_API_KEY'], - ), -) diff --git a/fiddle/backend/baml_client/__do_not_import/functions/__init__.py b/fiddle/backend/baml_client/__do_not_import/functions/__init__.py deleted file mode 100644 index 9725e141c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.py deleted file mode 100644 index fd7143bfb..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -IAmbiguousTermOutput = List[LinterOutput] - -@runtime_checkable -class IAmbiguousTerm(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IAmbiguousTermStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLAmbiguousTerm(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "AmbiguousTerm", - IAmbiguousTerm, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLAmbiguousTerm = IBAMLAmbiguousTerm() - -__all__ = [ "BAMLAmbiguousTerm" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.pyi deleted file mode 100644 index dc14e58b8..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_ambiguousterm.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -IAmbiguousTermOutput = List[LinterOutput] - -@runtime_checkable -class IAmbiguousTerm(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IAmbiguousTermStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLAmbiguousTermImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLAmbiguousTerm: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[IAmbiguousTerm, IAmbiguousTermStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLAmbiguousTermImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the AmbiguousTermInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.AmbiguousTerm.mock() as mocked: - mocked.return_value = ... - result = await AmbiguousTermImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the AmbiguousTermInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.AmbiguousTerm.test - async def test_logic(AmbiguousTermImpl: IAmbiguousTerm) -> None: - result = await AmbiguousTermImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the AmbiguousTermInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.AmbiguousTerm.test(exclude_impl=["implname"]) - async def test_logic(AmbiguousTermImpl: IAmbiguousTerm) -> None: - result = await AmbiguousTermImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.AmbiguousTerm.test(stream=True) - async def test_logic(AmbiguousTermImpl: IAmbiguousTermStream) -> None: - async for result in AmbiguousTermImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the AmbiguousTermInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.AmbiguousTerm.test - class TestClass: - def test_a(self, AmbiguousTermImpl: IAmbiguousTerm) -> None: - ... - def test_b(self, AmbiguousTermImpl: IAmbiguousTerm) -> None: - ... - ``` - """ - ... - -BAMLAmbiguousTerm: IBAMLAmbiguousTerm diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.py deleted file mode 100644 index 148a02900..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -IChainOfThoughtOutput = List[LinterOutput] - -@runtime_checkable -class IChainOfThought(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IChainOfThoughtStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLChainOfThought(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "ChainOfThought", - IChainOfThought, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLChainOfThought = IBAMLChainOfThought() - -__all__ = [ "BAMLChainOfThought" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.pyi deleted file mode 100644 index 638bec7f8..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_chainofthought.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -IChainOfThoughtOutput = List[LinterOutput] - -@runtime_checkable -class IChainOfThought(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IChainOfThoughtStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLChainOfThoughtImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLChainOfThought: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[IChainOfThought, IChainOfThoughtStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLChainOfThoughtImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the ChainOfThoughtInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.ChainOfThought.mock() as mocked: - mocked.return_value = ... - result = await ChainOfThoughtImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ChainOfThoughtInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.ChainOfThought.test - async def test_logic(ChainOfThoughtImpl: IChainOfThought) -> None: - result = await ChainOfThoughtImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ChainOfThoughtInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.ChainOfThought.test(exclude_impl=["implname"]) - async def test_logic(ChainOfThoughtImpl: IChainOfThought) -> None: - result = await ChainOfThoughtImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.ChainOfThought.test(stream=True) - async def test_logic(ChainOfThoughtImpl: IChainOfThoughtStream) -> None: - async for result in ChainOfThoughtImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ChainOfThoughtInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.ChainOfThought.test - class TestClass: - def test_a(self, ChainOfThoughtImpl: IChainOfThought) -> None: - ... - def test_b(self, ChainOfThoughtImpl: IChainOfThought) -> None: - ... - ``` - """ - ... - -BAMLChainOfThought: IBAMLChainOfThought diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.py deleted file mode 100644 index 72dd8f80c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput2 import LinterOutput2 -from ..types.partial.classes.cls_linteroutput2 import PartialLinterOutput2 -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -IContradictionsOutput = List[LinterOutput2] - -@runtime_checkable -class IContradictions(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput2] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput2]: - ... - - - -@runtime_checkable -class IContradictionsStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput2], List[LinterOutput2]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - ... -class IBAMLContradictions(BaseBAMLFunction[List[LinterOutput2], List[LinterOutput2]]): - def __init__(self) -> None: - super().__init__( - "Contradictions", - IContradictions, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput2]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLContradictions = IBAMLContradictions() - -__all__ = [ "BAMLContradictions" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.pyi deleted file mode 100644 index 7f210783c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_contradictions.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput2 import LinterOutput2 -from ..types.partial.classes.cls_linteroutput2 import PartialLinterOutput2 -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -IContradictionsOutput = List[LinterOutput2] - -@runtime_checkable -class IContradictions(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput2] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput2]: - ... - - - -@runtime_checkable -class IContradictionsStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput2], List[LinterOutput2]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - ... -class BAMLContradictionsImpl: - async def run(self, arg: str, /) -> List[LinterOutput2]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - ... - -class IBAMLContradictions: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[IContradictions, IContradictionsStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput2]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - ... - - def get_impl(self, name: ImplName) -> BAMLContradictionsImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the ContradictionsInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.Contradictions.mock() as mocked: - mocked.return_value = ... - result = await ContradictionsImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ContradictionsInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.Contradictions.test - async def test_logic(ContradictionsImpl: IContradictions) -> None: - result = await ContradictionsImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ContradictionsInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.Contradictions.test(exclude_impl=["implname"]) - async def test_logic(ContradictionsImpl: IContradictions) -> None: - result = await ContradictionsImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.Contradictions.test(stream=True) - async def test_logic(ContradictionsImpl: IContradictionsStream) -> None: - async for result in ContradictionsImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ContradictionsInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.Contradictions.test - class TestClass: - def test_a(self, ContradictionsImpl: IContradictions) -> None: - ... - def test_b(self, ContradictionsImpl: IContradictions) -> None: - ... - ``` - """ - ... - -BAMLContradictions: IBAMLContradictions diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.py deleted file mode 100644 index e4f7e5105..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -IExampleProviderOutput = List[LinterOutput] - -@runtime_checkable -class IExampleProvider(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IExampleProviderStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLExampleProvider(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "ExampleProvider", - IExampleProvider, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLExampleProvider = IBAMLExampleProvider() - -__all__ = [ "BAMLExampleProvider" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.pyi deleted file mode 100644 index b220cf2f7..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_exampleprovider.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -IExampleProviderOutput = List[LinterOutput] - -@runtime_checkable -class IExampleProvider(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IExampleProviderStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLExampleProviderImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLExampleProvider: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[IExampleProvider, IExampleProviderStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLExampleProviderImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the ExampleProviderInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.ExampleProvider.mock() as mocked: - mocked.return_value = ... - result = await ExampleProviderImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ExampleProviderInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.ExampleProvider.test - async def test_logic(ExampleProviderImpl: IExampleProvider) -> None: - result = await ExampleProviderImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ExampleProviderInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.ExampleProvider.test(exclude_impl=["implname"]) - async def test_logic(ExampleProviderImpl: IExampleProvider) -> None: - result = await ExampleProviderImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.ExampleProvider.test(stream=True) - async def test_logic(ExampleProviderImpl: IExampleProviderStream) -> None: - async for result in ExampleProviderImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the ExampleProviderInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.ExampleProvider.test - class TestClass: - def test_a(self, ExampleProviderImpl: IExampleProvider) -> None: - ... - def test_b(self, ExampleProviderImpl: IExampleProvider) -> None: - ... - ``` - """ - ... - -BAMLExampleProvider: IBAMLExampleProvider diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.py deleted file mode 100644 index 07d8b9af4..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -INoLargeDistanceOutput = List[LinterOutput] - -@runtime_checkable -class INoLargeDistance(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class INoLargeDistanceStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLNoLargeDistance(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "NoLargeDistance", - INoLargeDistance, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLNoLargeDistance = IBAMLNoLargeDistance() - -__all__ = [ "BAMLNoLargeDistance" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.pyi deleted file mode 100644 index 2070f8b3f..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_nolargedistance.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -INoLargeDistanceOutput = List[LinterOutput] - -@runtime_checkable -class INoLargeDistance(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class INoLargeDistanceStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLNoLargeDistanceImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLNoLargeDistance: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[INoLargeDistance, INoLargeDistanceStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLNoLargeDistanceImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the NoLargeDistanceInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.NoLargeDistance.mock() as mocked: - mocked.return_value = ... - result = await NoLargeDistanceImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoLargeDistanceInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.NoLargeDistance.test - async def test_logic(NoLargeDistanceImpl: INoLargeDistance) -> None: - result = await NoLargeDistanceImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoLargeDistanceInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.NoLargeDistance.test(exclude_impl=["implname"]) - async def test_logic(NoLargeDistanceImpl: INoLargeDistance) -> None: - result = await NoLargeDistanceImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.NoLargeDistance.test(stream=True) - async def test_logic(NoLargeDistanceImpl: INoLargeDistanceStream) -> None: - async for result in NoLargeDistanceImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoLargeDistanceInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.NoLargeDistance.test - class TestClass: - def test_a(self, NoLargeDistanceImpl: INoLargeDistance) -> None: - ... - def test_b(self, NoLargeDistanceImpl: INoLargeDistance) -> None: - ... - ``` - """ - ... - -BAMLNoLargeDistance: IBAMLNoLargeDistance diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.py deleted file mode 100644 index 7ab880f27..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -INoTippingOutput = List[LinterOutput] - -@runtime_checkable -class INoTipping(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class INoTippingStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLNoTipping(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "NoTipping", - INoTipping, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLNoTipping = IBAMLNoTipping() - -__all__ = [ "BAMLNoTipping" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.pyi deleted file mode 100644 index 754de3cdd..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_notipping.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -INoTippingOutput = List[LinterOutput] - -@runtime_checkable -class INoTipping(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class INoTippingStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLNoTippingImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLNoTipping: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[INoTipping, INoTippingStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLNoTippingImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the NoTippingInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.NoTipping.mock() as mocked: - mocked.return_value = ... - result = await NoTippingImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoTippingInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.NoTipping.test - async def test_logic(NoTippingImpl: INoTipping) -> None: - result = await NoTippingImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoTippingInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.NoTipping.test(exclude_impl=["implname"]) - async def test_logic(NoTippingImpl: INoTipping) -> None: - result = await NoTippingImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.NoTipping.test(stream=True) - async def test_logic(NoTippingImpl: INoTippingStream) -> None: - async for result in NoTippingImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the NoTippingInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.NoTipping.test - class TestClass: - def test_a(self, NoTippingImpl: INoTipping) -> None: - ... - def test_b(self, NoTippingImpl: INoTipping) -> None: - ... - ``` - """ - ... - -BAMLNoTipping: IBAMLNoTipping diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.py b/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.py deleted file mode 100644 index 7b19f9a34..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.py +++ /dev/null @@ -1,67 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from baml_lib._impl.functions import BaseBAMLFunction -from typing import AsyncIterator, Callable, List, Protocol, runtime_checkable - - -IOffensiveLanguageOutput = List[LinterOutput] - -@runtime_checkable -class IOffensiveLanguage(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IOffensiveLanguageStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class IBAMLOffensiveLanguage(BaseBAMLFunction[List[LinterOutput], List[LinterOutput]]): - def __init__(self) -> None: - super().__init__( - "OffensiveLanguage", - IOffensiveLanguage, - ["version1"], - ) - - async def __call__(self, *args, **kwargs) -> List[LinterOutput]: - return await self.get_impl("version1").run(*args, **kwargs) - - def stream(self, *args, **kwargs) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - res = self.get_impl("version1").stream(*args, **kwargs) - return res - -BAMLOffensiveLanguage = IBAMLOffensiveLanguage() - -__all__ = [ "BAMLOffensiveLanguage" ] diff --git a/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.pyi b/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.pyi deleted file mode 100644 index 785394e7a..000000000 --- a/fiddle/backend/baml_client/__do_not_import/functions/fx_offensivelanguage.pyi +++ /dev/null @@ -1,178 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.stream import AsyncStream -from typing import Callable, List, Protocol, runtime_checkable - - -import typing - -import pytest -from contextlib import contextmanager -from unittest import mock - -ImplName = typing.Literal["version1"] - -T = typing.TypeVar("T", bound=typing.Callable[..., typing.Any]) -CLS = typing.TypeVar("CLS", bound=type) - - -IOffensiveLanguageOutput = List[LinterOutput] - -@runtime_checkable -class IOffensiveLanguage(Protocol): - """ - This is the interface for a function. - - Args: - arg: str - - Returns: - List[LinterOutput] - """ - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - - -@runtime_checkable -class IOffensiveLanguageStream(Protocol): - """ - This is the interface for a stream function. - - Args: - arg: str - - Returns: - AsyncStream[List[LinterOutput], List[LinterOutput]] - """ - - def __call__(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... -class BAMLOffensiveLanguageImpl: - async def run(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - -class IBAMLOffensiveLanguage: - def register_impl( - self, name: ImplName - ) -> typing.Callable[[IOffensiveLanguage, IOffensiveLanguageStream], None]: - ... - - async def __call__(self, arg: str, /) -> List[LinterOutput]: - ... - - def stream(self, arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - ... - - def get_impl(self, name: ImplName) -> BAMLOffensiveLanguageImpl: - ... - - @contextmanager - def mock(self) -> typing.Generator[mock.AsyncMock, None, None]: - """ - Utility for mocking the OffensiveLanguageInterface. - - Usage: - ```python - # All implementations are mocked. - - async def test_logic() -> None: - with baml.OffensiveLanguage.mock() as mocked: - mocked.return_value = ... - result = await OffensiveLanguageImpl(...) - assert mocked.called - ``` - """ - ... - - @typing.overload - def test(self, test_function: T) -> T: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the OffensiveLanguageInterface. - - Args: - test_function : T - The test function to be decorated. - - Usage: - ```python - # All implementations will be tested. - - @baml.OffensiveLanguage.test - async def test_logic(OffensiveLanguageImpl: IOffensiveLanguage) -> None: - result = await OffensiveLanguageImpl(...) - ``` - """ - ... - - @typing.overload - def test(self, *, exclude_impl: typing.Iterable[ImplName] = [], stream: bool = False) -> pytest.MarkDecorator: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the OffensiveLanguageInterface. - - Args: - exclude_impl : Iterable[ImplName] - The names of the implementations to exclude from testing. - stream: bool - If set, will return a streamable version of the test function. - - Usage: - ```python - # All implementations except the given impl will be tested. - - @baml.OffensiveLanguage.test(exclude_impl=["implname"]) - async def test_logic(OffensiveLanguageImpl: IOffensiveLanguage) -> None: - result = await OffensiveLanguageImpl(...) - ``` - - ```python - # Streamable version of the test function. - - @baml.OffensiveLanguage.test(stream=True) - async def test_logic(OffensiveLanguageImpl: IOffensiveLanguageStream) -> None: - async for result in OffensiveLanguageImpl(...): - ... - ``` - """ - ... - - @typing.overload - def test(self, test_class: typing.Type[CLS]) -> typing.Type[CLS]: - """ - Provides a pytest.mark.parametrize decorator to facilitate testing different implementations of - the OffensiveLanguageInterface. - - Args: - test_class : Type[CLS] - The test class to be decorated. - - Usage: - ```python - # All implementations will be tested in every test method. - - @baml.OffensiveLanguage.test - class TestClass: - def test_a(self, OffensiveLanguageImpl: IOffensiveLanguage) -> None: - ... - def test_b(self, OffensiveLanguageImpl: IOffensiveLanguage) -> None: - ... - ``` - """ - ... - -BAMLOffensiveLanguage: IBAMLOffensiveLanguage diff --git a/fiddle/backend/baml_client/__do_not_import/generated_baml_client.py b/fiddle/backend/baml_client/__do_not_import/generated_baml_client.py deleted file mode 100644 index 82a1de5ca..000000000 --- a/fiddle/backend/baml_client/__do_not_import/generated_baml_client.py +++ /dev/null @@ -1,70 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from .clients.client_claude import Claude -from .clients.client_claudeinstant import ClaudeInstant -from .clients.client_gpt3 import GPT3 -from .clients.client_gpt4 import GPT4 -from .clients.client_gpt4turbo import GPT4Turbo -from .functions.fx_ambiguousterm import BAMLAmbiguousTerm -from .functions.fx_chainofthought import BAMLChainOfThought -from .functions.fx_contradictions import BAMLContradictions -from .functions.fx_exampleprovider import BAMLExampleProvider -from .functions.fx_nolargedistance import BAMLNoLargeDistance -from .functions.fx_notipping import BAMLNoTipping -from .functions.fx_offensivelanguage import BAMLOffensiveLanguage -from baml_core.otel import add_message_transformer_hook, flush_trace_logs -from baml_core.provider_manager import LLMManager -from baml_core.services import LogSchema -from baml_lib import DeserializerException, baml_init -from typing import Callable, List, Optional - - -class BAMLClient: - AmbiguousTerm = BAMLAmbiguousTerm - ChainOfThought = BAMLChainOfThought - Contradictions = BAMLContradictions - ExampleProvider = BAMLExampleProvider - NoLargeDistance = BAMLNoLargeDistance - NoTipping = BAMLNoTipping - OffensiveLanguage = BAMLOffensiveLanguage - Claude = Claude - ClaudeInstant = ClaudeInstant - GPT3 = GPT3 - GPT4 = GPT4 - GPT4Turbo = GPT4Turbo - - def __init__(self): - LLMManager.validate() - baml_init() - - def configure( - self, - project_id: Optional[str] = None, - secret_key: Optional[str] = None, - base_url: Optional[str] = None, - enable_cache: Optional[bool] = None, - stage: Optional[str] = None, - ): - return baml_init( - project_id=project_id, - secret_key=secret_key, - base_url=base_url, - enable_cache=enable_cache, - stage=stage, - ) - - def add_before_send_message_hook(self, hook: Callable[[LogSchema], None]): - add_message_transformer_hook(hook) - - def flush(self): - flush_trace_logs() - - -baml = BAMLClient() diff --git a/fiddle/backend/baml_client/__do_not_import/impls/__init__.py b/fiddle/backend/baml_client/__do_not_import/impls/__init__.py deleted file mode 100644 index 2a8d572d0..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - -from .fx_ambiguousterm_impl_version1 import version1 as unused_fx_ambiguousterm_impl_version1 -from .fx_chainofthought_impl_version1 import version1 as unused_fx_chainofthought_impl_version1 -from .fx_contradictions_impl_version1 import version1 as unused_fx_contradictions_impl_version1 -from .fx_exampleprovider_impl_version1 import version1 as unused_fx_exampleprovider_impl_version1 -from .fx_nolargedistance_impl_version1 import version1 as unused_fx_nolargedistance_impl_version1 -from .fx_notipping_impl_version1 import version1 as unused_fx_notipping_impl_version1 -from .fx_offensivelanguage_impl_version1 import version1 as unused_fx_offensivelanguage_impl_version1 diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_ambiguousterm_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_ambiguousterm_impl_version1.py deleted file mode 100644 index 4d2d397d4..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_ambiguousterm_impl_version1.py +++ /dev/null @@ -1,88 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_ambiguousterm import BAMLAmbiguousTerm -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of AmbiguousTerm. - -__prompt_template = """\ -You are a powerful AI linter that catches terms or phrases that are nonsensical or out of context. Ignore anything in {hashtag...} tags. - -Allow advanced prompting techniques that improve the model's results like: -- Providing examples -- Chain of thought -- Tipping - --------------------- - -{arg} - --------------------- - - -Output the diagnostic in this JSON format (only include these fields, and no others): -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLAmbiguousTerm.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_chainofthought_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_chainofthought_impl_version1.py deleted file mode 100644 index b6f683236..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_chainofthought_impl_version1.py +++ /dev/null @@ -1,88 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_chainofthought import BAMLChainOfThought -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of ChainOfThought. - -__prompt_template = """\ -You are a powerful AI linter that only looks at one linting rule called "reasoning-rule". - -The rule is this: -Given these INSTRUCTIONS below, return a diagnostic if they do not mention reasoning, thinking, or any kind of pre-processing before outputting the answer. Try to focus on the part of the instructions that mentions the output schema if there are any of those directions - -The rest of the text is not applicable to this linting rule. Only apply the linting rule to INSTRUCTIONS. - --------------------- - -{arg} - --------------------- - - -Output the diagnostic in this JSON format (only include these fields, and no others): -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLChainOfThought.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_contradictions_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_contradictions_impl_version1.py deleted file mode 100644 index 2b8f1b5b8..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_contradictions_impl_version1.py +++ /dev/null @@ -1,93 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_contradictions import BAMLContradictions -from ..types.classes.cls_linteroutput2 import LinterOutput2 -from ..types.partial.classes.cls_linteroutput2 import PartialLinterOutput2 -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of Contradictions. - -__prompt_template = """\ -Find any CONFLICTING / CONTRADICTING words or phrases in-between the tags and output a set of diagnostics matching the output schema. - -When there is a contradiction or conflicting statement just make an assumption as to what the actual intent is and put that assumption in the "recommendation". The "fix" should incorporate that assumption. - -DO NOT match on ambiguous terms. Only match on clear contradictions. -IGNORE optional fields like (id string?) - -Allow advanced prompting techniques that improve the model's results like: -- Providing examples -- Chain of thought -- Tipping for valid json - - - -{arg} - - -Output JSON format (only include these fields, and no others). Explain your reasoning in 2-3 brief sentences before writing out the json: -{ - // The conflicting statements or words in the text. - "conflictingStatements": string[], - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput2]](List[LinterOutput2]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput2]](List[LinterOutput2]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput2]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput2], List[LinterOutput2]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLContradictions.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_exampleprovider_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_exampleprovider_impl_version1.py deleted file mode 100644 index bd9873116..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_exampleprovider_impl_version1.py +++ /dev/null @@ -1,94 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_exampleprovider import BAMLExampleProvider -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of ExampleProvider. - -__prompt_template = """\ -For the INSTRUCTIONS section, ensure that the "prompt" section contains an example of what the output json should look like given an example input and the type of the input. If the input is an object you can use a json representation of that example object. Be creative in the example you give. If the output is a string then there is no need to give an example. - - - --------------------- - -{arg} - --------------------- - -Output the example in this diagnostic format, where the suggestion will be a neatly written example with new lines and indentation like this: "Here is an example: - -INPUT ---- -{fill this out} ---- -OUTPUT JSON: -{fill this out} ----", and the fix can just be null since we're not fixing anything. The exactPhrase should match the output format instructions. - -Return your answer in this JSON format: -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLExampleProvider.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_nolargedistance_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_nolargedistance_impl_version1.py deleted file mode 100644 index 0cc6f660b..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_nolargedistance_impl_version1.py +++ /dev/null @@ -1,86 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_nolargedistance import BAMLNoLargeDistance -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of NoLargeDistance. - -__prompt_template = """\ -Given the INSTRUCTIONS below, -check if any data model's fields have constraints that are placed too far apart in the text. - -Techniques like reasonging, summarization, and paraphrasing may be placed far apart in the text. - --------------------- - -{arg} - --------------------- - - -Output the diagnostic in this JSON format (only include these fields, and no others): -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLNoLargeDistance.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_notipping_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_notipping_impl_version1.py deleted file mode 100644 index 086192f41..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_notipping_impl_version1.py +++ /dev/null @@ -1,83 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_notipping import BAMLNoTipping -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of NoTipping. - -__prompt_template = """\ -Given the INSTRUCTIONS below, check if the text asks for tips. If so, return a diagnostic with the information on the request. - --------------------- - -{arg} - --------------------- - - -Output the diagnostic in this JSON format (only include these fields, and no others): -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLNoTipping.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/impls/fx_offensivelanguage_impl_version1.py b/fiddle/backend/baml_client/__do_not_import/impls/fx_offensivelanguage_impl_version1.py deleted file mode 100644 index 6efdb5338..000000000 --- a/fiddle/backend/baml_client/__do_not_import/impls/fx_offensivelanguage_impl_version1.py +++ /dev/null @@ -1,83 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..clients.client_gpt4turbo import GPT4Turbo -from ..functions.fx_offensivelanguage import BAMLOffensiveLanguage -from ..types.classes.cls_linteroutput import LinterOutput -from ..types.partial.classes.cls_linteroutput import PartialLinterOutput -from baml_core.provider_manager.llm_response import LLMResponse -from baml_core.stream import AsyncStream -from baml_lib._impl.deserializer import Deserializer -from typing import List - - -import typing -# Impl: version1 -# Client: GPT4Turbo -# An implementation of OffensiveLanguage. - -__prompt_template = """\ -Given the INSTRUCTIONS below, find ways in which the text could be considered offensive or inappropriate. If the text is offensive or inappropriate, return a diagnostic with the information on the offensiveness. - --------------------- - -{arg} - --------------------- - - -Output the diagnostic in this JSON format (only include these fields, and no others): -{ - // Explain why the linting error was raised. - "reason": string, - // The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "exactPhrase": string, - // A human-readable string that explains how to fix the linting error. - "recommendation": string | null, - // Explain why the recommendation is the best course of action. - "recommendation_reason": string | null, - // The fix for the linting error. You MUST start at the same location as the original phrase. - "fixedPhrase": string | null -}[] - -Output JSON Array:\ -""" - -__input_replacers = { - "{arg}" -} - - -# We ignore the type here because baml does some type magic to make this work -# for inline SpecialForms like Optional, Union, List. -__deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - -# Add a deserializer that handles stream responses, which are all Partial types -__partial_deserializer = Deserializer[List[LinterOutput]](List[LinterOutput]) # type: ignore - - - - - - - -async def version1(arg: str, /) -> List[LinterOutput]: - response = await GPT4Turbo.run_prompt_template(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - deserialized = __deserializer.from_string(response.generated) - return deserialized - - -def version1_stream(arg: str, /) -> AsyncStream[List[LinterOutput], List[LinterOutput]]: - def run_prompt() -> typing.AsyncIterator[LLMResponse]: - raw_stream = GPT4Turbo.run_prompt_template_stream(template=__prompt_template, replacers=__input_replacers, params=dict(arg=arg)) - return raw_stream - stream = AsyncStream(stream_cb=run_prompt, partial_deserializer=__partial_deserializer, final_deserializer=__deserializer) - return stream - -BAMLOffensiveLanguage.register_impl("version1")(version1, version1_stream) \ No newline at end of file diff --git a/fiddle/backend/baml_client/__do_not_import/types/__init__.py b/fiddle/backend/baml_client/__do_not_import/types/__init__.py deleted file mode 100644 index 5d81f3dfb..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from .classes.cls_linteroutput import LinterOutput -from .classes.cls_linteroutput2 import LinterOutput2 - - - - -__all__ = [ - 'LinterOutput', - 'LinterOutput2' -] diff --git a/fiddle/backend/baml_client/__do_not_import/types/classes/__init__.py b/fiddle/backend/baml_client/__do_not_import/types/classes/__init__.py deleted file mode 100644 index 9725e141c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/classes/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - diff --git a/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput.py b/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput.py deleted file mode 100644 index 2646caf87..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput.py +++ /dev/null @@ -1,21 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_lib._impl.deserializer import register_deserializer -from pydantic import BaseModel -from typing import Optional - - -@register_deserializer({ "fixedPhrase": "fix", }) -class LinterOutput(BaseModel): - reason: str - exactPhrase: str - recommendation: Optional[str] = None - recommendation_reason: Optional[str] = None - fix: Optional[str] = None diff --git a/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput2.py b/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput2.py deleted file mode 100644 index f9678c356..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/classes/cls_linteroutput2.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_lib._impl.deserializer import register_deserializer -from pydantic import BaseModel -from typing import List, Optional - - -@register_deserializer({ "fixedPhrase": "fix", }) -class LinterOutput2(BaseModel): - conflictingStatements: List[str] - reason: str - exactPhrase: str - recommendation: Optional[str] = None - recommendation_reason: Optional[str] = None - fix: Optional[str] = None diff --git a/fiddle/backend/baml_client/__do_not_import/types/partial/__init__.py b/fiddle/backend/baml_client/__do_not_import/types/partial/__init__.py deleted file mode 100644 index c3b7fb3b3..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/partial/__init__.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from .classes.cls_linteroutput import PartialLinterOutput -from .classes.cls_linteroutput2 import PartialLinterOutput2 - - - - -__all__ = [ - 'PartialLinterOutput', - 'PartialLinterOutput2' -] diff --git a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/__init__.py b/fiddle/backend/baml_client/__do_not_import/types/partial/classes/__init__.py deleted file mode 100644 index 9725e141c..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - diff --git a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput.py b/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput.py deleted file mode 100644 index 4bbafa84b..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput.py +++ /dev/null @@ -1,21 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_lib._impl.deserializer import register_deserializer -from pydantic import BaseModel -from typing import Optional - - -@register_deserializer({ "fixedPhrase": "fix", }) -class PartialLinterOutput(BaseModel): - reason: Optional[str] = None - exactPhrase: Optional[str] = None - recommendation: Optional[str] = None - recommendation_reason: Optional[str] = None - fix: Optional[str] = None diff --git a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput2.py b/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput2.py deleted file mode 100644 index e2f35b48d..000000000 --- a/fiddle/backend/baml_client/__do_not_import/types/partial/classes/cls_linteroutput2.py +++ /dev/null @@ -1,22 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_lib._impl.deserializer import register_deserializer -from pydantic import BaseModel -from typing import List, Optional - - -@register_deserializer({ "fixedPhrase": "fix", }) -class PartialLinterOutput2(BaseModel): - conflictingStatements: List[str] - reason: Optional[str] = None - exactPhrase: Optional[str] = None - recommendation: Optional[str] = None - recommendation_reason: Optional[str] = None - fix: Optional[str] = None diff --git a/fiddle/backend/baml_client/__init__.py b/fiddle/backend/baml_client/__init__.py deleted file mode 100644 index abc5de03e..000000000 --- a/fiddle/backend/baml_client/__init__.py +++ /dev/null @@ -1,14 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - -from baml_lib import baml_init -from .__do_not_import.generated_baml_client import baml -__all__ = ['baml', 'baml_init'] diff --git a/fiddle/backend/baml_client/baml.lock b/fiddle/backend/baml_client/baml.lock deleted file mode 100644 index 1ecd9c649..000000000 --- a/fiddle/backend/baml_client/baml.lock +++ /dev/null @@ -1,7 +0,0 @@ -{ - "version": 1, - "content": { - "cli_version": "0.17.1", - "client_version": null - } -} \ No newline at end of file diff --git a/fiddle/backend/baml_client/baml_types/__init__.py b/fiddle/backend/baml_client/baml_types/__init__.py deleted file mode 100644 index bceeb61be..000000000 --- a/fiddle/backend/baml_client/baml_types/__init__.py +++ /dev/null @@ -1,47 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.functions.fx_ambiguousterm import IAmbiguousTerm, IAmbiguousTermOutput, IAmbiguousTermStream -from ..__do_not_import.functions.fx_chainofthought import IChainOfThought, IChainOfThoughtOutput, IChainOfThoughtStream -from ..__do_not_import.functions.fx_contradictions import IContradictions, IContradictionsOutput, IContradictionsStream -from ..__do_not_import.functions.fx_exampleprovider import IExampleProvider, IExampleProviderOutput, IExampleProviderStream -from ..__do_not_import.functions.fx_nolargedistance import INoLargeDistance, INoLargeDistanceOutput, INoLargeDistanceStream -from ..__do_not_import.functions.fx_notipping import INoTipping, INoTippingOutput, INoTippingStream -from ..__do_not_import.functions.fx_offensivelanguage import IOffensiveLanguage, IOffensiveLanguageOutput, IOffensiveLanguageStream -from ..__do_not_import.types.classes.cls_linteroutput import LinterOutput -from ..__do_not_import.types.classes.cls_linteroutput2 import LinterOutput2 - - - - -__all__ = [ - 'IAmbiguousTerm', - 'IAmbiguousTermOutput', - 'IAmbiguousTermStream', - 'IChainOfThought', - 'IChainOfThoughtOutput', - 'IChainOfThoughtStream', - 'IContradictions', - 'IContradictionsOutput', - 'IContradictionsStream', - 'IExampleProvider', - 'IExampleProviderOutput', - 'IExampleProviderStream', - 'INoLargeDistance', - 'INoLargeDistanceOutput', - 'INoLargeDistanceStream', - 'INoTipping', - 'INoTippingOutput', - 'INoTippingStream', - 'IOffensiveLanguage', - 'IOffensiveLanguageOutput', - 'IOffensiveLanguageStream', - 'LinterOutput', - 'LinterOutput2' -] diff --git a/fiddle/backend/baml_client/baml_types/partial.py b/fiddle/backend/baml_client/baml_types/partial.py deleted file mode 100644 index e9fe781b9..000000000 --- a/fiddle/backend/baml_client/baml_types/partial.py +++ /dev/null @@ -1,19 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.types.partial.classes.cls_linteroutput import PartialLinterOutput -from ..__do_not_import.types.partial.classes.cls_linteroutput2 import PartialLinterOutput2 - - - - -__all__ = [ - 'PartialLinterOutput', - 'PartialLinterOutput2' -] diff --git a/fiddle/backend/baml_client/testing/__init__.py b/fiddle/backend/baml_client/testing/__init__.py deleted file mode 100644 index 7341a081e..000000000 --- a/fiddle/backend/baml_client/testing/__init__.py +++ /dev/null @@ -1,17 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from pytest_baml import baml_test - - - - -__all__ = [ - 'baml_test' -] diff --git a/fiddle/backend/baml_client/tests/__init__.py b/fiddle/backend/baml_client/tests/__init__.py deleted file mode 100644 index 9725e141c..000000000 --- a/fiddle/backend/baml_client/tests/__init__.py +++ /dev/null @@ -1,11 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - - - diff --git a/fiddle/backend/baml_client/tests/test_ambiguousterm.py b/fiddle/backend/baml_client/tests/test_ambiguousterm.py deleted file mode 100644 index e9a75c482..000000000 --- a/fiddle/backend/baml_client/tests/test_ambiguousterm.py +++ /dev/null @@ -1,49 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.generated_baml_client import baml -from ..baml_types import IAmbiguousTerm, IAmbiguousTermStream, LinterOutput -from baml_lib._impl.deserializer import Deserializer -from json import dumps -from pytest_baml.ipc_channel import BaseIPCChannel -from typing import Any - - -@baml.AmbiguousTerm.test(stream=True) -async def test_encouraging_coral(AmbiguousTermImpl: IAmbiguousTermStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("Given the email here, analyze the sentiment and return a json schema with all fields extracted") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with AmbiguousTermImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - -@baml.AmbiguousTerm.test(stream=True) -async def test_test1(AmbiguousTermImpl: IAmbiguousTermStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("Check the TERMS AND CONDITIONS below and ensure that they are fully written out professionally.") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with AmbiguousTermImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - diff --git a/fiddle/backend/baml_client/tests/test_chainofthought.py b/fiddle/backend/baml_client/tests/test_chainofthought.py deleted file mode 100644 index 63b952c37..000000000 --- a/fiddle/backend/baml_client/tests/test_chainofthought.py +++ /dev/null @@ -1,65 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.generated_baml_client import baml -from ..baml_types import IChainOfThought, IChainOfThoughtStream, LinterOutput -from baml_lib._impl.deserializer import Deserializer -from json import dumps -from pytest_baml.ipc_channel import BaseIPCChannel -from typing import Any - - -@baml.ChainOfThought.test(stream=True) -async def test_learn_baml_extract_level1(ChainOfThoughtImpl: IChainOfThoughtStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("Given the email below:\n\nEmail Subject: {#input.subject}\nEmail Body: {#input.body}\n\n Extract this info from the email in JSON format:\n {\n \"id\": string,\n \"date\": string,\n \"product_name\": string,\n \"cost\": float\n }\n\n JSON:") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with ChainOfThoughtImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - -@baml.ChainOfThought.test(stream=True) -async def test_reasoning_out_of_order(ChainOfThoughtImpl: IChainOfThoughtStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("Given the text below:\n\n{input}\n\nextract this information from it that follows this json schema:\n{\n sentiment: \"happy\" | \"sad\" | \"ecstatic\"\n reasoning: string\n}\n\nOutput JSON:") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with ChainOfThoughtImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - -@baml.ChainOfThought.test(stream=True) -async def test_test1(ChainOfThoughtImpl: IChainOfThoughtStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str(" Given the email below: fe \n\n Email Subject: {#input.subject}\n Email Body: {#input.body}\n\n Explain the reasoning behind how you extract this info from the email, and then provide the extracted info in JSON format:\n {#print_type(output)}\n\n JSON:") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with ChainOfThoughtImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - diff --git a/fiddle/backend/baml_client/tests/test_contradictions.py b/fiddle/backend/baml_client/tests/test_contradictions.py deleted file mode 100644 index 7371f5ef9..000000000 --- a/fiddle/backend/baml_client/tests/test_contradictions.py +++ /dev/null @@ -1,33 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.generated_baml_client import baml -from ..baml_types import IContradictions, IContradictionsStream, LinterOutput2 -from baml_lib._impl.deserializer import Deserializer -from json import dumps -from pytest_baml.ipc_channel import BaseIPCChannel -from typing import Any - - -@baml.Contradictions.test(stream=True) -async def test_schema_test(ContradictionsImpl: IContradictionsStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("Given the following text, output an a summary using the json schema format.\n\ntext:\n{input}\n\nOutput json schema:\n{\n summary: string\n}\n\nYAML format output:") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with ContradictionsImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - diff --git a/fiddle/backend/baml_client/tests/test_exampleprovider.py b/fiddle/backend/baml_client/tests/test_exampleprovider.py deleted file mode 100644 index feb2751bd..000000000 --- a/fiddle/backend/baml_client/tests/test_exampleprovider.py +++ /dev/null @@ -1,33 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from ..__do_not_import.generated_baml_client import baml -from ..baml_types import IExampleProvider, IExampleProviderStream, LinterOutput -from baml_lib._impl.deserializer import Deserializer -from json import dumps -from pytest_baml.ipc_channel import BaseIPCChannel -from typing import Any - - -@baml.ExampleProvider.test(stream=True) -async def test_test1(ExampleProviderImpl: IExampleProviderStream, baml_ipc_channel: BaseIPCChannel): - def to_str(item: Any) -> str: - if isinstance(item, str): - return item - return dumps(item) - - content = to_str("\n\nclass Email {\n subject string\n body string\n}\n\nclass OrderInfo {\n id string?\n @alias(\"order_id\")\n @description(\"The id of the order\")\n date string?\n @description(\"The date the order was placed in ISO8601 format\")\n product_name string?\n @description(\"The name of the first product listed\")\n cost float?\n @description(\"The cost, in dollars, without currency symbols\")\n}\n\nfunction GetOrderInfo {\n input Email\n output OrderInfo\n default_impl level1\n}\n\n\nimpl level1 {\n client GPT4\n prompt #\"\n Given the email below: fe er \n\n Email Subject: {#input.subject}\n Email Body: {#input.body}\n\n Extract this info from the email in JSON format:\n {#print_type(output)}\n\n Make sure the cost is in euros\n\n JSON:\n \"#\n}\n") - deserializer = Deserializer[str](str) # type: ignore - param = deserializer.from_string(content) - async with ExampleProviderImpl(param) as stream: - async for response in stream.parsed_stream: - baml_ipc_channel.send("partial_response", response.json()) - - await stream.get_final_response() - diff --git a/fiddle/backend/baml_client/tracing/__init__.py b/fiddle/backend/baml_client/tracing/__init__.py deleted file mode 100644 index 07ee5d5ed..000000000 --- a/fiddle/backend/baml_client/tracing/__init__.py +++ /dev/null @@ -1,18 +0,0 @@ -# This file is generated by the BAML compiler. -# Do not edit this file directly. -# Instead, edit the BAML files and recompile. - -# ruff: noqa: E501,F401 -# flake8: noqa: E501,F401 -# pylint: disable=unused-import,line-too-long -# fmt: off - -from baml_core.otel import set_tags, trace - - - - -__all__ = [ - 'set_tags', - 'trace' -] diff --git a/fiddle/backend/baml_example_app.py b/fiddle/backend/baml_example_app.py deleted file mode 100644 index 077fcbb7b..000000000 --- a/fiddle/backend/baml_example_app.py +++ /dev/null @@ -1,100 +0,0 @@ -# """ -# Run this script to see how the BAML client can be used in Python. - -# python -m example_baml_app -# """ - -# import asyncio -# from baml_client import baml as b -# from datetime import datetime -# from typing import List -# from typing_extensions import TypedDict - -# async def extract_resume(resume: str) -> None: -# """ -# Extracts the resume and prints the extracted data. -# """ -# print("Parsing resume...") -# print(resume[:100] + "..." if len(resume) > 100 else resume) -# parsed_resume = await b.ExtractResume(resume) -# print(parsed_resume.model_dump_json(indent=2)) - -# await asyncio.sleep(1) -# print("\n\nNow extracting using streaming") -# async with b.ExtractResume.stream(resume) as stream: -# async for x in stream.parsed_stream: -# if x.is_parseable: -# print(f"streaming: {x.parsed.model_dump_json()}") -# response = await stream.get_final_response() -# if response.has_value: -# print(f"\n final: {response.value.model_dump_json(indent=2)}") -# else: -# print("No final response") - - -# class ChatMessage(TypedDict): -# sender: str -# message: str - - -# async def classify_chat(messages: List[ChatMessage]) -> None: -# """ -# Classifies the chat and prints the classification. -# """ -# print("Classifying chat...") -# chat = "\n".join(map(lambda m: f'{m["sender"]}: {m["message"]}', messages)) -# print(chat[:100] + "..." if len(chat) > 100 else chat) - -# classification = await b.ClassifyMessage( -# message=chat, message_date=datetime.now().strftime("%Y-%m-%d") -# ) -# print("Got categories: ", classification) - - -# async def main(): -# resume = """ -# John Doe -# 1234 Elm Street -# Springfield, IL 62701 -# (123) 456-7890 - -# Objective: To obtain a position as a software engineer. - -# Education: -# Bachelor of Science in Computer Science -# University of Illinois at Urbana-Champaign -# May 2020 - May 2024 - -# Experience: -# Software Engineer Intern -# Google -# May 2022 - August 2022 -# - Worked on the Google Search team -# - Developed new features for the search engine -# - Wrote code in Python and C++ - -# Software Engineer Intern -# Facebook -# May 2021 - August 2021 -# - Worked on the Facebook Messenger team -# - Developed new features for the messenger app -# - Wrote code in Python and Java -# """ -# await extract_resume(resume) - -# messages = [ -# {"sender": "Alice", "message": "I'm having issues with my computer."}, -# { -# "sender": "Assistant", -# "message": "I'm sorry to hear that. What seems to be the problem?", -# }, -# { -# "sender": "Alice", -# "message": "It's running really slow. I need to return it. Can I get a refund?", -# }, -# ] -# await classify_chat(messages) - - -# if __name__ == "__main__": -# asyncio.run(main()) diff --git a/fiddle/backend/baml_src/__tests__/AmbiguousTerm/encouraging_coral.json b/fiddle/backend/baml_src/__tests__/AmbiguousTerm/encouraging_coral.json deleted file mode 100644 index c5f304074..000000000 --- a/fiddle/backend/baml_src/__tests__/AmbiguousTerm/encouraging_coral.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Given the email here, analyze the sentiment and return a json schema with all fields extracted" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/AmbiguousTerm/test1.json b/fiddle/backend/baml_src/__tests__/AmbiguousTerm/test1.json deleted file mode 100644 index e57b20355..000000000 --- a/fiddle/backend/baml_src/__tests__/AmbiguousTerm/test1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Check the TERMS AND CONDITIONS below and ensure that they are fully written out professionally." -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/ChainOfThought/learn-baml-extract-level1.json b/fiddle/backend/baml_src/__tests__/ChainOfThought/learn-baml-extract-level1.json deleted file mode 100644 index 256f3e744..000000000 --- a/fiddle/backend/baml_src/__tests__/ChainOfThought/learn-baml-extract-level1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Given the email below:\n\nEmail Subject: {#input.subject}\nEmail Body: {#input.body}\n\n Extract this info from the email in JSON format:\n {\n \"id\": string,\n \"date\": string,\n \"product_name\": string,\n \"cost\": float\n }\n\n JSON:" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/ChainOfThought/reasoning-out-of-order.json b/fiddle/backend/baml_src/__tests__/ChainOfThought/reasoning-out-of-order.json deleted file mode 100644 index 749022072..000000000 --- a/fiddle/backend/baml_src/__tests__/ChainOfThought/reasoning-out-of-order.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Given the text below:\n\n{input}\n\nextract this information from it that follows this json schema:\n{\n sentiment: \"happy\" | \"sad\" | \"ecstatic\"\n reasoning: string\n}\n\nOutput JSON:" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/ChainOfThought/test1.json b/fiddle/backend/baml_src/__tests__/ChainOfThought/test1.json deleted file mode 100644 index bf291cbaa..000000000 --- a/fiddle/backend/baml_src/__tests__/ChainOfThought/test1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": " Given the email below: fe \n\n Email Subject: {#input.subject}\n Email Body: {#input.body}\n\n Explain the reasoning behind how you extract this info from the email, and then provide the extracted info in JSON format:\n {#print_type(output)}\n\n JSON:" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/Contradictions/schema_test.json b/fiddle/backend/baml_src/__tests__/Contradictions/schema_test.json deleted file mode 100644 index f7f8f0869..000000000 --- a/fiddle/backend/baml_src/__tests__/Contradictions/schema_test.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Given the following text, output an a summary using the json schema format.\n\ntext:\n{input}\n\nOutput json schema:\n{\n summary: string\n}\n\nYAML format output:" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/__tests__/ExampleProvider/test1.json b/fiddle/backend/baml_src/__tests__/ExampleProvider/test1.json deleted file mode 100644 index 2dd60e105..000000000 --- a/fiddle/backend/baml_src/__tests__/ExampleProvider/test1.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "\n\nclass Email {\n subject string\n body string\n}\n\nclass OrderInfo {\n id string?\n @alias(\"order_id\")\n @description(\"The id of the order\")\n date string?\n @description(\"The date the order was placed in ISO8601 format\")\n product_name string?\n @description(\"The name of the first product listed\")\n cost float?\n @description(\"The cost, in dollars, without currency symbols\")\n}\n\nfunction GetOrderInfo {\n input Email\n output OrderInfo\n default_impl level1\n}\n\n\nimpl level1 {\n client GPT4\n prompt #\"\n Given the email below: fe er \n\n Email Subject: {#input.subject}\n Email Body: {#input.body}\n\n Extract this info from the email in JSON format:\n {#print_type(output)}\n\n Make sure the cost is in euros\n\n JSON:\n \"#\n}\n" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/clients.baml b/fiddle/backend/baml_src/clients.baml deleted file mode 100644 index 045868ec2..000000000 --- a/fiddle/backend/baml_src/clients.baml +++ /dev/null @@ -1,39 +0,0 @@ -client GPT4 { - provider baml-openai-chat - options { - model gpt-4 - api_key env.OPENAI_API_KEY - } -} - -client GPT4Turbo { - provider baml-openai-chat - options { - model gpt-4-turbo - api_key env.OPENAI_API_KEY - } -} - -client GPT3 { - provider baml-openai-chat - options { - model gpt-3.5-turbo - api_key env.OPENAI_API_KEY - } -} - -client Claude { - provider baml-anthropic-chat - options { - model_name claude-2.1 - api_key env.ANTHROPIC_API_KEY - } -} - -client ClaudeInstant { - provider baml-anthropic-chat - options { - model_name claude-instant-1.2 - api_key env.ANTHROPIC_API_KEY - } -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/main.baml b/fiddle/backend/baml_src/main.baml deleted file mode 100644 index 2a7ca75a0..000000000 --- a/fiddle/backend/baml_src/main.baml +++ /dev/null @@ -1,13 +0,0 @@ -generator lang_python { - language python - // This is where your baml_client will be generated - // Usually the root of your source code relative to this file - project_root "../" - // This command is used by "baml test" to run tests - // defined in the playground - test_command "poetry run pytest" - // This command is used by "baml update-client" to install - // dependencies to your language environment - install_command "poetry add baml@latest" - package_version_command "poetry show baml" -} \ No newline at end of file diff --git a/fiddle/backend/baml_src/models.baml b/fiddle/backend/baml_src/models.baml deleted file mode 100644 index 139597f9c..000000000 --- a/fiddle/backend/baml_src/models.baml +++ /dev/null @@ -1,2 +0,0 @@ - - diff --git a/fiddle/backend/baml_src/rules/ambiguous-term.baml b/fiddle/backend/baml_src/rules/ambiguous-term.baml deleted file mode 100644 index 9c29a4a39..000000000 --- a/fiddle/backend/baml_src/rules/ambiguous-term.baml +++ /dev/null @@ -1,28 +0,0 @@ -function AmbiguousTerm { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - You are a powerful AI linter that catches terms or phrases that are nonsensical or out of context. Ignore anything in {hashtag...} tags. - - Allow advanced prompting techniques that improve the model's results like: - - Providing examples - - Chain of thought - - Tipping - - -------------------- - - {#input} - - -------------------- - - - Output the diagnostic in this JSON format (only include these fields, and no others): - {#print_type(output)} - - Output JSON Array: - "# -} diff --git a/fiddle/backend/baml_src/rules/chain-of-thought.baml b/fiddle/backend/baml_src/rules/chain-of-thought.baml deleted file mode 100644 index 029c369c0..000000000 --- a/fiddle/backend/baml_src/rules/chain-of-thought.baml +++ /dev/null @@ -1,28 +0,0 @@ -function ChainOfThought { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - You are a powerful AI linter that only looks at one linting rule called "reasoning-rule". - - The rule is this: - Given these INSTRUCTIONS below, return a diagnostic if they do not mention reasoning, thinking, or any kind of pre-processing before outputting the answer. Try to focus on the part of the instructions that mentions the output schema if there are any of those directions - - The rest of the text is not applicable to this linting rule. Only apply the linting rule to INSTRUCTIONS. - - -------------------- - - {#input} - - -------------------- - - - Output the diagnostic in this JSON format (only include these fields, and no others): - {#print_type(output)} - - Output JSON Array: - "# -} diff --git a/fiddle/backend/baml_src/rules/contradictions.baml b/fiddle/backend/baml_src/rules/contradictions.baml deleted file mode 100644 index dff4e11f1..000000000 --- a/fiddle/backend/baml_src/rules/contradictions.baml +++ /dev/null @@ -1,72 +0,0 @@ - -class LinterOutput { - - reason string @description(#" - Explain why the linting error was raised. - "#) - exactPhrase string @description(#" - The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "#) - recommendation string? @description(#" - A human-readable string that explains how to fix the linting error. - "#) - recommendation_reason string? @description(#" - Explain why the recommendation is the best course of action. - "#) - fix string? @alias("fixedPhrase") @description(#" - The fix for the linting error. You MUST start at the same location as the original phrase. - "#) -} - -class LinterOutput2 { - conflictingStatements string[] @description(#" - The conflicting statements or words in the text. - "#) - reason string @description(#" - Explain why the linting error was raised. - "#) - exactPhrase string @description(#" - The phrase that triggered the linter error. Write it EXACTLY as it appears in the PROMPT. If it's more than 10 words, just match the first 10 words. - "#) - recommendation string? @description(#" - A human-readable string that explains how to fix the linting error. - "#) - recommendation_reason string? @description(#" - Explain why the recommendation is the best course of action. - "#) - fix string? @alias("fixedPhrase") @description(#" - The fix for the linting error. You MUST start at the same location as the original phrase. - "#) -} - -function Contradictions { - input string - output LinterOutput2[] -} - -impl version1 { - client GPT4Turbo - prompt #" - Find any CONFLICTING / CONTRADICTING words or phrases in-between the tags and output a set of diagnostics matching the output schema. - - When there is a contradiction or conflicting statement just make an assumption as to what the actual intent is and put that assumption in the "recommendation". The "fix" should incorporate that assumption. - - DO NOT match on ambiguous terms. Only match on clear contradictions. - IGNORE optional fields like (id string?) - - Allow advanced prompting techniques that improve the model's results like: - - Providing examples - - Chain of thought - - Tipping for valid json - - - - {#input} - - - Output JSON format (only include these fields, and no others). Explain your reasoning in 2-3 brief sentences before writing out the json: - {#print_type(output)} - - Output JSON Array: - "# -} diff --git a/fiddle/backend/baml_src/rules/example-provider.baml b/fiddle/backend/baml_src/rules/example-provider.baml deleted file mode 100644 index 96c175f61..000000000 --- a/fiddle/backend/baml_src/rules/example-provider.baml +++ /dev/null @@ -1,34 +0,0 @@ -function ExampleProvider { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - For the INSTRUCTIONS section, ensure that the "prompt" section contains an example of what the output json should look like given an example input and the type of the input. If the input is an object you can use a json representation of that example object. Be creative in the example you give. If the output is a string then there is no need to give an example. - - - - -------------------- - - {#input} - - -------------------- - - Output the example in this diagnostic format, where the suggestion will be a neatly written example with new lines and indentation like this: "Here is an example: - - INPUT - --- - {fill this out} - --- - OUTPUT JSON: - {fill this out} - ---", and the fix can just be null since we're not fixing anything. The exactPhrase should match the output format instructions. - - Return your answer in this JSON format: - {#print_type(output)} - - Output JSON Array: - "# -} diff --git a/fiddle/backend/baml_src/rules/this-offends-me.baml b/fiddle/backend/baml_src/rules/this-offends-me.baml deleted file mode 100644 index 940904ac1..000000000 --- a/fiddle/backend/baml_src/rules/this-offends-me.baml +++ /dev/null @@ -1,77 +0,0 @@ -function OffensiveLanguage { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - Given the INSTRUCTIONS below, find ways in which the text could be considered offensive or inappropriate. If the text is offensive or inappropriate, return a diagnostic with the information on the offensiveness. - - -------------------- - - {#input} - - -------------------- - - - Output the diagnostic in this JSON format (only include these fields, and no others): - {#print_type(output)} - - Output JSON Array: - "# -} - - -function NoTipping { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - Given the INSTRUCTIONS below, check if the text asks for tips. If so, return a diagnostic with the information on the request. - - -------------------- - - {#input} - - -------------------- - - - Output the diagnostic in this JSON format (only include these fields, and no others): - {#print_type(output)} - - Output JSON Array: - "# -} - - - -function NoLargeDistance { - input string - output LinterOutput[] -} - -impl version1 { - client GPT4Turbo - prompt #" - Given the INSTRUCTIONS below, - check if any data model's fields have constraints that are placed too far apart in the text. - - Techniques like reasonging, summarization, and paraphrasing may be placed far apart in the text. - - -------------------- - - {#input} - - -------------------- - - - Output the diagnostic in this JSON format (only include these fields, and no others): - {#print_type(output)} - - Output JSON Array: - "# -} diff --git a/fiddle/backend/bootstrap.sh b/fiddle/backend/bootstrap.sh deleted file mode 100755 index 675b64485..000000000 --- a/fiddle/backend/bootstrap.sh +++ /dev/null @@ -1,18 +0,0 @@ -#!/usr/bin/env /bin/bash - -set -euxo pipefail - -echo "Running bootstrap" - -export TERM=xterm -curl -fsSL https://raw.githubusercontent.com/BoundaryML/homebrew-baml/main/install-baml.sh | \ - sed "s/sudo//" | \ - bash - -pip3 install baml flask flask-cors -pip3 install poetry -pip3 install pytest -# poetry install -# pip3 install @boundaryml/baml-core - -# apt install sudo \ No newline at end of file diff --git a/fiddle/backend/poetry.lock b/fiddle/backend/poetry.lock deleted file mode 100644 index b89cae8c5..000000000 --- a/fiddle/backend/poetry.lock +++ /dev/null @@ -1,2072 +0,0 @@ -# This file is automatically @generated by Poetry 1.8.2 and should not be changed by hand. - -[[package]] -name = "aiohttp" -version = "3.9.5" -description = "Async http client/server framework (asyncio)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:fcde4c397f673fdec23e6b05ebf8d4751314fa7c24f93334bf1f1364c1c69ac7"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5d6b3f1fabe465e819aed2c421a6743d8debbde79b6a8600739300630a01bf2c"}, - {file = "aiohttp-3.9.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:6ae79c1bc12c34082d92bf9422764f799aee4746fd7a392db46b7fd357d4a17a"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4d3ebb9e1316ec74277d19c5f482f98cc65a73ccd5430540d6d11682cd857430"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84dabd95154f43a2ea80deffec9cb44d2e301e38a0c9d331cc4aa0166fe28ae3"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c8a02fbeca6f63cb1f0475c799679057fc9268b77075ab7cf3f1c600e81dd46b"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c26959ca7b75ff768e2776d8055bf9582a6267e24556bb7f7bd29e677932be72"}, - {file = "aiohttp-3.9.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:714d4e5231fed4ba2762ed489b4aec07b2b9953cf4ee31e9871caac895a839c0"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:e7a6a8354f1b62e15d48e04350f13e726fa08b62c3d7b8401c0a1314f02e3558"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:c413016880e03e69d166efb5a1a95d40f83d5a3a648d16486592c49ffb76d0db"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:ff84aeb864e0fac81f676be9f4685f0527b660f1efdc40dcede3c251ef1e867f"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:ad7f2919d7dac062f24d6f5fe95d401597fbb015a25771f85e692d043c9d7832"}, - {file = "aiohttp-3.9.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:702e2c7c187c1a498a4e2b03155d52658fdd6fda882d3d7fbb891a5cf108bb10"}, - {file = "aiohttp-3.9.5-cp310-cp310-win32.whl", hash = "sha256:67c3119f5ddc7261d47163ed86d760ddf0e625cd6246b4ed852e82159617b5fb"}, - {file = "aiohttp-3.9.5-cp310-cp310-win_amd64.whl", hash = "sha256:471f0ef53ccedec9995287f02caf0c068732f026455f07db3f01a46e49d76bbb"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:e0ae53e33ee7476dd3d1132f932eeb39bf6125083820049d06edcdca4381f342"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:c088c4d70d21f8ca5c0b8b5403fe84a7bc8e024161febdd4ef04575ef35d474d"}, - {file = "aiohttp-3.9.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:639d0042b7670222f33b0028de6b4e2fad6451462ce7df2af8aee37dcac55424"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f26383adb94da5e7fb388d441bf09c61e5e35f455a3217bfd790c6b6bc64b2ee"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:66331d00fb28dc90aa606d9a54304af76b335ae204d1836f65797d6fe27f1ca2"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4ff550491f5492ab5ed3533e76b8567f4b37bd2995e780a1f46bca2024223233"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f22eb3a6c1080d862befa0a89c380b4dafce29dc6cd56083f630073d102eb595"}, - {file = "aiohttp-3.9.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a81b1143d42b66ffc40a441379387076243ef7b51019204fd3ec36b9f69e77d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:f64fd07515dad67f24b6ea4a66ae2876c01031de91c93075b8093f07c0a2d93d"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:93e22add827447d2e26d67c9ac0161756007f152fdc5210277d00a85f6c92323"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:55b39c8684a46e56ef8c8d24faf02de4a2b2ac60d26cee93bc595651ff545de9"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4715a9b778f4293b9f8ae7a0a7cef9829f02ff8d6277a39d7f40565c737d3771"}, - {file = "aiohttp-3.9.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:afc52b8d969eff14e069a710057d15ab9ac17cd4b6753042c407dcea0e40bf75"}, - {file = "aiohttp-3.9.5-cp311-cp311-win32.whl", hash = "sha256:b3df71da99c98534be076196791adca8819761f0bf6e08e07fd7da25127150d6"}, - {file = "aiohttp-3.9.5-cp311-cp311-win_amd64.whl", hash = "sha256:88e311d98cc0bf45b62fc46c66753a83445f5ab20038bcc1b8a1cc05666f428a"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:c7a4b7a6cf5b6eb11e109a9755fd4fda7d57395f8c575e166d363b9fc3ec4678"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:0a158704edf0abcac8ac371fbb54044f3270bdbc93e254a82b6c82be1ef08f3c"}, - {file = "aiohttp-3.9.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d153f652a687a8e95ad367a86a61e8d53d528b0530ef382ec5aaf533140ed00f"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:82a6a97d9771cb48ae16979c3a3a9a18b600a8505b1115cfe354dfb2054468b4"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:60cdbd56f4cad9f69c35eaac0fbbdf1f77b0ff9456cebd4902f3dd1cf096464c"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8676e8fd73141ded15ea586de0b7cda1542960a7b9ad89b2b06428e97125d4fa"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:da00da442a0e31f1c69d26d224e1efd3a1ca5bcbf210978a2ca7426dfcae9f58"}, - {file = "aiohttp-3.9.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:18f634d540dd099c262e9f887c8bbacc959847cfe5da7a0e2e1cf3f14dbf2daf"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:320e8618eda64e19d11bdb3bd04ccc0a816c17eaecb7e4945d01deee2a22f95f"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:2faa61a904b83142747fc6a6d7ad8fccff898c849123030f8e75d5d967fd4a81"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:8c64a6dc3fe5db7b1b4d2b5cb84c4f677768bdc340611eca673afb7cf416ef5a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:393c7aba2b55559ef7ab791c94b44f7482a07bf7640d17b341b79081f5e5cd1a"}, - {file = "aiohttp-3.9.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:c671dc117c2c21a1ca10c116cfcd6e3e44da7fcde37bf83b2be485ab377b25da"}, - {file = "aiohttp-3.9.5-cp312-cp312-win32.whl", hash = "sha256:5a7ee16aab26e76add4afc45e8f8206c95d1d75540f1039b84a03c3b3800dd59"}, - {file = "aiohttp-3.9.5-cp312-cp312-win_amd64.whl", hash = "sha256:5ca51eadbd67045396bc92a4345d1790b7301c14d1848feaac1d6a6c9289e888"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:694d828b5c41255e54bc2dddb51a9f5150b4eefa9886e38b52605a05d96566e8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:0605cc2c0088fcaae79f01c913a38611ad09ba68ff482402d3410bf59039bfb8"}, - {file = "aiohttp-3.9.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:4558e5012ee03d2638c681e156461d37b7a113fe13970d438d95d10173d25f78"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9dbc053ac75ccc63dc3a3cc547b98c7258ec35a215a92bd9f983e0aac95d3d5b"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4109adee842b90671f1b689901b948f347325045c15f46b39797ae1bf17019de"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a6ea1a5b409a85477fd8e5ee6ad8f0e40bf2844c270955e09360418cfd09abac"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f3c2890ca8c59ee683fd09adf32321a40fe1cf164e3387799efb2acebf090c11"}, - {file = "aiohttp-3.9.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3916c8692dbd9d55c523374a3b8213e628424d19116ac4308e434dbf6d95bbdd"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8d1964eb7617907c792ca00b341b5ec3e01ae8c280825deadbbd678447b127e1"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d5ab8e1f6bee051a4bf6195e38a5c13e5e161cb7bad83d8854524798bd9fcd6e"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:52c27110f3862a1afbcb2af4281fc9fdc40327fa286c4625dfee247c3ba90156"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:7f64cbd44443e80094309875d4f9c71d0401e966d191c3d469cde4642bc2e031"}, - {file = "aiohttp-3.9.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8b4f72fbb66279624bfe83fd5eb6aea0022dad8eec62b71e7bf63ee1caadeafe"}, - {file = "aiohttp-3.9.5-cp38-cp38-win32.whl", hash = "sha256:6380c039ec52866c06d69b5c7aad5478b24ed11696f0e72f6b807cfb261453da"}, - {file = "aiohttp-3.9.5-cp38-cp38-win_amd64.whl", hash = "sha256:da22dab31d7180f8c3ac7c7635f3bcd53808f374f6aa333fe0b0b9e14b01f91a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:1732102949ff6087589408d76cd6dea656b93c896b011ecafff418c9661dc4ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:c6021d296318cb6f9414b48e6a439a7f5d1f665464da507e8ff640848ee2a58a"}, - {file = "aiohttp-3.9.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:239f975589a944eeb1bad26b8b140a59a3a320067fb3cd10b75c3092405a1372"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3b7b30258348082826d274504fbc7c849959f1989d86c29bc355107accec6cfb"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:cd2adf5c87ff6d8b277814a28a535b59e20bfea40a101db6b3bdca7e9926bc24"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e9a3d838441bebcf5cf442700e3963f58b5c33f015341f9ea86dcd7d503c07e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9e3a1ae66e3d0c17cf65c08968a5ee3180c5a95920ec2731f53343fac9bad106"}, - {file = "aiohttp-3.9.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9c69e77370cce2d6df5d12b4e12bdcca60c47ba13d1cbbc8645dd005a20b738b"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:0cbf56238f4bbf49dab8c2dc2e6b1b68502b1e88d335bea59b3f5b9f4c001475"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:d1469f228cd9ffddd396d9948b8c9cd8022b6d1bf1e40c6f25b0fb90b4f893ed"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:45731330e754f5811c314901cebdf19dd776a44b31927fa4b4dbecab9e457b0c"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:3fcb4046d2904378e3aeea1df51f697b0467f2aac55d232c87ba162709478c46"}, - {file = "aiohttp-3.9.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:8cf142aa6c1a751fcb364158fd710b8a9be874b81889c2bd13aa8893197455e2"}, - {file = "aiohttp-3.9.5-cp39-cp39-win32.whl", hash = "sha256:7b179eea70833c8dee51ec42f3b4097bd6370892fa93f510f76762105568cf09"}, - {file = "aiohttp-3.9.5-cp39-cp39-win_amd64.whl", hash = "sha256:38d80498e2e169bc61418ff36170e0aad0cd268da8b38a17c4cf29d254a8b3f1"}, - {file = "aiohttp-3.9.5.tar.gz", hash = "sha256:edea7d15772ceeb29db4aff55e482d4bcfb6ae160ce144f2682de02f6d693551"}, -] - -[package.dependencies] -aiosignal = ">=1.1.2" -async-timeout = {version = ">=4.0,<5.0", markers = "python_version < \"3.11\""} -attrs = ">=17.3.0" -frozenlist = ">=1.1.1" -multidict = ">=4.5,<7.0" -yarl = ">=1.0,<2.0" - -[package.extras] -speedups = ["Brotli", "aiodns", "brotlicffi"] - -[[package]] -name = "aiosignal" -version = "1.3.1" -description = "aiosignal: a list of registered asynchronous callbacks" -optional = false -python-versions = ">=3.7" -files = [ - {file = "aiosignal-1.3.1-py3-none-any.whl", hash = "sha256:f8376fb07dd1e86a584e4fcdec80b36b7f81aac666ebc724e2c090300dd83b17"}, - {file = "aiosignal-1.3.1.tar.gz", hash = "sha256:54cd96e15e1649b75d6c87526a6ff0b6c1b0dd3459f43d9ca11d48c339b68cfc"}, -] - -[package.dependencies] -frozenlist = ">=1.1.0" - -[[package]] -name = "annotated-types" -version = "0.6.0" -description = "Reusable constraint types to use with typing.Annotated" -optional = false -python-versions = ">=3.8" -files = [ - {file = "annotated_types-0.6.0-py3-none-any.whl", hash = "sha256:0641064de18ba7a25dee8f96403ebc39113d0cb953a01429249d5c7564666a43"}, - {file = "annotated_types-0.6.0.tar.gz", hash = "sha256:563339e807e53ffd9c267e99fc6d9ea23eb8443c08f112651963e24e22f84a5d"}, -] - -[[package]] -name = "anthropic" -version = "0.25.7" -description = "The official Python library for the anthropic API" -optional = false -python-versions = ">=3.7" -files = [ - {file = "anthropic-0.25.7-py3-none-any.whl", hash = "sha256:419a276eb20cfb7ddaac03c7e28e4e12df3ace71bcf33071a68c9a03c0dfcbdd"}, - {file = "anthropic-0.25.7.tar.gz", hash = "sha256:e7de4c8ba8e7e8248ad7f05ed9176634780b95b67c678d23915d8964c8a26f4e"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tokenizers = ">=0.13.0" -typing-extensions = ">=4.7,<5" - -[package.extras] -bedrock = ["boto3 (>=1.28.57)", "botocore (>=1.31.57)"] -vertex = ["google-auth (>=2,<3)"] - -[[package]] -name = "anyio" -version = "4.3.0" -description = "High level compatibility layer for multiple asynchronous event loop implementations" -optional = false -python-versions = ">=3.8" -files = [ - {file = "anyio-4.3.0-py3-none-any.whl", hash = "sha256:048e05d0f6caeed70d731f3db756d35dcc1f35747c8c403364a8332c630441b8"}, - {file = "anyio-4.3.0.tar.gz", hash = "sha256:f75253795a87df48568485fd18cdd2a3fa5c4f7c5be8e5e36637733fce06fed6"}, -] - -[package.dependencies] -exceptiongroup = {version = ">=1.0.2", markers = "python_version < \"3.11\""} -idna = ">=2.8" -sniffio = ">=1.1" -typing-extensions = {version = ">=4.1", markers = "python_version < \"3.11\""} - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)", "sphinx-rtd-theme"] -test = ["anyio[trio]", "coverage[toml] (>=7)", "exceptiongroup (>=1.2.0)", "hypothesis (>=4.0)", "psutil (>=5.9)", "pytest (>=7.0)", "pytest-mock (>=3.6.1)", "trustme", "uvloop (>=0.17)"] -trio = ["trio (>=0.23)"] - -[[package]] -name = "async-timeout" -version = "4.0.3" -description = "Timeout context manager for asyncio programs" -optional = false -python-versions = ">=3.7" -files = [ - {file = "async-timeout-4.0.3.tar.gz", hash = "sha256:4640d96be84d82d02ed59ea2b7105a0f7b33abe8703703cd0ab0bf87c427522f"}, - {file = "async_timeout-4.0.3-py3-none-any.whl", hash = "sha256:7405140ff1230c310e51dc27b3145b9092d659ce68ff733fb0cefe3ee42be028"}, -] - -[[package]] -name = "attrs" -version = "23.2.0" -description = "Classes Without Boilerplate" -optional = false -python-versions = ">=3.7" -files = [ - {file = "attrs-23.2.0-py3-none-any.whl", hash = "sha256:99b87a485a5820b23b879f04c2305b44b951b502fd64be915879d77a7e8fc6f1"}, - {file = "attrs-23.2.0.tar.gz", hash = "sha256:935dc3b529c262f6cf76e50877d35a4bd3c1de194fd41f47a2b7ae8f19971f30"}, -] - -[package.extras] -cov = ["attrs[tests]", "coverage[toml] (>=5.3)"] -dev = ["attrs[tests]", "pre-commit"] -docs = ["furo", "myst-parser", "sphinx", "sphinx-notfound-page", "sphinxcontrib-towncrier", "towncrier", "zope-interface"] -tests = ["attrs[tests-no-zope]", "zope-interface"] -tests-mypy = ["mypy (>=1.6)", "pytest-mypy-plugins"] -tests-no-zope = ["attrs[tests-mypy]", "cloudpickle", "hypothesis", "pympler", "pytest (>=4.3.0)", "pytest-xdist[psutil]"] - -[[package]] -name = "baml" -version = "0.19.1" -description = "" -optional = false -python-versions = "<4.0,>=3.8" -files = [ - {file = "baml-0.19.1-py3-none-any.whl", hash = "sha256:dba9e990ce78d14142495f7c16acbe1cd0f1dc87b35255ac6ab0d7e9a2980e05"}, - {file = "baml-0.19.1.tar.gz", hash = "sha256:8743ae77328efd779631649e1d4cdb9fda8674ffd2b28242815da0e834be840e"}, -] - -[package.dependencies] -aiohttp = ">=3.8.3" -anthropic = ">=0.14.0" -baml-core-ffi = "0.1.7" -colorama = ">=0.4.6" -coloredlogs = ">=15.0.1" -json5 = ">=0.9.10" -ollama = ">=0.1.8,<0.2.0" -openai = ">=0.28.1" -opentelemetry-api = ">=1.15.0" -opentelemetry-instrumentation = ">=0.34b0" -opentelemetry-sdk = ">=1.15.0" -packaging = ">=23.2,<24.0" -pydantic = ">=2,<3" -pytest = ">=7.1.3,<8" -pytest-asyncio = ">=0.21.1,<0.22.0" -python-dotenv = ">=0.21.0" -regex = ">=2022.10.31" -tenacity = ">=8.1.0" -typeguard = ">=4.0.0" -types-regex = ">=2023.10.3.0,<2024.0.0.0" -types-requests = ">=2.28.11" - -[[package]] -name = "baml-core-ffi" -version = "0.1.7" -description = "BAML python bindings (pyproject.toml)" -optional = false -python-versions = "*" -files = [ - {file = "baml_core_ffi-0.1.7-cp38-abi3-macosx_10_12_x86_64.whl", hash = "sha256:78b38ae8acf8758c85631c1f049ef71474eb861b4f884eaaeafbb4473310e439"}, - {file = "baml_core_ffi-0.1.7-cp38-abi3-macosx_11_0_arm64.whl", hash = "sha256:bf3e9d73c772d424a5326c3c457332b78da23fedb97c15b614dc668d2a858f03"}, - {file = "baml_core_ffi-0.1.7-cp38-abi3-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c2e1c4a14d2605bd46f8c0dcd2f42d9854d58a027f84bdbc63e267e43cfbecc8"}, - {file = "baml_core_ffi-0.1.7-cp38-abi3-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:2e9acf6ea8b0b9f3bd45ab46377a2ba5c7ccdbe463f73e45561a0e0c3a47c10c"}, - {file = "baml_core_ffi-0.1.7-cp38-abi3-win_amd64.whl", hash = "sha256:10abe0796e52650b24df6ee967298f4a21b4b4f2f104e178809d322dc2aa2e0e"}, -] - -[[package]] -name = "certifi" -version = "2024.2.2" -description = "Python package for providing Mozilla's CA Bundle." -optional = false -python-versions = ">=3.6" -files = [ - {file = "certifi-2024.2.2-py3-none-any.whl", hash = "sha256:dc383c07b76109f368f6106eee2b593b04a011ea4d55f652c6ca24a754d1cdd1"}, - {file = "certifi-2024.2.2.tar.gz", hash = "sha256:0569859f95fc761b18b45ef421b1290a0f65f147e92a1e5eb3e635f9a5e4e66f"}, -] - -[[package]] -name = "charset-normalizer" -version = "3.3.2" -description = "The Real First Universal Charset Detector. Open, modern and actively maintained alternative to Chardet." -optional = false -python-versions = ">=3.7.0" -files = [ - {file = "charset-normalizer-3.3.2.tar.gz", hash = "sha256:f30c3cb33b24454a82faecaf01b19c18562b1e89558fb6c56de4d9118a032fd5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:25baf083bf6f6b341f4121c2f3c548875ee6f5339300e08be3f2b2ba1721cdd3"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:06435b539f889b1f6f4ac1758871aae42dc3a8c0e24ac9e60c2384973ad73027"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:9063e24fdb1e498ab71cb7419e24622516c4a04476b17a2dab57e8baa30d6e03"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6897af51655e3691ff853668779c7bad41579facacf5fd7253b0133308cf000d"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1d3193f4a680c64b4b6a9115943538edb896edc190f0b222e73761716519268e"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cd70574b12bb8a4d2aaa0094515df2463cb429d8536cfb6c7ce983246983e5a6"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8465322196c8b4d7ab6d1e049e4c5cb460d0394da4a27d23cc242fbf0034b6b5"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:a9a8e9031d613fd2009c182b69c7b2c1ef8239a0efb1df3f7c8da66d5dd3d537"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:beb58fe5cdb101e3a055192ac291b7a21e3b7ef4f67fa1d74e331a7f2124341c"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e06ed3eb3218bc64786f7db41917d4e686cc4856944f53d5bdf83a6884432e12"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:2e81c7b9c8979ce92ed306c249d46894776a909505d8f5a4ba55b14206e3222f"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:572c3763a264ba47b3cf708a44ce965d98555f618ca42c926a9c1616d8f34269"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:fd1abc0d89e30cc4e02e4064dc67fcc51bd941eb395c502aac3ec19fab46b519"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win32.whl", hash = "sha256:3d47fa203a7bd9c5b6cee4736ee84ca03b8ef23193c0d1ca99b5089f72645c73"}, - {file = "charset_normalizer-3.3.2-cp310-cp310-win_amd64.whl", hash = "sha256:10955842570876604d404661fbccbc9c7e684caf432c09c715ec38fbae45ae09"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:802fe99cca7457642125a8a88a084cef28ff0cf9407060f7b93dca5aa25480db"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:573f6eac48f4769d667c4442081b1794f52919e7edada77495aaed9236d13a96"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:549a3a73da901d5bc3ce8d24e0600d1fa85524c10287f6004fbab87672bf3e1e"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f27273b60488abe721a075bcca6d7f3964f9f6f067c8c4c605743023d7d3944f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:1ceae2f17a9c33cb48e3263960dc5fc8005351ee19db217e9b1bb15d28c02574"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:65f6f63034100ead094b8744b3b97965785388f308a64cf8d7c34f2f2e5be0c4"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:753f10e867343b4511128c6ed8c82f7bec3bd026875576dfd88483c5c73b2fd8"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:4a78b2b446bd7c934f5dcedc588903fb2f5eec172f3d29e52a9096a43722adfc"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:e537484df0d8f426ce2afb2d0f8e1c3d0b114b83f8850e5f2fbea0e797bd82ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:eb6904c354526e758fda7167b33005998fb68c46fbc10e013ca97f21ca5c8887"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:deb6be0ac38ece9ba87dea880e438f25ca3eddfac8b002a2ec3d9183a454e8ae"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:4ab2fe47fae9e0f9dee8c04187ce5d09f48eabe611be8259444906793ab7cbce"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:80402cd6ee291dcb72644d6eac93785fe2c8b9cb30893c1af5b8fdd753b9d40f"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win32.whl", hash = "sha256:7cd13a2e3ddeed6913a65e66e94b51d80a041145a026c27e6bb76c31a853c6ab"}, - {file = "charset_normalizer-3.3.2-cp311-cp311-win_amd64.whl", hash = "sha256:663946639d296df6a2bb2aa51b60a2454ca1cb29835324c640dafb5ff2131a77"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0b2b64d2bb6d3fb9112bafa732def486049e63de9618b5843bcdd081d8144cd8"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:ddbb2551d7e0102e7252db79ba445cdab71b26640817ab1e3e3648dad515003b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:55086ee1064215781fff39a1af09518bc9255b50d6333f2e4c74ca09fac6a8f6"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8f4a014bc36d3c57402e2977dada34f9c12300af536839dc38c0beab8878f38a"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a10af20b82360ab00827f916a6058451b723b4e65030c5a18577c8b2de5b3389"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8d756e44e94489e49571086ef83b2bb8ce311e730092d2c34ca8f7d925cb20aa"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:90d558489962fd4918143277a773316e56c72da56ec7aa3dc3dbbe20fdfed15b"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:6ac7ffc7ad6d040517be39eb591cac5ff87416c2537df6ba3cba3bae290c0fed"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:7ed9e526742851e8d5cc9e6cf41427dfc6068d4f5a3bb03659444b4cabf6bc26"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:8bdb58ff7ba23002a4c5808d608e4e6c687175724f54a5dade5fa8c67b604e4d"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:6b3251890fff30ee142c44144871185dbe13b11bab478a88887a639655be1068"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:b4a23f61ce87adf89be746c8a8974fe1c823c891d8f86eb218bb957c924bb143"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:efcb3f6676480691518c177e3b465bcddf57cea040302f9f4e6e191af91174d4"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win32.whl", hash = "sha256:d965bba47ddeec8cd560687584e88cf699fd28f192ceb452d1d7ee807c5597b7"}, - {file = "charset_normalizer-3.3.2-cp312-cp312-win_amd64.whl", hash = "sha256:96b02a3dc4381e5494fad39be677abcb5e6634bf7b4fa83a6dd3112607547001"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:95f2a5796329323b8f0512e09dbb7a1860c46a39da62ecb2324f116fa8fdc85c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c002b4ffc0be611f0d9da932eb0f704fe2602a9a949d1f738e4c34c75b0863d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:a981a536974bbc7a512cf44ed14938cf01030a99e9b3a06dd59578882f06f985"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3287761bc4ee9e33561a7e058c72ac0938c4f57fe49a09eae428fd88aafe7bb6"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:42cb296636fcc8b0644486d15c12376cb9fa75443e00fb25de0b8602e64c1714"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a55554a2fa0d408816b3b5cedf0045f4b8e1a6065aec45849de2d6f3f8e9786"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:c083af607d2515612056a31f0a8d9e0fcb5876b7bfc0abad3ecd275bc4ebc2d5"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:87d1351268731db79e0f8e745d92493ee2841c974128ef629dc518b937d9194c"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:bd8f7df7d12c2db9fab40bdd87a7c09b1530128315d047a086fa3ae3435cb3a8"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:c180f51afb394e165eafe4ac2936a14bee3eb10debc9d9e4db8958fe36afe711"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:8c622a5fe39a48f78944a87d4fb8a53ee07344641b0562c540d840748571b811"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win32.whl", hash = "sha256:db364eca23f876da6f9e16c9da0df51aa4f104a972735574842618b8c6d999d4"}, - {file = "charset_normalizer-3.3.2-cp37-cp37m-win_amd64.whl", hash = "sha256:86216b5cee4b06df986d214f664305142d9c76df9b6512be2738aa72a2048f99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:6463effa3186ea09411d50efc7d85360b38d5f09b870c48e4600f63af490e56a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:6c4caeef8fa63d06bd437cd4bdcf3ffefe6738fb1b25951440d80dc7df8c03ac"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:37e55c8e51c236f95b033f6fb391d7d7970ba5fe7ff453dad675e88cf303377a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb69256e180cb6c8a894fee62b3afebae785babc1ee98b81cdf68bbca1987f33"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ae5f4161f18c61806f411a13b0310bea87f987c7d2ecdbdaad0e94eb2e404238"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b2b0a0c0517616b6869869f8c581d4eb2dd83a4d79e0ebcb7d373ef9956aeb0a"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:45485e01ff4d3630ec0d9617310448a8702f70e9c01906b0d0118bdf9d124cf2"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:eb00ed941194665c332bf8e078baf037d6c35d7c4f3102ea2d4f16ca94a26dc8"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:2127566c664442652f024c837091890cb1942c30937add288223dc895793f898"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:a50aebfa173e157099939b17f18600f72f84eed3049e743b68ad15bd69b6bf99"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:4d0d1650369165a14e14e1e47b372cfcb31d6ab44e6e33cb2d4e57265290044d"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:923c0c831b7cfcb071580d3f46c4baf50f174be571576556269530f4bbd79d04"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06a81e93cd441c56a9b65d8e1d043daeb97a3d0856d177d5c90ba85acb3db087"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win32.whl", hash = "sha256:6ef1d82a3af9d3eecdba2321dc1b3c238245d890843e040e41e470ffa64c3e25"}, - {file = "charset_normalizer-3.3.2-cp38-cp38-win_amd64.whl", hash = "sha256:eb8821e09e916165e160797a6c17edda0679379a4be5c716c260e836e122f54b"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:c235ebd9baae02f1b77bcea61bce332cb4331dc3617d254df3323aa01ab47bd4"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:5b4c145409bef602a690e7cfad0a15a55c13320ff7a3ad7ca59c13bb8ba4d45d"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:68d1f8a9e9e37c1223b656399be5d6b448dea850bed7d0f87a8311f1ff3dabb0"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:22afcb9f253dac0696b5a4be4a1c0f8762f8239e21b99680099abd9b2b1b2269"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e27ad930a842b4c5eb8ac0016b0a54f5aebbe679340c26101df33424142c143c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1f79682fbe303db92bc2b1136016a38a42e835d932bab5b3b1bfcfbf0640e519"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b261ccdec7821281dade748d088bb6e9b69e6d15b30652b74cbbac25e280b796"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:122c7fa62b130ed55f8f285bfd56d5f4b4a5b503609d181f9ad85e55c89f4185"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:d0eccceffcb53201b5bfebb52600a5fb483a20b61da9dbc885f8b103cbe7598c"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:9f96df6923e21816da7e0ad3fd47dd8f94b2a5ce594e00677c0013018b813458"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:7f04c839ed0b6b98b1a7501a002144b76c18fb1c1850c8b98d458ac269e26ed2"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:34d1c8da1e78d2e001f363791c98a272bb734000fcef47a491c1e3b0505657a8"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ff8fa367d09b717b2a17a052544193ad76cd49979c805768879cb63d9ca50561"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win32.whl", hash = "sha256:aed38f6e4fb3f5d6bf81bfa990a07806be9d83cf7bacef998ab1a9bd660a581f"}, - {file = "charset_normalizer-3.3.2-cp39-cp39-win_amd64.whl", hash = "sha256:b01b88d45a6fcb69667cd6d2f7a9aeb4bf53760d7fc536bf679ec94fe9f3ff3d"}, - {file = "charset_normalizer-3.3.2-py3-none-any.whl", hash = "sha256:3e4d1f6587322d2788836a99c69062fbb091331ec940e02d12d179c1d53e25fc"}, -] - -[[package]] -name = "click" -version = "8.1.7" -description = "Composable command line interface toolkit" -optional = false -python-versions = ">=3.7" -files = [ - {file = "click-8.1.7-py3-none-any.whl", hash = "sha256:ae74fb96c20a0277a1d615f1e4d73c8414f5a98db8b799a7931d1582f3390c28"}, - {file = "click-8.1.7.tar.gz", hash = "sha256:ca9853ad459e787e2192211578cc907e7594e294c7ccc834310722b41b9ca6de"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[[package]] -name = "colorama" -version = "0.4.6" -description = "Cross-platform colored terminal text." -optional = false -python-versions = "!=3.0.*,!=3.1.*,!=3.2.*,!=3.3.*,!=3.4.*,!=3.5.*,!=3.6.*,>=2.7" -files = [ - {file = "colorama-0.4.6-py2.py3-none-any.whl", hash = "sha256:4f1d9991f5acc0ca119f9d443620b77f9d6b33703e51011c16baf57afb285fc6"}, - {file = "colorama-0.4.6.tar.gz", hash = "sha256:08695f5cb7ed6e0531a20572697297273c47b8cae5a63ffc6d6ed5c201be6e44"}, -] - -[[package]] -name = "coloredlogs" -version = "15.0.1" -description = "Colored terminal output for Python's logging module" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "coloredlogs-15.0.1-py2.py3-none-any.whl", hash = "sha256:612ee75c546f53e92e70049c9dbfcc18c935a2b9a53b66085ce9ef6a6e5c0934"}, - {file = "coloredlogs-15.0.1.tar.gz", hash = "sha256:7c991aa71a4577af2f82600d8f8f3a89f936baeaf9b50a9c197da014e5bf16b0"}, -] - -[package.dependencies] -humanfriendly = ">=9.1" - -[package.extras] -cron = ["capturer (>=2.4)"] - -[[package]] -name = "deprecated" -version = "1.2.14" -description = "Python @deprecated decorator to deprecate old python classes, functions or methods." -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*" -files = [ - {file = "Deprecated-1.2.14-py2.py3-none-any.whl", hash = "sha256:6fac8b097794a90302bdbb17b9b815e732d3c4720583ff1b198499d78470466c"}, - {file = "Deprecated-1.2.14.tar.gz", hash = "sha256:e5323eb936458dccc2582dc6f9c322c852a775a27065ff2b0c4970b9d53d01b3"}, -] - -[package.dependencies] -wrapt = ">=1.10,<2" - -[package.extras] -dev = ["PyTest", "PyTest-Cov", "bump2version (<1)", "sphinx (<2)", "tox"] - -[[package]] -name = "distro" -version = "1.9.0" -description = "Distro - an OS platform information API" -optional = false -python-versions = ">=3.6" -files = [ - {file = "distro-1.9.0-py3-none-any.whl", hash = "sha256:7bffd925d65168f85027d8da9af6bddab658135b840670a223589bc0c8ef02b2"}, - {file = "distro-1.9.0.tar.gz", hash = "sha256:2fa77c6fd8940f116ee1d6b94a2f90b13b5ea8d019b98bc8bafdcabcdd9bdbed"}, -] - -[[package]] -name = "exceptiongroup" -version = "1.2.1" -description = "Backport of PEP 654 (exception groups)" -optional = false -python-versions = ">=3.7" -files = [ - {file = "exceptiongroup-1.2.1-py3-none-any.whl", hash = "sha256:5258b9ed329c5bbdd31a309f53cbfb0b155341807f6ff7606a1e801a891b29ad"}, - {file = "exceptiongroup-1.2.1.tar.gz", hash = "sha256:a4785e48b045528f5bfe627b6ad554ff32def154f42372786903b7abcfe1aa16"}, -] - -[package.extras] -test = ["pytest (>=6)"] - -[[package]] -name = "fastapi" -version = "0.110.3" -description = "FastAPI framework, high performance, easy to learn, fast to code, ready for production" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fastapi-0.110.3-py3-none-any.whl", hash = "sha256:fd7600612f755e4050beb74001310b5a7e1796d149c2ee363124abdfa0289d32"}, - {file = "fastapi-0.110.3.tar.gz", hash = "sha256:555700b0159379e94fdbfc6bb66a0f1c43f4cf7060f25239af3d84b63a656626"}, -] - -[package.dependencies] -pydantic = ">=1.7.4,<1.8 || >1.8,<1.8.1 || >1.8.1,<2.0.0 || >2.0.0,<2.0.1 || >2.0.1,<2.1.0 || >2.1.0,<3.0.0" -starlette = ">=0.37.2,<0.38.0" -typing-extensions = ">=4.8.0" - -[package.extras] -all = ["email_validator (>=2.0.0)", "httpx (>=0.23.0)", "itsdangerous (>=1.1.0)", "jinja2 (>=2.11.2)", "orjson (>=3.2.1)", "pydantic-extra-types (>=2.0.0)", "pydantic-settings (>=2.0.0)", "python-multipart (>=0.0.7)", "pyyaml (>=5.3.1)", "ujson (>=4.0.1,!=4.0.2,!=4.1.0,!=4.2.0,!=4.3.0,!=5.0.0,!=5.1.0)", "uvicorn[standard] (>=0.12.0)"] - -[[package]] -name = "filelock" -version = "3.14.0" -description = "A platform independent file lock." -optional = false -python-versions = ">=3.8" -files = [ - {file = "filelock-3.14.0-py3-none-any.whl", hash = "sha256:43339835842f110ca7ae60f1e1c160714c5a6afd15a2873419ab185334975c0f"}, - {file = "filelock-3.14.0.tar.gz", hash = "sha256:6ea72da3be9b8c82afd3edcf99f2fffbb5076335a5ae4d03248bb5b6c3eae78a"}, -] - -[package.extras] -docs = ["furo (>=2023.9.10)", "sphinx (>=7.2.6)", "sphinx-autodoc-typehints (>=1.25.2)"] -testing = ["covdefaults (>=2.3)", "coverage (>=7.3.2)", "diff-cover (>=8.0.1)", "pytest (>=7.4.3)", "pytest-cov (>=4.1)", "pytest-mock (>=3.12)", "pytest-timeout (>=2.2)"] -typing = ["typing-extensions (>=4.8)"] - -[[package]] -name = "frozenlist" -version = "1.4.1" -description = "A list-like structure which implements collections.abc.MutableSequence" -optional = false -python-versions = ">=3.8" -files = [ - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:f9aa1878d1083b276b0196f2dfbe00c9b7e752475ed3b682025ff20c1c1f51ac"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:29acab3f66f0f24674b7dc4736477bcd4bc3ad4b896f5f45379a67bce8b96868"}, - {file = "frozenlist-1.4.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:74fb4bee6880b529a0c6560885fce4dc95936920f9f20f53d99a213f7bf66776"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:590344787a90ae57d62511dd7c736ed56b428f04cd8c161fcc5e7232c130c69a"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:068b63f23b17df8569b7fdca5517edef76171cf3897eb68beb01341131fbd2ad"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:5c849d495bf5154cd8da18a9eb15db127d4dba2968d88831aff6f0331ea9bd4c"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9750cc7fe1ae3b1611bb8cfc3f9ec11d532244235d75901fb6b8e42ce9229dfe"}, - {file = "frozenlist-1.4.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a9b2de4cf0cdd5bd2dee4c4f63a653c61d2408055ab77b151c1957f221cabf2a"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0633c8d5337cb5c77acbccc6357ac49a1770b8c487e5b3505c57b949b4b82e98"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:27657df69e8801be6c3638054e202a135c7f299267f1a55ed3a598934f6c0d75"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:f9a3ea26252bd92f570600098783d1371354d89d5f6b7dfd87359d669f2109b5"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:4f57dab5fe3407b6c0c1cc907ac98e8a189f9e418f3b6e54d65a718aaafe3950"}, - {file = "frozenlist-1.4.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:e02a0e11cf6597299b9f3bbd3f93d79217cb90cfd1411aec33848b13f5c656cc"}, - {file = "frozenlist-1.4.1-cp310-cp310-win32.whl", hash = "sha256:a828c57f00f729620a442881cc60e57cfcec6842ba38e1b19fd3e47ac0ff8dc1"}, - {file = "frozenlist-1.4.1-cp310-cp310-win_amd64.whl", hash = "sha256:f56e2333dda1fe0f909e7cc59f021eba0d2307bc6f012a1ccf2beca6ba362439"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:a0cb6f11204443f27a1628b0e460f37fb30f624be6051d490fa7d7e26d4af3d0"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b46c8ae3a8f1f41a0d2ef350c0b6e65822d80772fe46b653ab6b6274f61d4a49"}, - {file = "frozenlist-1.4.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:fde5bd59ab5357e3853313127f4d3565fc7dad314a74d7b5d43c22c6a5ed2ced"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:722e1124aec435320ae01ee3ac7bec11a5d47f25d0ed6328f2273d287bc3abb0"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2471c201b70d58a0f0c1f91261542a03d9a5e088ed3dc6c160d614c01649c106"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c757a9dd70d72b076d6f68efdbb9bc943665ae954dad2801b874c8c69e185068"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f146e0911cb2f1da549fc58fc7bcd2b836a44b79ef871980d605ec392ff6b0d2"}, - {file = "frozenlist-1.4.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:4f9c515e7914626b2a2e1e311794b4c35720a0be87af52b79ff8e1429fc25f19"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:c302220494f5c1ebeb0912ea782bcd5e2f8308037b3c7553fad0e48ebad6ad82"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:442acde1e068288a4ba7acfe05f5f343e19fac87bfc96d89eb886b0363e977ec"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:1b280e6507ea8a4fa0c0a7150b4e526a8d113989e28eaaef946cc77ffd7efc0a"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:fe1a06da377e3a1062ae5fe0926e12b84eceb8a50b350ddca72dc85015873f74"}, - {file = "frozenlist-1.4.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:db9e724bebd621d9beca794f2a4ff1d26eed5965b004a97f1f1685a173b869c2"}, - {file = "frozenlist-1.4.1-cp311-cp311-win32.whl", hash = "sha256:e774d53b1a477a67838a904131c4b0eef6b3d8a651f8b138b04f748fccfefe17"}, - {file = "frozenlist-1.4.1-cp311-cp311-win_amd64.whl", hash = "sha256:fb3c2db03683b5767dedb5769b8a40ebb47d6f7f45b1b3e3b4b51ec8ad9d9825"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:1979bc0aeb89b33b588c51c54ab0161791149f2461ea7c7c946d95d5f93b56ae"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cc7b01b3754ea68a62bd77ce6020afaffb44a590c2289089289363472d13aedb"}, - {file = "frozenlist-1.4.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:c9c92be9fd329ac801cc420e08452b70e7aeab94ea4233a4804f0915c14eba9b"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5c3894db91f5a489fc8fa6a9991820f368f0b3cbdb9cd8849547ccfab3392d86"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:ba60bb19387e13597fb059f32cd4d59445d7b18b69a745b8f8e5db0346f33480"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:8aefbba5f69d42246543407ed2461db31006b0f76c4e32dfd6f42215a2c41d09"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:780d3a35680ced9ce682fbcf4cb9c2bad3136eeff760ab33707b71db84664e3a"}, - {file = "frozenlist-1.4.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9acbb16f06fe7f52f441bb6f413ebae6c37baa6ef9edd49cdd567216da8600cd"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:23b701e65c7b36e4bf15546a89279bd4d8675faabc287d06bbcfac7d3c33e1e6"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:3e0153a805a98f5ada7e09826255ba99fb4f7524bb81bf6b47fb702666484ae1"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:dd9b1baec094d91bf36ec729445f7769d0d0cf6b64d04d86e45baf89e2b9059b"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:1a4471094e146b6790f61b98616ab8e44f72661879cc63fa1049d13ef711e71e"}, - {file = "frozenlist-1.4.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:5667ed53d68d91920defdf4035d1cdaa3c3121dc0b113255124bcfada1cfa1b8"}, - {file = "frozenlist-1.4.1-cp312-cp312-win32.whl", hash = "sha256:beee944ae828747fd7cb216a70f120767fc9f4f00bacae8543c14a6831673f89"}, - {file = "frozenlist-1.4.1-cp312-cp312-win_amd64.whl", hash = "sha256:64536573d0a2cb6e625cf309984e2d873979709f2cf22839bf2d61790b448ad5"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:20b51fa3f588ff2fe658663db52a41a4f7aa6c04f6201449c6c7c476bd255c0d"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:410478a0c562d1a5bcc2f7ea448359fcb050ed48b3c6f6f4f18c313a9bdb1826"}, - {file = "frozenlist-1.4.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:c6321c9efe29975232da3bd0af0ad216800a47e93d763ce64f291917a381b8eb"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:48f6a4533887e189dae092f1cf981f2e3885175f7a0f33c91fb5b7b682b6bab6"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6eb73fa5426ea69ee0e012fb59cdc76a15b1283d6e32e4f8dc4482ec67d1194d"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fbeb989b5cc29e8daf7f976b421c220f1b8c731cbf22b9130d8815418ea45887"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:32453c1de775c889eb4e22f1197fe3bdfe457d16476ea407472b9442e6295f7a"}, - {file = "frozenlist-1.4.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:693945278a31f2086d9bf3df0fe8254bbeaef1fe71e1351c3bd730aa7d31c41b"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1d0ce09d36d53bbbe566fe296965b23b961764c0bcf3ce2fa45f463745c04701"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:3a670dc61eb0d0eb7080890c13de3066790f9049b47b0de04007090807c776b0"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:dca69045298ce5c11fd539682cff879cc1e664c245d1c64da929813e54241d11"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a06339f38e9ed3a64e4c4e43aec7f59084033647f908e4259d279a52d3757d09"}, - {file = "frozenlist-1.4.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:b7f2f9f912dca3934c1baec2e4585a674ef16fe00218d833856408c48d5beee7"}, - {file = "frozenlist-1.4.1-cp38-cp38-win32.whl", hash = "sha256:e7004be74cbb7d9f34553a5ce5fb08be14fb33bc86f332fb71cbe5216362a497"}, - {file = "frozenlist-1.4.1-cp38-cp38-win_amd64.whl", hash = "sha256:5a7d70357e7cee13f470c7883a063aae5fe209a493c57d86eb7f5a6f910fae09"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:bfa4a17e17ce9abf47a74ae02f32d014c5e9404b6d9ac7f729e01562bbee601e"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:b7e3ed87d4138356775346e6845cccbe66cd9e207f3cd11d2f0b9fd13681359d"}, - {file = "frozenlist-1.4.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c99169d4ff810155ca50b4da3b075cbde79752443117d89429595c2e8e37fed8"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:edb678da49d9f72c9f6c609fbe41a5dfb9a9282f9e6a2253d5a91e0fc382d7c0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6db4667b187a6742b33afbbaf05a7bc551ffcf1ced0000a571aedbb4aa42fc7b"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55fdc093b5a3cb41d420884cdaf37a1e74c3c37a31f46e66286d9145d2063bd0"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:82e8211d69a4f4bc360ea22cd6555f8e61a1bd211d1d5d39d3d228b48c83a897"}, - {file = "frozenlist-1.4.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:89aa2c2eeb20957be2d950b85974b30a01a762f3308cd02bb15e1ad632e22dc7"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9d3e0c25a2350080e9319724dede4f31f43a6c9779be48021a7f4ebde8b2d742"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7268252af60904bf52c26173cbadc3a071cece75f873705419c8681f24d3edea"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:0c250a29735d4f15321007fb02865f0e6b6a41a6b88f1f523ca1596ab5f50bd5"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:96ec70beabbd3b10e8bfe52616a13561e58fe84c0101dd031dc78f250d5128b9"}, - {file = "frozenlist-1.4.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:23b2d7679b73fe0e5a4560b672a39f98dfc6f60df63823b0a9970525325b95f6"}, - {file = "frozenlist-1.4.1-cp39-cp39-win32.whl", hash = "sha256:a7496bfe1da7fb1a4e1cc23bb67c58fab69311cc7d32b5a99c2007b4b2a0e932"}, - {file = "frozenlist-1.4.1-cp39-cp39-win_amd64.whl", hash = "sha256:e6a20a581f9ce92d389a8c7d7c3dd47c81fd5d6e655c8dddf341e14aa48659d0"}, - {file = "frozenlist-1.4.1-py3-none-any.whl", hash = "sha256:04ced3e6a46b4cfffe20f9ae482818e34eba9b5fb0ce4056e4cc9b6e212d09b7"}, - {file = "frozenlist-1.4.1.tar.gz", hash = "sha256:c037a86e8513059a2613aaba4d817bb90b9d9b6b69aace3ce9c877e8c8ed402b"}, -] - -[[package]] -name = "fsspec" -version = "2024.3.1" -description = "File-system specification" -optional = false -python-versions = ">=3.8" -files = [ - {file = "fsspec-2024.3.1-py3-none-any.whl", hash = "sha256:918d18d41bf73f0e2b261824baeb1b124bcf771767e3a26425cd7dec3332f512"}, - {file = "fsspec-2024.3.1.tar.gz", hash = "sha256:f39780e282d7d117ffb42bb96992f8a90795e4d0fb0f661a70ca39fe9c43ded9"}, -] - -[package.extras] -abfs = ["adlfs"] -adl = ["adlfs"] -arrow = ["pyarrow (>=1)"] -dask = ["dask", "distributed"] -devel = ["pytest", "pytest-cov"] -dropbox = ["dropbox", "dropboxdrivefs", "requests"] -full = ["adlfs", "aiohttp (!=4.0.0a0,!=4.0.0a1)", "dask", "distributed", "dropbox", "dropboxdrivefs", "fusepy", "gcsfs", "libarchive-c", "ocifs", "panel", "paramiko", "pyarrow (>=1)", "pygit2", "requests", "s3fs", "smbprotocol", "tqdm"] -fuse = ["fusepy"] -gcs = ["gcsfs"] -git = ["pygit2"] -github = ["requests"] -gs = ["gcsfs"] -gui = ["panel"] -hdfs = ["pyarrow (>=1)"] -http = ["aiohttp (!=4.0.0a0,!=4.0.0a1)"] -libarchive = ["libarchive-c"] -oci = ["ocifs"] -s3 = ["s3fs"] -sftp = ["paramiko"] -smb = ["smbprotocol"] -ssh = ["paramiko"] -tqdm = ["tqdm"] - -[[package]] -name = "h11" -version = "0.14.0" -description = "A pure-Python, bring-your-own-I/O implementation of HTTP/1.1" -optional = false -python-versions = ">=3.7" -files = [ - {file = "h11-0.14.0-py3-none-any.whl", hash = "sha256:e3fe4ac4b851c468cc8363d500db52c2ead036020723024a109d37346efaa761"}, - {file = "h11-0.14.0.tar.gz", hash = "sha256:8f19fbbe99e72420ff35c00b27a34cb9937e902a8b810e2c88300c6f0a3b699d"}, -] - -[[package]] -name = "httpcore" -version = "1.0.5" -description = "A minimal low-level HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpcore-1.0.5-py3-none-any.whl", hash = "sha256:421f18bac248b25d310f3cacd198d55b8e6125c107797b609ff9b7a6ba7991b5"}, - {file = "httpcore-1.0.5.tar.gz", hash = "sha256:34a38e2f9291467ee3b44e89dd52615370e152954ba21721378a87b2960f7a61"}, -] - -[package.dependencies] -certifi = "*" -h11 = ">=0.13,<0.15" - -[package.extras] -asyncio = ["anyio (>=4.0,<5.0)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] -trio = ["trio (>=0.22.0,<0.26.0)"] - -[[package]] -name = "httptools" -version = "0.6.1" -description = "A collection of framework independent HTTP protocol utils." -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d2f6c3c4cb1948d912538217838f6e9960bc4a521d7f9b323b3da579cd14532f"}, - {file = "httptools-0.6.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:00d5d4b68a717765b1fabfd9ca755bd12bf44105eeb806c03d1962acd9b8e563"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:639dc4f381a870c9ec860ce5c45921db50205a37cc3334e756269736ff0aac58"}, - {file = "httptools-0.6.1-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e57997ac7fb7ee43140cc03664de5f268813a481dff6245e0075925adc6aa185"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:0ac5a0ae3d9f4fe004318d64b8a854edd85ab76cffbf7ef5e32920faef62f142"}, - {file = "httptools-0.6.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:3f30d3ce413088a98b9db71c60a6ada2001a08945cb42dd65a9a9fe228627658"}, - {file = "httptools-0.6.1-cp310-cp310-win_amd64.whl", hash = "sha256:1ed99a373e327f0107cb513b61820102ee4f3675656a37a50083eda05dc9541b"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:7a7ea483c1a4485c71cb5f38be9db078f8b0e8b4c4dc0210f531cdd2ddac1ef1"}, - {file = "httptools-0.6.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:85ed077c995e942b6f1b07583e4eb0a8d324d418954fc6af913d36db7c05a5a0"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8b0bb634338334385351a1600a73e558ce619af390c2b38386206ac6a27fecfc"}, - {file = "httptools-0.6.1-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7d9ceb2c957320def533671fc9c715a80c47025139c8d1f3797477decbc6edd2"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:4f0f8271c0a4db459f9dc807acd0eadd4839934a4b9b892f6f160e94da309837"}, - {file = "httptools-0.6.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:6a4f5ccead6d18ec072ac0b84420e95d27c1cdf5c9f1bc8fbd8daf86bd94f43d"}, - {file = "httptools-0.6.1-cp311-cp311-win_amd64.whl", hash = "sha256:5cceac09f164bcba55c0500a18fe3c47df29b62353198e4f37bbcc5d591172c3"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:75c8022dca7935cba14741a42744eee13ba05db00b27a4b940f0d646bd4d56d0"}, - {file = "httptools-0.6.1-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:48ed8129cd9a0d62cf4d1575fcf90fb37e3ff7d5654d3a5814eb3d55f36478c2"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f58e335a1402fb5a650e271e8c2d03cfa7cea46ae124649346d17bd30d59c90"}, - {file = "httptools-0.6.1-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:93ad80d7176aa5788902f207a4e79885f0576134695dfb0fefc15b7a4648d503"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:9bb68d3a085c2174c2477eb3ffe84ae9fb4fde8792edb7bcd09a1d8467e30a84"}, - {file = "httptools-0.6.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:b512aa728bc02354e5ac086ce76c3ce635b62f5fbc32ab7082b5e582d27867bb"}, - {file = "httptools-0.6.1-cp312-cp312-win_amd64.whl", hash = "sha256:97662ce7fb196c785344d00d638fc9ad69e18ee4bfb4000b35a52efe5adcc949"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:8e216a038d2d52ea13fdd9b9c9c7459fb80d78302b257828285eca1c773b99b3"}, - {file = "httptools-0.6.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:3e802e0b2378ade99cd666b5bffb8b2a7cc8f3d28988685dc300469ea8dd86cb"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4bd3e488b447046e386a30f07af05f9b38d3d368d1f7b4d8f7e10af85393db97"}, - {file = "httptools-0.6.1-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe467eb086d80217b7584e61313ebadc8d187a4d95bb62031b7bab4b205c3ba3"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3c3b214ce057c54675b00108ac42bacf2ab8f85c58e3f324a4e963bbc46424f4"}, - {file = "httptools-0.6.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8ae5b97f690badd2ca27cbf668494ee1b6d34cf1c464271ef7bfa9ca6b83ffaf"}, - {file = "httptools-0.6.1-cp38-cp38-win_amd64.whl", hash = "sha256:405784577ba6540fa7d6ff49e37daf104e04f4b4ff2d1ac0469eaa6a20fde084"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:95fb92dd3649f9cb139e9c56604cc2d7c7bf0fc2e7c8d7fbd58f96e35eddd2a3"}, - {file = "httptools-0.6.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:dcbab042cc3ef272adc11220517278519adf8f53fd3056d0e68f0a6f891ba94e"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0cf2372e98406efb42e93bfe10f2948e467edfd792b015f1b4ecd897903d3e8d"}, - {file = "httptools-0.6.1-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:678fcbae74477a17d103b7cae78b74800d795d702083867ce160fc202104d0da"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:e0b281cf5a125c35f7f6722b65d8542d2e57331be573e9e88bc8b0115c4a7a81"}, - {file = "httptools-0.6.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:95658c342529bba4e1d3d2b1a874db16c7cca435e8827422154c9da76ac4e13a"}, - {file = "httptools-0.6.1-cp39-cp39-win_amd64.whl", hash = "sha256:7ebaec1bf683e4bf5e9fbb49b8cc36da482033596a415b3e4ebab5a4c0d7ec5e"}, - {file = "httptools-0.6.1.tar.gz", hash = "sha256:c6e26c30455600b95d94b1b836085138e82f177351454ee841c148f93a9bad5a"}, -] - -[package.extras] -test = ["Cython (>=0.29.24,<0.30.0)"] - -[[package]] -name = "httpx" -version = "0.27.0" -description = "The next generation HTTP client." -optional = false -python-versions = ">=3.8" -files = [ - {file = "httpx-0.27.0-py3-none-any.whl", hash = "sha256:71d5465162c13681bff01ad59b2cc68dd838ea1f10e51574bac27103f00c91a5"}, - {file = "httpx-0.27.0.tar.gz", hash = "sha256:a0cb88a46f32dc874e04ee956e4c2764aba2aa228f650b06788ba6bda2962ab5"}, -] - -[package.dependencies] -anyio = "*" -certifi = "*" -httpcore = "==1.*" -idna = "*" -sniffio = "*" - -[package.extras] -brotli = ["brotli", "brotlicffi"] -cli = ["click (==8.*)", "pygments (==2.*)", "rich (>=10,<14)"] -http2 = ["h2 (>=3,<5)"] -socks = ["socksio (==1.*)"] - -[[package]] -name = "huggingface-hub" -version = "0.22.2" -description = "Client library to download and publish models, datasets and other repos on the huggingface.co hub" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "huggingface_hub-0.22.2-py3-none-any.whl", hash = "sha256:3429e25f38ccb834d310804a3b711e7e4953db5a9e420cc147a5e194ca90fd17"}, - {file = "huggingface_hub-0.22.2.tar.gz", hash = "sha256:32e9a9a6843c92f253ff9ca16b9985def4d80a93fb357af5353f770ef74a81be"}, -] - -[package.dependencies] -filelock = "*" -fsspec = ">=2023.5.0" -packaging = ">=20.9" -pyyaml = ">=5.1" -requests = "*" -tqdm = ">=4.42.1" -typing-extensions = ">=3.7.4.3" - -[package.extras] -all = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -cli = ["InquirerPy (==0.3.4)"] -dev = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "mypy (==1.5.1)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "ruff (>=0.3.0)", "soundfile", "types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)", "urllib3 (<2.0)"] -fastai = ["fastai (>=2.4)", "fastcore (>=1.3.27)", "toml"] -hf-transfer = ["hf-transfer (>=0.1.4)"] -inference = ["aiohttp", "minijinja (>=1.0)"] -quality = ["mypy (==1.5.1)", "ruff (>=0.3.0)"] -tensorflow = ["graphviz", "pydot", "tensorflow"] -tensorflow-testing = ["keras (<3.0)", "tensorflow"] -testing = ["InquirerPy (==0.3.4)", "Jinja2", "Pillow", "aiohttp", "gradio", "jedi", "minijinja (>=1.0)", "numpy", "pytest", "pytest-asyncio", "pytest-cov", "pytest-env", "pytest-rerunfailures", "pytest-vcr", "pytest-xdist", "soundfile", "urllib3 (<2.0)"] -torch = ["safetensors", "torch"] -typing = ["types-PyYAML", "types-requests", "types-simplejson", "types-toml", "types-tqdm", "types-urllib3", "typing-extensions (>=4.8.0)"] - -[[package]] -name = "humanfriendly" -version = "10.0" -description = "Human friendly output for text interfaces using Python" -optional = false -python-versions = ">=2.7, !=3.0.*, !=3.1.*, !=3.2.*, !=3.3.*, !=3.4.*" -files = [ - {file = "humanfriendly-10.0-py2.py3-none-any.whl", hash = "sha256:1697e1a8a8f550fd43c2865cd84542fc175a61dcb779b6fee18cf6b6ccba1477"}, - {file = "humanfriendly-10.0.tar.gz", hash = "sha256:6b0b831ce8f15f7300721aa49829fc4e83921a9a301cc7f606be6686a2288ddc"}, -] - -[package.dependencies] -pyreadline3 = {version = "*", markers = "sys_platform == \"win32\" and python_version >= \"3.8\""} - -[[package]] -name = "idna" -version = "3.7" -description = "Internationalized Domain Names in Applications (IDNA)" -optional = false -python-versions = ">=3.5" -files = [ - {file = "idna-3.7-py3-none-any.whl", hash = "sha256:82fee1fc78add43492d3a1898bfa6d8a904cc97d8427f683ed8e798d07761aa0"}, - {file = "idna-3.7.tar.gz", hash = "sha256:028ff3aadf0609c1fd278d8ea3089299412a7a8b9bd005dd08b9f8285bcb5cfc"}, -] - -[[package]] -name = "importlib-metadata" -version = "7.0.0" -description = "Read metadata from Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "importlib_metadata-7.0.0-py3-none-any.whl", hash = "sha256:d97503976bb81f40a193d41ee6570868479c69d5068651eb039c40d850c59d67"}, - {file = "importlib_metadata-7.0.0.tar.gz", hash = "sha256:7fc841f8b8332803464e5dc1c63a2e59121f46ca186c0e2e182e80bf8c1319f7"}, -] - -[package.dependencies] -zipp = ">=0.5" - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (<7.2.5)", "sphinx (>=3.5)", "sphinx-lint"] -perf = ["ipython"] -testing = ["flufl.flake8", "importlib-resources (>=1.3)", "packaging", "pyfakefs", "pytest (>=6)", "pytest-black (>=0.3.7)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-mypy (>=0.9.1)", "pytest-perf (>=0.9.2)", "pytest-ruff"] - -[[package]] -name = "iniconfig" -version = "2.0.0" -description = "brain-dead simple config-ini parsing" -optional = false -python-versions = ">=3.7" -files = [ - {file = "iniconfig-2.0.0-py3-none-any.whl", hash = "sha256:b6a85871a79d2e3b22d2d1b94ac2824226a63c6b741c88f7ae975f18b6778374"}, - {file = "iniconfig-2.0.0.tar.gz", hash = "sha256:2d91e135bf72d31a410b17c16da610a82cb55f6b0477d1a902134b24a455b8b3"}, -] - -[[package]] -name = "json5" -version = "0.9.25" -description = "A Python implementation of the JSON5 data format." -optional = false -python-versions = ">=3.8" -files = [ - {file = "json5-0.9.25-py3-none-any.whl", hash = "sha256:34ed7d834b1341a86987ed52f3f76cd8ee184394906b6e22a1e0deb9ab294e8f"}, - {file = "json5-0.9.25.tar.gz", hash = "sha256:548e41b9be043f9426776f05df8635a00fe06104ea51ed24b67f908856e151ae"}, -] - -[[package]] -name = "multidict" -version = "6.0.5" -description = "multidict implementation" -optional = false -python-versions = ">=3.7" -files = [ - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:228b644ae063c10e7f324ab1ab6b548bdf6f8b47f3ec234fef1093bc2735e5f9"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:896ebdcf62683551312c30e20614305f53125750803b614e9e6ce74a96232604"}, - {file = "multidict-6.0.5-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:411bf8515f3be9813d06004cac41ccf7d1cd46dfe233705933dd163b60e37600"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1d147090048129ce3c453f0292e7697d333db95e52616b3793922945804a433c"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:215ed703caf15f578dca76ee6f6b21b7603791ae090fbf1ef9d865571039ade5"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7c6390cf87ff6234643428991b7359b5f59cc15155695deb4eda5c777d2b880f"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:21fd81c4ebdb4f214161be351eb5bcf385426bf023041da2fd9e60681f3cebae"}, - {file = "multidict-6.0.5-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:3cc2ad10255f903656017363cd59436f2111443a76f996584d1077e43ee51182"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6939c95381e003f54cd4c5516740faba40cf5ad3eeff460c3ad1d3e0ea2549bf"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:220dd781e3f7af2c2c1053da9fa96d9cf3072ca58f057f4c5adaaa1cab8fc442"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:766c8f7511df26d9f11cd3a8be623e59cca73d44643abab3f8c8c07620524e4a"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:fe5d7785250541f7f5019ab9cba2c71169dc7d74d0f45253f8313f436458a4ef"}, - {file = "multidict-6.0.5-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:c1c1496e73051918fcd4f58ff2e0f2f3066d1c76a0c6aeffd9b45d53243702cc"}, - {file = "multidict-6.0.5-cp310-cp310-win32.whl", hash = "sha256:7afcdd1fc07befad18ec4523a782cde4e93e0a2bf71239894b8d61ee578c1319"}, - {file = "multidict-6.0.5-cp310-cp310-win_amd64.whl", hash = "sha256:99f60d34c048c5c2fabc766108c103612344c46e35d4ed9ae0673d33c8fb26e8"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:f285e862d2f153a70586579c15c44656f888806ed0e5b56b64489afe4a2dbfba"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:53689bb4e102200a4fafa9de9c7c3c212ab40a7ab2c8e474491914d2305f187e"}, - {file = "multidict-6.0.5-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:612d1156111ae11d14afaf3a0669ebf6c170dbb735e510a7438ffe2369a847fd"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7be7047bd08accdb7487737631d25735c9a04327911de89ff1b26b81745bd4e3"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:de170c7b4fe6859beb8926e84f7d7d6c693dfe8e27372ce3b76f01c46e489fcf"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:04bde7a7b3de05732a4eb39c94574db1ec99abb56162d6c520ad26f83267de29"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:85f67aed7bb647f93e7520633d8f51d3cbc6ab96957c71272b286b2f30dc70ed"}, - {file = "multidict-6.0.5-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:425bf820055005bfc8aa9a0b99ccb52cc2f4070153e34b701acc98d201693733"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d3eb1ceec286eba8220c26f3b0096cf189aea7057b6e7b7a2e60ed36b373b77f"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:7901c05ead4b3fb75113fb1dd33eb1253c6d3ee37ce93305acd9d38e0b5f21a4"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:e0e79d91e71b9867c73323a3444724d496c037e578a0e1755ae159ba14f4f3d1"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:29bfeb0dff5cb5fdab2023a7a9947b3b4af63e9c47cae2a10ad58394b517fddc"}, - {file = "multidict-6.0.5-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:e030047e85cbcedbfc073f71836d62dd5dadfbe7531cae27789ff66bc551bd5e"}, - {file = "multidict-6.0.5-cp311-cp311-win32.whl", hash = "sha256:2f4848aa3baa109e6ab81fe2006c77ed4d3cd1e0ac2c1fbddb7b1277c168788c"}, - {file = "multidict-6.0.5-cp311-cp311-win_amd64.whl", hash = "sha256:2faa5ae9376faba05f630d7e5e6be05be22913782b927b19d12b8145968a85ea"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:51d035609b86722963404f711db441cf7134f1889107fb171a970c9701f92e1e"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:cbebcd5bcaf1eaf302617c114aa67569dd3f090dd0ce8ba9e35e9985b41ac35b"}, - {file = "multidict-6.0.5-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:2ffc42c922dbfddb4a4c3b438eb056828719f07608af27d163191cb3e3aa6cc5"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ceb3b7e6a0135e092de86110c5a74e46bda4bd4fbfeeb3a3bcec79c0f861e450"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:79660376075cfd4b2c80f295528aa6beb2058fd289f4c9252f986751a4cd0496"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e4428b29611e989719874670fd152b6625500ad6c686d464e99f5aaeeaca175a"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d84a5c3a5f7ce6db1f999fb9438f686bc2e09d38143f2d93d8406ed2dd6b9226"}, - {file = "multidict-6.0.5-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:76c0de87358b192de7ea9649beb392f107dcad9ad27276324c24c91774ca5271"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:79a6d2ba910adb2cbafc95dad936f8b9386e77c84c35bc0add315b856d7c3abb"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:92d16a3e275e38293623ebf639c471d3e03bb20b8ebb845237e0d3664914caef"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:fb616be3538599e797a2017cccca78e354c767165e8858ab5116813146041a24"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:14c2976aa9038c2629efa2c148022ed5eb4cb939e15ec7aace7ca932f48f9ba6"}, - {file = "multidict-6.0.5-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:435a0984199d81ca178b9ae2c26ec3d49692d20ee29bc4c11a2a8d4514c67eda"}, - {file = "multidict-6.0.5-cp312-cp312-win32.whl", hash = "sha256:9fe7b0653ba3d9d65cbe7698cca585bf0f8c83dbbcc710db9c90f478e175f2d5"}, - {file = "multidict-6.0.5-cp312-cp312-win_amd64.whl", hash = "sha256:01265f5e40f5a17f8241d52656ed27192be03bfa8764d88e8220141d1e4b3556"}, - {file = "multidict-6.0.5-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:19fe01cea168585ba0f678cad6f58133db2aa14eccaf22f88e4a6dccadfad8b3"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6bf7a982604375a8d49b6cc1b781c1747f243d91b81035a9b43a2126c04766f5"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:107c0cdefe028703fb5dafe640a409cb146d44a6ae201e55b35a4af8e95457dd"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:403c0911cd5d5791605808b942c88a8155c2592e05332d2bf78f18697a5fa15e"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aeaf541ddbad8311a87dd695ed9642401131ea39ad7bc8cf3ef3967fd093b626"}, - {file = "multidict-6.0.5-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:e4972624066095e52b569e02b5ca97dbd7a7ddd4294bf4e7247d52635630dd83"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d946b0a9eb8aaa590df1fe082cee553ceab173e6cb5b03239716338629c50c7a"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b55358304d7a73d7bdf5de62494aaf70bd33015831ffd98bc498b433dfe5b10c"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:a3145cb08d8625b2d3fee1b2d596a8766352979c9bffe5d7833e0503d0f0b5e5"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d65f25da8e248202bd47445cec78e0025c0fe7582b23ec69c3b27a640dd7a8e3"}, - {file = "multidict-6.0.5-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:c9bf56195c6bbd293340ea82eafd0071cb3d450c703d2c93afb89f93b8386ccc"}, - {file = "multidict-6.0.5-cp37-cp37m-win32.whl", hash = "sha256:69db76c09796b313331bb7048229e3bee7928eb62bab5e071e9f7fcc4879caee"}, - {file = "multidict-6.0.5-cp37-cp37m-win_amd64.whl", hash = "sha256:fce28b3c8a81b6b36dfac9feb1de115bab619b3c13905b419ec71d03a3fc1423"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:76f067f5121dcecf0d63a67f29080b26c43c71a98b10c701b0677e4a065fbd54"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:b82cc8ace10ab5bd93235dfaab2021c70637005e1ac787031f4d1da63d493c1d"}, - {file = "multidict-6.0.5-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5cb241881eefd96b46f89b1a056187ea8e9ba14ab88ba632e68d7a2ecb7aadf7"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e8e94e6912639a02ce173341ff62cc1201232ab86b8a8fcc05572741a5dc7d93"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:09a892e4a9fb47331da06948690ae38eaa2426de97b4ccbfafbdcbe5c8f37ff8"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:55205d03e8a598cfc688c71ca8ea5f66447164efff8869517f175ea632c7cb7b"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:37b15024f864916b4951adb95d3a80c9431299080341ab9544ed148091b53f50"}, - {file = "multidict-6.0.5-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2a1dee728b52b33eebff5072817176c172050d44d67befd681609b4746e1c2e"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:edd08e6f2f1a390bf137080507e44ccc086353c8e98c657e666c017718561b89"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:60d698e8179a42ec85172d12f50b1668254628425a6bd611aba022257cac1386"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:3d25f19500588cbc47dc19081d78131c32637c25804df8414463ec908631e453"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:4cc0ef8b962ac7a5e62b9e826bd0cd5040e7d401bc45a6835910ed699037a461"}, - {file = "multidict-6.0.5-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:eca2e9d0cc5a889850e9bbd68e98314ada174ff6ccd1129500103df7a94a7a44"}, - {file = "multidict-6.0.5-cp38-cp38-win32.whl", hash = "sha256:4a6a4f196f08c58c59e0b8ef8ec441d12aee4125a7d4f4fef000ccb22f8d7241"}, - {file = "multidict-6.0.5-cp38-cp38-win_amd64.whl", hash = "sha256:0275e35209c27a3f7951e1ce7aaf93ce0d163b28948444bec61dd7badc6d3f8c"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:e7be68734bd8c9a513f2b0cfd508802d6609da068f40dc57d4e3494cefc92929"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:1d9ea7a7e779d7a3561aade7d596649fbecfa5c08a7674b11b423783217933f9"}, - {file = "multidict-6.0.5-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ea1456df2a27c73ce51120fa2f519f1bea2f4a03a917f4a43c8707cf4cbbae1a"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:cf590b134eb70629e350691ecca88eac3e3b8b3c86992042fb82e3cb1830d5e1"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:5c0631926c4f58e9a5ccce555ad7747d9a9f8b10619621f22f9635f069f6233e"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:dce1c6912ab9ff5f179eaf6efe7365c1f425ed690b03341911bf4939ef2f3046"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c0868d64af83169e4d4152ec612637a543f7a336e4a307b119e98042e852ad9c"}, - {file = "multidict-6.0.5-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:141b43360bfd3bdd75f15ed811850763555a251e38b2405967f8e25fb43f7d40"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:7df704ca8cf4a073334e0427ae2345323613e4df18cc224f647f251e5e75a527"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:6214c5a5571802c33f80e6c84713b2c79e024995b9c5897f794b43e714daeec9"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:cd6c8fca38178e12c00418de737aef1261576bd1b6e8c6134d3e729a4e858b38"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:e02021f87a5b6932fa6ce916ca004c4d441509d33bbdbeca70d05dff5e9d2479"}, - {file = "multidict-6.0.5-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:ebd8d160f91a764652d3e51ce0d2956b38efe37c9231cd82cfc0bed2e40b581c"}, - {file = "multidict-6.0.5-cp39-cp39-win32.whl", hash = "sha256:04da1bb8c8dbadf2a18a452639771951c662c5ad03aefe4884775454be322c9b"}, - {file = "multidict-6.0.5-cp39-cp39-win_amd64.whl", hash = "sha256:d6f6d4f185481c9669b9447bf9d9cf3b95a0e9df9d169bbc17e363b7d5487755"}, - {file = "multidict-6.0.5-py3-none-any.whl", hash = "sha256:0d63c74e3d7ab26de115c49bffc92cc77ed23395303d496eae515d4204a625e7"}, - {file = "multidict-6.0.5.tar.gz", hash = "sha256:f7e301075edaf50500f0b341543c41194d8df3ae5caf4702f2095f3ca73dd8da"}, -] - -[[package]] -name = "ollama" -version = "0.1.9" -description = "The official Python client for Ollama." -optional = false -python-versions = "<4.0,>=3.8" -files = [ - {file = "ollama-0.1.9-py3-none-any.whl", hash = "sha256:46d4b4028ac5cbb30a8128ba60967171fbb523c25c832c0f3f090989e5441033"}, - {file = "ollama-0.1.9.tar.gz", hash = "sha256:f64484b280db0fa03fb899580d8a3a85af3787fd2a85b67669b743e313b3faf1"}, -] - -[package.dependencies] -httpx = ">=0.27.0,<0.28.0" - -[[package]] -name = "openai" -version = "1.24.1" -description = "The official Python library for the openai API" -optional = false -python-versions = ">=3.7.1" -files = [ - {file = "openai-1.24.1-py3-none-any.whl", hash = "sha256:52fe59418bec5f6ec80dd8c523a5cce82ce6237b1712f1399eeaa8503f925ed7"}, - {file = "openai-1.24.1.tar.gz", hash = "sha256:0b790ce01e6a51daac866d85f76a59ca7a17b2c4c35991542e24a0b40356fb63"}, -] - -[package.dependencies] -anyio = ">=3.5.0,<5" -distro = ">=1.7.0,<2" -httpx = ">=0.23.0,<1" -pydantic = ">=1.9.0,<3" -sniffio = "*" -tqdm = ">4" -typing-extensions = ">=4.7,<5" - -[package.extras] -datalib = ["numpy (>=1)", "pandas (>=1.2.3)", "pandas-stubs (>=1.1.0.11)"] - -[[package]] -name = "opentelemetry-api" -version = "1.24.0" -description = "OpenTelemetry Python API" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_api-1.24.0-py3-none-any.whl", hash = "sha256:0f2c363d98d10d1ce93330015ca7fd3a65f60be64e05e30f557c61de52c80ca2"}, - {file = "opentelemetry_api-1.24.0.tar.gz", hash = "sha256:42719f10ce7b5a9a73b10a4baf620574fb8ad495a9cbe5c18d76b75d8689c67e"}, -] - -[package.dependencies] -deprecated = ">=1.2.6" -importlib-metadata = ">=6.0,<=7.0" - -[[package]] -name = "opentelemetry-instrumentation" -version = "0.45b0" -description = "Instrumentation Tools & Auto Instrumentation for OpenTelemetry Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_instrumentation-0.45b0-py3-none-any.whl", hash = "sha256:06c02e2c952c1b076e8eaedf1b82f715e2937ba7eeacab55913dd434fbcec258"}, - {file = "opentelemetry_instrumentation-0.45b0.tar.gz", hash = "sha256:6c47120a7970bbeb458e6a73686ee9ba84b106329a79e4a4a66761f933709c7e"}, -] - -[package.dependencies] -opentelemetry-api = ">=1.4,<2.0" -setuptools = ">=16.0" -wrapt = ">=1.0.0,<2.0.0" - -[[package]] -name = "opentelemetry-sdk" -version = "1.24.0" -description = "OpenTelemetry Python SDK" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_sdk-1.24.0-py3-none-any.whl", hash = "sha256:fa731e24efe832e98bcd90902085b359dcfef7d9c9c00eb5b9a18587dae3eb59"}, - {file = "opentelemetry_sdk-1.24.0.tar.gz", hash = "sha256:75bc0563affffa827700e0f4f4a68e1e257db0df13372344aebc6f8a64cde2e5"}, -] - -[package.dependencies] -opentelemetry-api = "1.24.0" -opentelemetry-semantic-conventions = "0.45b0" -typing-extensions = ">=3.7.4" - -[[package]] -name = "opentelemetry-semantic-conventions" -version = "0.45b0" -description = "OpenTelemetry Semantic Conventions" -optional = false -python-versions = ">=3.8" -files = [ - {file = "opentelemetry_semantic_conventions-0.45b0-py3-none-any.whl", hash = "sha256:a4a6fb9a7bacd9167c082aa4681009e9acdbfa28ffb2387af50c2fef3d30c864"}, - {file = "opentelemetry_semantic_conventions-0.45b0.tar.gz", hash = "sha256:7c84215a44ac846bc4b8e32d5e78935c5c43482e491812a0bb8aaf87e4d92118"}, -] - -[[package]] -name = "packaging" -version = "23.2" -description = "Core utilities for Python packages" -optional = false -python-versions = ">=3.7" -files = [ - {file = "packaging-23.2-py3-none-any.whl", hash = "sha256:8c491190033a9af7e1d931d0b5dacc2ef47509b34dd0de67ed209b5203fc88c7"}, - {file = "packaging-23.2.tar.gz", hash = "sha256:048fb0e9405036518eaaf48a55953c750c11e1a1b68e0dd1a9d62ed0c092cfc5"}, -] - -[[package]] -name = "pluggy" -version = "1.5.0" -description = "plugin and hook calling mechanisms for python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pluggy-1.5.0-py3-none-any.whl", hash = "sha256:44e1ad92c8ca002de6377e165f3e0f1be63266ab4d554740532335b9d75ea669"}, - {file = "pluggy-1.5.0.tar.gz", hash = "sha256:2cffa88e94fdc978c4c574f15f9e59b7f4201d439195c3715ca9e2486f1d0cf1"}, -] - -[package.extras] -dev = ["pre-commit", "tox"] -testing = ["pytest", "pytest-benchmark"] - -[[package]] -name = "pydantic" -version = "2.7.1" -description = "Data validation using Python type hints" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic-2.7.1-py3-none-any.whl", hash = "sha256:e029badca45266732a9a79898a15ae2e8b14840b1eabbb25844be28f0b33f3d5"}, - {file = "pydantic-2.7.1.tar.gz", hash = "sha256:e9dbb5eada8abe4d9ae5f46b9939aead650cd2b68f249bb3a8139dbe125803cc"}, -] - -[package.dependencies] -annotated-types = ">=0.4.0" -pydantic-core = "2.18.2" -typing-extensions = ">=4.6.1" - -[package.extras] -email = ["email-validator (>=2.0.0)"] - -[[package]] -name = "pydantic-core" -version = "2.18.2" -description = "Core functionality for Pydantic validation and serialization" -optional = false -python-versions = ">=3.8" -files = [ - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:9e08e867b306f525802df7cd16c44ff5ebbe747ff0ca6cf3fde7f36c05a59a81"}, - {file = "pydantic_core-2.18.2-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:f0a21cbaa69900cbe1a2e7cad2aa74ac3cf21b10c3efb0fa0b80305274c0e8a2"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0680b1f1f11fda801397de52c36ce38ef1c1dc841a0927a94f226dea29c3ae3d"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:95b9d5e72481d3780ba3442eac863eae92ae43a5f3adb5b4d0a1de89d42bb250"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c4fcf5cd9c4b655ad666ca332b9a081112cd7a58a8b5a6ca7a3104bc950f2038"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:9b5155ff768083cb1d62f3e143b49a8a3432e6789a3abee8acd005c3c7af1c74"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:553ef617b6836fc7e4df130bb851e32fe357ce36336d897fd6646d6058d980af"}, - {file = "pydantic_core-2.18.2-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:b89ed9eb7d616ef5714e5590e6cf7f23b02d0d539767d33561e3675d6f9e3857"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:75f7e9488238e920ab6204399ded280dc4c307d034f3924cd7f90a38b1829563"}, - {file = "pydantic_core-2.18.2-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:ef26c9e94a8c04a1b2924149a9cb081836913818e55681722d7f29af88fe7b38"}, - {file = "pydantic_core-2.18.2-cp310-none-win32.whl", hash = "sha256:182245ff6b0039e82b6bb585ed55a64d7c81c560715d1bad0cbad6dfa07b4027"}, - {file = "pydantic_core-2.18.2-cp310-none-win_amd64.whl", hash = "sha256:e23ec367a948b6d812301afc1b13f8094ab7b2c280af66ef450efc357d2ae543"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:219da3f096d50a157f33645a1cf31c0ad1fe829a92181dd1311022f986e5fbe3"}, - {file = "pydantic_core-2.18.2-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:cc1cfd88a64e012b74e94cd00bbe0f9c6df57049c97f02bb07d39e9c852e19a4"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:05b7133a6e6aeb8df37d6f413f7705a37ab4031597f64ab56384c94d98fa0e90"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:224c421235f6102e8737032483f43c1a8cfb1d2f45740c44166219599358c2cd"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b14d82cdb934e99dda6d9d60dc84a24379820176cc4a0d123f88df319ae9c150"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:2728b01246a3bba6de144f9e3115b532ee44bd6cf39795194fb75491824a1413"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:470b94480bb5ee929f5acba6995251ada5e059a5ef3e0dfc63cca287283ebfa6"}, - {file = "pydantic_core-2.18.2-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:997abc4df705d1295a42f95b4eec4950a37ad8ae46d913caeee117b6b198811c"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:75250dbc5290e3f1a0f4618db35e51a165186f9034eff158f3d490b3fed9f8a0"}, - {file = "pydantic_core-2.18.2-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:4456f2dca97c425231d7315737d45239b2b51a50dc2b6f0c2bb181fce6207664"}, - {file = "pydantic_core-2.18.2-cp311-none-win32.whl", hash = "sha256:269322dcc3d8bdb69f054681edff86276b2ff972447863cf34c8b860f5188e2e"}, - {file = "pydantic_core-2.18.2-cp311-none-win_amd64.whl", hash = "sha256:800d60565aec896f25bc3cfa56d2277d52d5182af08162f7954f938c06dc4ee3"}, - {file = "pydantic_core-2.18.2-cp311-none-win_arm64.whl", hash = "sha256:1404c69d6a676245199767ba4f633cce5f4ad4181f9d0ccb0577e1f66cf4c46d"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:fb2bd7be70c0fe4dfd32c951bc813d9fe6ebcbfdd15a07527796c8204bd36242"}, - {file = "pydantic_core-2.18.2-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:6132dd3bd52838acddca05a72aafb6eab6536aa145e923bb50f45e78b7251043"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d904828195733c183d20a54230c0df0eb46ec746ea1a666730787353e87182"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:c9bd70772c720142be1020eac55f8143a34ec9f82d75a8e7a07852023e46617f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:2b8ed04b3582771764538f7ee7001b02e1170223cf9b75dff0bc698fadb00cf3"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e6dac87ddb34aaec85f873d737e9d06a3555a1cc1a8e0c44b7f8d5daeb89d86f"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7ca4ae5a27ad7a4ee5170aebce1574b375de390bc01284f87b18d43a3984df72"}, - {file = "pydantic_core-2.18.2-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:886eec03591b7cf058467a70a87733b35f44707bd86cf64a615584fd72488b7c"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:ca7b0c1f1c983e064caa85f3792dd2fe3526b3505378874afa84baf662e12241"}, - {file = "pydantic_core-2.18.2-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:4b4356d3538c3649337df4074e81b85f0616b79731fe22dd11b99499b2ebbdf3"}, - {file = "pydantic_core-2.18.2-cp312-none-win32.whl", hash = "sha256:8b172601454f2d7701121bbec3425dd71efcb787a027edf49724c9cefc14c038"}, - {file = "pydantic_core-2.18.2-cp312-none-win_amd64.whl", hash = "sha256:b1bd7e47b1558ea872bd16c8502c414f9e90dcf12f1395129d7bb42a09a95438"}, - {file = "pydantic_core-2.18.2-cp312-none-win_arm64.whl", hash = "sha256:98758d627ff397e752bc339272c14c98199c613f922d4a384ddc07526c86a2ec"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:9fdad8e35f278b2c3eb77cbdc5c0a49dada440657bf738d6905ce106dc1de439"}, - {file = "pydantic_core-2.18.2-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:1d90c3265ae107f91a4f279f4d6f6f1d4907ac76c6868b27dc7fb33688cfb347"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:390193c770399861d8df9670fb0d1874f330c79caaca4642332df7c682bf6b91"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:82d5d4d78e4448683cb467897fe24e2b74bb7b973a541ea1dcfec1d3cbce39fb"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:4774f3184d2ef3e14e8693194f661dea5a4d6ca4e3dc8e39786d33a94865cefd"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d4d938ec0adf5167cb335acb25a4ee69a8107e4984f8fbd2e897021d9e4ca21b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e0e8b1be28239fc64a88a8189d1df7fad8be8c1ae47fcc33e43d4be15f99cc70"}, - {file = "pydantic_core-2.18.2-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:868649da93e5a3d5eacc2b5b3b9235c98ccdbfd443832f31e075f54419e1b96b"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:78363590ef93d5d226ba21a90a03ea89a20738ee5b7da83d771d283fd8a56761"}, - {file = "pydantic_core-2.18.2-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:852e966fbd035a6468fc0a3496589b45e2208ec7ca95c26470a54daed82a0788"}, - {file = "pydantic_core-2.18.2-cp38-none-win32.whl", hash = "sha256:6a46e22a707e7ad4484ac9ee9f290f9d501df45954184e23fc29408dfad61350"}, - {file = "pydantic_core-2.18.2-cp38-none-win_amd64.whl", hash = "sha256:d91cb5ea8b11607cc757675051f61b3d93f15eca3cefb3e6c704a5d6e8440f4e"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:ae0a8a797a5e56c053610fa7be147993fe50960fa43609ff2a9552b0e07013e8"}, - {file = "pydantic_core-2.18.2-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:042473b6280246b1dbf530559246f6842b56119c2926d1e52b631bdc46075f2a"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1a388a77e629b9ec814c1b1e6b3b595fe521d2cdc625fcca26fbc2d44c816804"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e25add29b8f3b233ae90ccef2d902d0ae0432eb0d45370fe315d1a5cf231004b"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f459a5ce8434614dfd39bbebf1041952ae01da6bed9855008cb33b875cb024c0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:eff2de745698eb46eeb51193a9f41d67d834d50e424aef27df2fcdee1b153845"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a8309f67285bdfe65c372ea3722b7a5642680f3dba538566340a9d36e920b5f0"}, - {file = "pydantic_core-2.18.2-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:f93a8a2e3938ff656a7c1bc57193b1319960ac015b6e87d76c76bf14fe0244b4"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:22057013c8c1e272eb8d0eebc796701167d8377441ec894a8fed1af64a0bf399"}, - {file = "pydantic_core-2.18.2-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:cfeecd1ac6cc1fb2692c3d5110781c965aabd4ec5d32799773ca7b1456ac636b"}, - {file = "pydantic_core-2.18.2-cp39-none-win32.whl", hash = "sha256:0d69b4c2f6bb3e130dba60d34c0845ba31b69babdd3f78f7c0c8fae5021a253e"}, - {file = "pydantic_core-2.18.2-cp39-none-win_amd64.whl", hash = "sha256:d9319e499827271b09b4e411905b24a426b8fb69464dfa1696258f53a3334641"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:a1874c6dd4113308bd0eb568418e6114b252afe44319ead2b4081e9b9521fe75"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:ccdd111c03bfd3666bd2472b674c6899550e09e9f298954cfc896ab92b5b0e6d"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e18609ceaa6eed63753037fc06ebb16041d17d28199ae5aba0052c51449650a9"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e5c584d357c4e2baf0ff7baf44f4994be121e16a2c88918a5817331fc7599d7"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:43f0f463cf89ace478de71a318b1b4f05ebc456a9b9300d027b4b57c1a2064fb"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:e1b395e58b10b73b07b7cf740d728dd4ff9365ac46c18751bf8b3d8cca8f625a"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:0098300eebb1c837271d3d1a2cd2911e7c11b396eac9661655ee524a7f10587b"}, - {file = "pydantic_core-2.18.2-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:36789b70d613fbac0a25bb07ab3d9dba4d2e38af609c020cf4d888d165ee0bf3"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3f9a801e7c8f1ef8718da265bba008fa121243dfe37c1cea17840b0944dfd72c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:3a6515ebc6e69d85502b4951d89131ca4e036078ea35533bb76327f8424531ce"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:20aca1e2298c56ececfd8ed159ae4dde2df0781988c97ef77d5c16ff4bd5b400"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:223ee893d77a310a0391dca6df00f70bbc2f36a71a895cecd9a0e762dc37b349"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.whl", hash = "sha256:2334ce8c673ee93a1d6a65bd90327588387ba073c17e61bf19b4fd97d688d63c"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:cbca948f2d14b09d20268cda7b0367723d79063f26c4ffc523af9042cad95592"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:b3ef08e20ec49e02d5c6717a91bb5af9b20f1805583cb0adfe9ba2c6b505b5ae"}, - {file = "pydantic_core-2.18.2-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:c6fdc8627910eed0c01aed6a390a252fe3ea6d472ee70fdde56273f198938374"}, - {file = "pydantic_core-2.18.2.tar.gz", hash = "sha256:2e29d20810dfc3043ee13ac7d9e25105799817683348823f305ab3f349b9386e"}, -] - -[package.dependencies] -typing-extensions = ">=4.6.0,<4.7.0 || >4.7.0" - -[[package]] -name = "pyreadline3" -version = "3.4.1" -description = "A python implementation of GNU readline." -optional = false -python-versions = "*" -files = [ - {file = "pyreadline3-3.4.1-py3-none-any.whl", hash = "sha256:b0efb6516fd4fb07b45949053826a62fa4cb353db5be2bbb4a7aa1fdd1e345fb"}, - {file = "pyreadline3-3.4.1.tar.gz", hash = "sha256:6f3d1f7b8a31ba32b73917cefc1f28cc660562f39aea8646d30bd6eff21f7bae"}, -] - -[[package]] -name = "pytest" -version = "7.4.4" -description = "pytest: simple powerful testing with Python" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest-7.4.4-py3-none-any.whl", hash = "sha256:b090cdf5ed60bf4c45261be03239c2c1c22df034fbffe691abe93cd80cea01d8"}, - {file = "pytest-7.4.4.tar.gz", hash = "sha256:2cf0005922c6ace4a3e2ec8b4080eb0d9753fdc93107415332f50ce9e7994280"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "sys_platform == \"win32\""} -exceptiongroup = {version = ">=1.0.0rc8", markers = "python_version < \"3.11\""} -iniconfig = "*" -packaging = "*" -pluggy = ">=0.12,<2.0" -tomli = {version = ">=1.0.0", markers = "python_version < \"3.11\""} - -[package.extras] -testing = ["argcomplete", "attrs (>=19.2.0)", "hypothesis (>=3.56)", "mock", "nose", "pygments (>=2.7.2)", "requests", "setuptools", "xmlschema"] - -[[package]] -name = "pytest-asyncio" -version = "0.21.2" -description = "Pytest support for asyncio" -optional = false -python-versions = ">=3.7" -files = [ - {file = "pytest_asyncio-0.21.2-py3-none-any.whl", hash = "sha256:ab664c88bb7998f711d8039cacd4884da6430886ae8bbd4eded552ed2004f16b"}, - {file = "pytest_asyncio-0.21.2.tar.gz", hash = "sha256:d67738fc232b94b326b9d060750beb16e0074210b98dd8b58a5239fa2a154f45"}, -] - -[package.dependencies] -pytest = ">=7.0.0" - -[package.extras] -docs = ["sphinx (>=5.3)", "sphinx-rtd-theme (>=1.0)"] -testing = ["coverage (>=6.2)", "flaky (>=3.5.0)", "hypothesis (>=5.7.1)", "mypy (>=0.931)", "pytest-trio (>=0.7.0)"] - -[[package]] -name = "python-dotenv" -version = "1.0.1" -description = "Read key-value pairs from a .env file and set them as environment variables" -optional = false -python-versions = ">=3.8" -files = [ - {file = "python-dotenv-1.0.1.tar.gz", hash = "sha256:e324ee90a023d808f1959c46bcbc04446a10ced277783dc6ee09987c37ec10ca"}, - {file = "python_dotenv-1.0.1-py3-none-any.whl", hash = "sha256:f7b63ef50f1b690dddf550d03497b66d609393b40b564ed0d674909a68ebf16a"}, -] - -[package.extras] -cli = ["click (>=5.0)"] - -[[package]] -name = "pyyaml" -version = "6.0.1" -description = "YAML parser and emitter for Python" -optional = false -python-versions = ">=3.6" -files = [ - {file = "PyYAML-6.0.1-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:d858aa552c999bc8a8d57426ed01e40bef403cd8ccdd0fc5f6f04a00414cac2a"}, - {file = "PyYAML-6.0.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:fd66fc5d0da6d9815ba2cebeb4205f95818ff4b79c3ebe268e75d961704af52f"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:69b023b2b4daa7548bcfbd4aa3da05b3a74b772db9e23b982788168117739938"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:81e0b275a9ecc9c0c0c07b4b90ba548307583c125f54d5b6946cfee6360c733d"}, - {file = "PyYAML-6.0.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba336e390cd8e4d1739f42dfe9bb83a3cc2e80f567d8805e11b46f4a943f5515"}, - {file = "PyYAML-6.0.1-cp310-cp310-win32.whl", hash = "sha256:bd4af7373a854424dabd882decdc5579653d7868b8fb26dc7d0e99f823aa5924"}, - {file = "PyYAML-6.0.1-cp310-cp310-win_amd64.whl", hash = "sha256:fd1592b3fdf65fff2ad0004b5e363300ef59ced41c2e6b3a99d4089fa8c5435d"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:6965a7bc3cf88e5a1c3bd2e0b5c22f8d677dc88a455344035f03399034eb3007"}, - {file = "PyYAML-6.0.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:f003ed9ad21d6a4713f0a9b5a7a0a79e08dd0f221aff4525a2be4c346ee60aab"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:42f8152b8dbc4fe7d96729ec2b99c7097d656dc1213a3229ca5383f973a5ed6d"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:062582fca9fabdd2c8b54a3ef1c978d786e0f6b3a1510e0ac93ef59e0ddae2bc"}, - {file = "PyYAML-6.0.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d2b04aac4d386b172d5b9692e2d2da8de7bfb6c387fa4f801fbf6fb2e6ba4673"}, - {file = "PyYAML-6.0.1-cp311-cp311-win32.whl", hash = "sha256:1635fd110e8d85d55237ab316b5b011de701ea0f29d07611174a1b42f1444741"}, - {file = "PyYAML-6.0.1-cp311-cp311-win_amd64.whl", hash = "sha256:bf07ee2fef7014951eeb99f56f39c9bb4af143d8aa3c21b1677805985307da34"}, - {file = "PyYAML-6.0.1-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:50550eb667afee136e9a77d6dc71ae76a44df8b3e51e41b77f6de2932bfe0f47"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1fe35611261b29bd1de0070f0b2f47cb6ff71fa6595c077e42bd0c419fa27b98"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:704219a11b772aea0d8ecd7058d0082713c3562b4e271b849ad7dc4a5c90c13c"}, - {file = "PyYAML-6.0.1-cp36-cp36m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:afd7e57eddb1a54f0f1a974bc4391af8bcce0b444685d936840f125cf046d5bd"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win32.whl", hash = "sha256:fca0e3a251908a499833aa292323f32437106001d436eca0e6e7833256674585"}, - {file = "PyYAML-6.0.1-cp36-cp36m-win_amd64.whl", hash = "sha256:f22ac1c3cac4dbc50079e965eba2c1058622631e526bd9afd45fedd49ba781fa"}, - {file = "PyYAML-6.0.1-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:b1275ad35a5d18c62a7220633c913e1b42d44b46ee12554e5fd39c70a243d6a3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:18aeb1bf9a78867dc38b259769503436b7c72f7a1f1f4c93ff9a17de54319b27"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:596106435fa6ad000c2991a98fa58eeb8656ef2325d7e158344fb33864ed87e3"}, - {file = "PyYAML-6.0.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:baa90d3f661d43131ca170712d903e6295d1f7a0f595074f151c0aed377c9b9c"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win32.whl", hash = "sha256:9046c58c4395dff28dd494285c82ba00b546adfc7ef001486fbf0324bc174fba"}, - {file = "PyYAML-6.0.1-cp37-cp37m-win_amd64.whl", hash = "sha256:4fb147e7a67ef577a588a0e2c17b6db51dda102c71de36f8549b6816a96e1867"}, - {file = "PyYAML-6.0.1-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1d4c7e777c441b20e32f52bd377e0c409713e8bb1386e1099c2415f26e479595"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a0cd17c15d3bb3fa06978b4e8958dcdc6e0174ccea823003a106c7d4d7899ac5"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:28c119d996beec18c05208a8bd78cbe4007878c6dd15091efb73a30e90539696"}, - {file = "PyYAML-6.0.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7e07cbde391ba96ab58e532ff4803f79c4129397514e1413a7dc761ccd755735"}, - {file = "PyYAML-6.0.1-cp38-cp38-win32.whl", hash = "sha256:184c5108a2aca3c5b3d3bf9395d50893a7ab82a38004c8f61c258d4428e80206"}, - {file = "PyYAML-6.0.1-cp38-cp38-win_amd64.whl", hash = "sha256:1e2722cc9fbb45d9b87631ac70924c11d3a401b2d7f410cc0e3bbf249f2dca62"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9eb6caa9a297fc2c2fb8862bc5370d0303ddba53ba97e71f08023b6cd73d16a8"}, - {file = "PyYAML-6.0.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:c8098ddcc2a85b61647b2590f825f3db38891662cfc2fc776415143f599bb859"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:5773183b6446b2c99bb77e77595dd486303b4faab2b086e7b17bc6bef28865f6"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b786eecbdf8499b9ca1d697215862083bd6d2a99965554781d0d8d1ad31e13a0"}, - {file = "PyYAML-6.0.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bc1bf2925a1ecd43da378f4db9e4f799775d6367bdb94671027b73b393a7c42c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win32.whl", hash = "sha256:faca3bdcf85b2fc05d06ff3fbc1f83e1391b3e724afa3feba7d13eeab355484c"}, - {file = "PyYAML-6.0.1-cp39-cp39-win_amd64.whl", hash = "sha256:510c9deebc5c0225e8c96813043e62b680ba2f9c50a08d3724c7f28a747d1486"}, - {file = "PyYAML-6.0.1.tar.gz", hash = "sha256:bfdf460b1736c775f2ba9f6a92bca30bc2095067b8a9d77876d1fad6cc3b4a43"}, -] - -[[package]] -name = "regex" -version = "2024.4.28" -description = "Alternative regular expression module, to replace re." -optional = false -python-versions = ">=3.8" -files = [ - {file = "regex-2024.4.28-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:cd196d056b40af073d95a2879678585f0b74ad35190fac04ca67954c582c6b61"}, - {file = "regex-2024.4.28-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:8bb381f777351bd534462f63e1c6afb10a7caa9fa2a421ae22c26e796fe31b1f"}, - {file = "regex-2024.4.28-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:47af45b6153522733aa6e92543938e97a70ce0900649ba626cf5aad290b737b6"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:99d6a550425cc51c656331af0e2b1651e90eaaa23fb4acde577cf15068e2e20f"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:bf29304a8011feb58913c382902fde3395957a47645bf848eea695839aa101b7"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:92da587eee39a52c91aebea8b850e4e4f095fe5928d415cb7ed656b3460ae79a"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6277d426e2f31bdbacb377d17a7475e32b2d7d1f02faaecc48d8e370c6a3ff31"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:28e1f28d07220c0f3da0e8fcd5a115bbb53f8b55cecf9bec0c946eb9a059a94c"}, - {file = "regex-2024.4.28-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:aaa179975a64790c1f2701ac562b5eeb733946eeb036b5bcca05c8d928a62f10"}, - {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:6f435946b7bf7a1b438b4e6b149b947c837cb23c704e780c19ba3e6855dbbdd3"}, - {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:19d6c11bf35a6ad077eb23852827f91c804eeb71ecb85db4ee1386825b9dc4db"}, - {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:fdae0120cddc839eb8e3c15faa8ad541cc6d906d3eb24d82fb041cfe2807bc1e"}, - {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:e672cf9caaf669053121f1766d659a8813bd547edef6e009205378faf45c67b8"}, - {file = "regex-2024.4.28-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:f57515750d07e14743db55d59759893fdb21d2668f39e549a7d6cad5d70f9fea"}, - {file = "regex-2024.4.28-cp310-cp310-win32.whl", hash = "sha256:a1409c4eccb6981c7baabc8888d3550df518add6e06fe74fa1d9312c1838652d"}, - {file = "regex-2024.4.28-cp310-cp310-win_amd64.whl", hash = "sha256:1f687a28640f763f23f8a9801fe9e1b37338bb1ca5d564ddd41619458f1f22d1"}, - {file = "regex-2024.4.28-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:84077821c85f222362b72fdc44f7a3a13587a013a45cf14534df1cbbdc9a6796"}, - {file = "regex-2024.4.28-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:b45d4503de8f4f3dc02f1d28a9b039e5504a02cc18906cfe744c11def942e9eb"}, - {file = "regex-2024.4.28-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:457c2cd5a646dd4ed536c92b535d73548fb8e216ebee602aa9f48e068fc393f3"}, - {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2b51739ddfd013c6f657b55a508de8b9ea78b56d22b236052c3a85a675102dc6"}, - {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:459226445c7d7454981c4c0ce0ad1a72e1e751c3e417f305722bbcee6697e06a"}, - {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:670fa596984b08a4a769491cbdf22350431970d0112e03d7e4eeaecaafcd0fec"}, - {file = "regex-2024.4.28-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:fe00f4fe11c8a521b173e6324d862ee7ee3412bf7107570c9b564fe1119b56fb"}, - {file = "regex-2024.4.28-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:36f392dc7763fe7924575475736bddf9ab9f7a66b920932d0ea50c2ded2f5636"}, - {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:23a412b7b1a7063f81a742463f38821097b6a37ce1e5b89dd8e871d14dbfd86b"}, - {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:f1d6e4b7b2ae3a6a9df53efbf199e4bfcff0959dbdb5fd9ced34d4407348e39a"}, - {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:499334ad139557de97cbc4347ee921c0e2b5e9c0f009859e74f3f77918339257"}, - {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:0940038bec2fe9e26b203d636c44d31dd8766abc1fe66262da6484bd82461ccf"}, - {file = "regex-2024.4.28-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:66372c2a01782c5fe8e04bff4a2a0121a9897e19223d9eab30c54c50b2ebeb7f"}, - {file = "regex-2024.4.28-cp311-cp311-win32.whl", hash = "sha256:c77d10ec3c1cf328b2f501ca32583625987ea0f23a0c2a49b37a39ee5c4c4630"}, - {file = "regex-2024.4.28-cp311-cp311-win_amd64.whl", hash = "sha256:fc0916c4295c64d6890a46e02d4482bb5ccf33bf1a824c0eaa9e83b148291f90"}, - {file = "regex-2024.4.28-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:08a1749f04fee2811c7617fdd46d2e46d09106fa8f475c884b65c01326eb15c5"}, - {file = "regex-2024.4.28-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:b8eb28995771c087a73338f695a08c9abfdf723d185e57b97f6175c5051ff1ae"}, - {file = "regex-2024.4.28-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:dd7ef715ccb8040954d44cfeff17e6b8e9f79c8019daae2fd30a8806ef5435c0"}, - {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:fb0315a2b26fde4005a7c401707c5352df274460f2f85b209cf6024271373013"}, - {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f2fc053228a6bd3a17a9b0a3f15c3ab3cf95727b00557e92e1cfe094b88cc662"}, - {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:7fe9739a686dc44733d52d6e4f7b9c77b285e49edf8570754b322bca6b85b4cc"}, - {file = "regex-2024.4.28-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a74fcf77d979364f9b69fcf8200849ca29a374973dc193a7317698aa37d8b01c"}, - {file = "regex-2024.4.28-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:965fd0cf4694d76f6564896b422724ec7b959ef927a7cb187fc6b3f4e4f59833"}, - {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:2fef0b38c34ae675fcbb1b5db760d40c3fc3612cfa186e9e50df5782cac02bcd"}, - {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:bc365ce25f6c7c5ed70e4bc674f9137f52b7dd6a125037f9132a7be52b8a252f"}, - {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:ac69b394764bb857429b031d29d9604842bc4cbfd964d764b1af1868eeebc4f0"}, - {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:144a1fc54765f5c5c36d6d4b073299832aa1ec6a746a6452c3ee7b46b3d3b11d"}, - {file = "regex-2024.4.28-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:2630ca4e152c221072fd4a56d4622b5ada876f668ecd24d5ab62544ae6793ed6"}, - {file = "regex-2024.4.28-cp312-cp312-win32.whl", hash = "sha256:7f3502f03b4da52bbe8ba962621daa846f38489cae5c4a7b5d738f15f6443d17"}, - {file = "regex-2024.4.28-cp312-cp312-win_amd64.whl", hash = "sha256:0dd3f69098511e71880fb00f5815db9ed0ef62c05775395968299cb400aeab82"}, - {file = "regex-2024.4.28-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:374f690e1dd0dbdcddea4a5c9bdd97632cf656c69113f7cd6a361f2a67221cb6"}, - {file = "regex-2024.4.28-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:25f87ae6b96374db20f180eab083aafe419b194e96e4f282c40191e71980c666"}, - {file = "regex-2024.4.28-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:5dbc1bcc7413eebe5f18196e22804a3be1bfdfc7e2afd415e12c068624d48247"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f85151ec5a232335f1be022b09fbbe459042ea1951d8a48fef251223fc67eee1"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:57ba112e5530530fd175ed550373eb263db4ca98b5f00694d73b18b9a02e7185"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:224803b74aab56aa7be313f92a8d9911dcade37e5f167db62a738d0c85fdac4b"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0a54a047b607fd2d2d52a05e6ad294602f1e0dec2291152b745870afc47c1397"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:0a2a512d623f1f2d01d881513af9fc6a7c46e5cfffb7dc50c38ce959f9246c94"}, - {file = "regex-2024.4.28-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:c06bf3f38f0707592898428636cbb75d0a846651b053a1cf748763e3063a6925"}, - {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:1031a5e7b048ee371ab3653aad3030ecfad6ee9ecdc85f0242c57751a05b0ac4"}, - {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:d7a353ebfa7154c871a35caca7bfd8f9e18666829a1dc187115b80e35a29393e"}, - {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:7e76b9cfbf5ced1aca15a0e5b6f229344d9b3123439ffce552b11faab0114a02"}, - {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:5ce479ecc068bc2a74cb98dd8dba99e070d1b2f4a8371a7dfe631f85db70fe6e"}, - {file = "regex-2024.4.28-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:7d77b6f63f806578c604dca209280e4c54f0fa9a8128bb8d2cc5fb6f99da4150"}, - {file = "regex-2024.4.28-cp38-cp38-win32.whl", hash = "sha256:d84308f097d7a513359757c69707ad339da799e53b7393819ec2ea36bc4beb58"}, - {file = "regex-2024.4.28-cp38-cp38-win_amd64.whl", hash = "sha256:2cc1b87bba1dd1a898e664a31012725e48af826bf3971e786c53e32e02adae6c"}, - {file = "regex-2024.4.28-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:7413167c507a768eafb5424413c5b2f515c606be5bb4ef8c5dee43925aa5718b"}, - {file = "regex-2024.4.28-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:108e2dcf0b53a7c4ab8986842a8edcb8ab2e59919a74ff51c296772e8e74d0ae"}, - {file = "regex-2024.4.28-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:f1c5742c31ba7d72f2dedf7968998730664b45e38827637e0f04a2ac7de2f5f1"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ecc6148228c9ae25ce403eade13a0961de1cb016bdb35c6eafd8e7b87ad028b1"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b7d893c8cf0e2429b823ef1a1d360a25950ed11f0e2a9df2b5198821832e1947"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4290035b169578ffbbfa50d904d26bec16a94526071ebec3dadbebf67a26b25e"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:44a22ae1cfd82e4ffa2066eb3390777dc79468f866f0625261a93e44cdf6482b"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:fd24fd140b69f0b0bcc9165c397e9b2e89ecbeda83303abf2a072609f60239e2"}, - {file = "regex-2024.4.28-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_12_x86_64.manylinux2010_x86_64.whl", hash = "sha256:39fb166d2196413bead229cd64a2ffd6ec78ebab83fff7d2701103cf9f4dfd26"}, - {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:9301cc6db4d83d2c0719f7fcda37229691745168bf6ae849bea2e85fc769175d"}, - {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:7c3d389e8d76a49923683123730c33e9553063d9041658f23897f0b396b2386f"}, - {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:99ef6289b62042500d581170d06e17f5353b111a15aa6b25b05b91c6886df8fc"}, - {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:b91d529b47798c016d4b4c1d06cc826ac40d196da54f0de3c519f5a297c5076a"}, - {file = "regex-2024.4.28-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:43548ad74ea50456e1c68d3c67fff3de64c6edb85bcd511d1136f9b5376fc9d1"}, - {file = "regex-2024.4.28-cp39-cp39-win32.whl", hash = "sha256:05d9b6578a22db7dedb4df81451f360395828b04f4513980b6bd7a1412c679cc"}, - {file = "regex-2024.4.28-cp39-cp39-win_amd64.whl", hash = "sha256:3986217ec830c2109875be740531feb8ddafe0dfa49767cdcd072ed7e8927962"}, - {file = "regex-2024.4.28.tar.gz", hash = "sha256:83ab366777ea45d58f72593adf35d36ca911ea8bd838483c1823b883a121b0e4"}, -] - -[[package]] -name = "requests" -version = "2.31.0" -description = "Python HTTP for Humans." -optional = false -python-versions = ">=3.7" -files = [ - {file = "requests-2.31.0-py3-none-any.whl", hash = "sha256:58cd2187c01e70e6e26505bca751777aa9f2ee0b7f4300988b709f44e013003f"}, - {file = "requests-2.31.0.tar.gz", hash = "sha256:942c5a758f98d790eaed1a29cb6eefc7ffb0d1cf7af05c3d2791656dbd6ad1e1"}, -] - -[package.dependencies] -certifi = ">=2017.4.17" -charset-normalizer = ">=2,<4" -idna = ">=2.5,<4" -urllib3 = ">=1.21.1,<3" - -[package.extras] -socks = ["PySocks (>=1.5.6,!=1.5.7)"] -use-chardet-on-py3 = ["chardet (>=3.0.2,<6)"] - -[[package]] -name = "setuptools" -version = "69.5.1" -description = "Easily download, build, install, upgrade, and uninstall Python packages" -optional = false -python-versions = ">=3.8" -files = [ - {file = "setuptools-69.5.1-py3-none-any.whl", hash = "sha256:c636ac361bc47580504644275c9ad802c50415c7522212252c033bd15f301f32"}, - {file = "setuptools-69.5.1.tar.gz", hash = "sha256:6c1fccdac05a97e598fb0ae3bbed5904ccb317337a51139dcd51453611bbb987"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "pygments-github-lexers (==0.0.5)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-favicon", "sphinx-inline-tabs", "sphinx-lint", "sphinx-notfound-page (>=1,<2)", "sphinx-reredirects", "sphinxcontrib-towncrier"] -testing = ["build[virtualenv]", "filelock (>=3.4.0)", "importlib-metadata", "ini2toml[lite] (>=0.9)", "jaraco.develop (>=7.21)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "mypy (==1.9)", "packaging (>=23.2)", "pip (>=19.1)", "pytest (>=6,!=8.1.1)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-home (>=0.5)", "pytest-mypy", "pytest-perf", "pytest-ruff (>=0.2.1)", "pytest-timeout", "pytest-xdist (>=3)", "tomli", "tomli-w (>=1.0.0)", "virtualenv (>=13.0.0)", "wheel"] -testing-integration = ["build[virtualenv] (>=1.0.3)", "filelock (>=3.4.0)", "jaraco.envs (>=2.2)", "jaraco.path (>=3.2.0)", "packaging (>=23.2)", "pytest", "pytest-enabler", "pytest-xdist", "tomli", "virtualenv (>=13.0.0)", "wheel"] - -[[package]] -name = "sniffio" -version = "1.3.1" -description = "Sniff out which async library your code is running under" -optional = false -python-versions = ">=3.7" -files = [ - {file = "sniffio-1.3.1-py3-none-any.whl", hash = "sha256:2f6da418d1f1e0fddd844478f41680e794e6051915791a034ff65e5f100525a2"}, - {file = "sniffio-1.3.1.tar.gz", hash = "sha256:f4324edc670a0f49750a81b895f35c3adb843cca46f0530f79fc1babb23789dc"}, -] - -[[package]] -name = "starlette" -version = "0.37.2" -description = "The little ASGI library that shines." -optional = false -python-versions = ">=3.8" -files = [ - {file = "starlette-0.37.2-py3-none-any.whl", hash = "sha256:6fe59f29268538e5d0d182f2791a479a0c64638e6935d1c6989e63fb2699c6ee"}, - {file = "starlette-0.37.2.tar.gz", hash = "sha256:9af890290133b79fc3db55474ade20f6220a364a0402e0b556e7cd5e1e093823"}, -] - -[package.dependencies] -anyio = ">=3.4.0,<5" -typing-extensions = {version = ">=3.10.0", markers = "python_version < \"3.10\""} - -[package.extras] -full = ["httpx (>=0.22.0)", "itsdangerous", "jinja2", "python-multipart (>=0.0.7)", "pyyaml"] - -[[package]] -name = "tenacity" -version = "8.2.3" -description = "Retry code until it succeeds" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tenacity-8.2.3-py3-none-any.whl", hash = "sha256:ce510e327a630c9e1beaf17d42e6ffacc88185044ad85cf74c0a8887c6a0f88c"}, - {file = "tenacity-8.2.3.tar.gz", hash = "sha256:5398ef0d78e63f40007c1fb4c0bff96e1911394d2fa8d194f77619c05ff6cc8a"}, -] - -[package.extras] -doc = ["reno", "sphinx", "tornado (>=4.5)"] - -[[package]] -name = "tokenizers" -version = "0.19.1" -description = "" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tokenizers-0.19.1-cp310-cp310-macosx_10_12_x86_64.whl", hash = "sha256:952078130b3d101e05ecfc7fc3640282d74ed26bcf691400f872563fca15ac97"}, - {file = "tokenizers-0.19.1-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:82c8b8063de6c0468f08e82c4e198763e7b97aabfe573fd4cf7b33930ca4df77"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:f03727225feaf340ceeb7e00604825addef622d551cbd46b7b775ac834c1e1c4"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:453e4422efdfc9c6b6bf2eae00d5e323f263fff62b29a8c9cd526c5003f3f642"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:02e81bf089ebf0e7f4df34fa0207519f07e66d8491d963618252f2e0729e0b46"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b07c538ba956843833fee1190cf769c60dc62e1cf934ed50d77d5502194d63b1"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e28cab1582e0eec38b1f38c1c1fb2e56bce5dc180acb1724574fc5f47da2a4fe"}, - {file = "tokenizers-0.19.1-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:8b01afb7193d47439f091cd8f070a1ced347ad0f9144952a30a41836902fe09e"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:7fb297edec6c6841ab2e4e8f357209519188e4a59b557ea4fafcf4691d1b4c98"}, - {file = "tokenizers-0.19.1-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:2e8a3dd055e515df7054378dc9d6fa8c8c34e1f32777fb9a01fea81496b3f9d3"}, - {file = "tokenizers-0.19.1-cp310-none-win32.whl", hash = "sha256:7ff898780a155ea053f5d934925f3902be2ed1f4d916461e1a93019cc7250837"}, - {file = "tokenizers-0.19.1-cp310-none-win_amd64.whl", hash = "sha256:bea6f9947e9419c2fda21ae6c32871e3d398cba549b93f4a65a2d369662d9403"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_10_12_x86_64.whl", hash = "sha256:5c88d1481f1882c2e53e6bb06491e474e420d9ac7bdff172610c4f9ad3898059"}, - {file = "tokenizers-0.19.1-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ddf672ed719b4ed82b51499100f5417d7d9f6fb05a65e232249268f35de5ed14"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:dadc509cc8a9fe460bd274c0e16ac4184d0958117cf026e0ea8b32b438171594"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:dfedf31824ca4915b511b03441784ff640378191918264268e6923da48104acc"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:ac11016d0a04aa6487b1513a3a36e7bee7eec0e5d30057c9c0408067345c48d2"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:76951121890fea8330d3a0df9a954b3f2a37e3ec20e5b0530e9a0044ca2e11fe"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:b342d2ce8fc8d00f376af068e3274e2e8649562e3bc6ae4a67784ded6b99428d"}, - {file = "tokenizers-0.19.1-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d16ff18907f4909dca9b076b9c2d899114dd6abceeb074eca0c93e2353f943aa"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:706a37cc5332f85f26efbe2bdc9ef8a9b372b77e4645331a405073e4b3a8c1c6"}, - {file = "tokenizers-0.19.1-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:16baac68651701364b0289979ecec728546133e8e8fe38f66fe48ad07996b88b"}, - {file = "tokenizers-0.19.1-cp311-none-win32.whl", hash = "sha256:9ed240c56b4403e22b9584ee37d87b8bfa14865134e3e1c3fb4b2c42fafd3256"}, - {file = "tokenizers-0.19.1-cp311-none-win_amd64.whl", hash = "sha256:ad57d59341710b94a7d9dbea13f5c1e7d76fd8d9bcd944a7a6ab0b0da6e0cc66"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_10_12_x86_64.whl", hash = "sha256:621d670e1b1c281a1c9698ed89451395d318802ff88d1fc1accff0867a06f153"}, - {file = "tokenizers-0.19.1-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:d924204a3dbe50b75630bd16f821ebda6a5f729928df30f582fb5aade90c818a"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4f3fefdc0446b1a1e6d81cd4c07088ac015665d2e812f6dbba4a06267d1a2c95"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:9620b78e0b2d52ef07b0d428323fb34e8ea1219c5eac98c2596311f20f1f9266"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:04ce49e82d100594715ac1b2ce87d1a36e61891a91de774755f743babcd0dd52"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c5c2ff13d157afe413bf7e25789879dd463e5a4abfb529a2d8f8473d8042e28f"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3174c76efd9d08f836bfccaca7cfec3f4d1c0a4cf3acbc7236ad577cc423c840"}, - {file = "tokenizers-0.19.1-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7c9d5b6c0e7a1e979bec10ff960fae925e947aab95619a6fdb4c1d8ff3708ce3"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:a179856d1caee06577220ebcfa332af046d576fb73454b8f4d4b0ba8324423ea"}, - {file = "tokenizers-0.19.1-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:952b80dac1a6492170f8c2429bd11fcaa14377e097d12a1dbe0ef2fb2241e16c"}, - {file = "tokenizers-0.19.1-cp312-none-win32.whl", hash = "sha256:01d62812454c188306755c94755465505836fd616f75067abcae529c35edeb57"}, - {file = "tokenizers-0.19.1-cp312-none-win_amd64.whl", hash = "sha256:b70bfbe3a82d3e3fb2a5e9b22a39f8d1740c96c68b6ace0086b39074f08ab89a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_10_12_x86_64.whl", hash = "sha256:bb9dfe7dae85bc6119d705a76dc068c062b8b575abe3595e3c6276480e67e3f1"}, - {file = "tokenizers-0.19.1-cp37-cp37m-macosx_11_0_arm64.whl", hash = "sha256:1f0360cbea28ea99944ac089c00de7b2e3e1c58f479fb8613b6d8d511ce98267"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:71e3ec71f0e78780851fef28c2a9babe20270404c921b756d7c532d280349214"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:b82931fa619dbad979c0ee8e54dd5278acc418209cc897e42fac041f5366d626"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:e8ff5b90eabdcdaa19af697885f70fe0b714ce16709cf43d4952f1f85299e73a"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e742d76ad84acbdb1a8e4694f915fe59ff6edc381c97d6dfdd054954e3478ad4"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d8c5d59d7b59885eab559d5bc082b2985555a54cda04dda4c65528d90ad252ad"}, - {file = "tokenizers-0.19.1-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6b2da5c32ed869bebd990c9420df49813709e953674c0722ff471a116d97b22d"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:638e43936cc8b2cbb9f9d8dde0fe5e7e30766a3318d2342999ae27f68fdc9bd6"}, - {file = "tokenizers-0.19.1-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:78e769eb3b2c79687d9cb0f89ef77223e8e279b75c0a968e637ca7043a84463f"}, - {file = "tokenizers-0.19.1-cp37-none-win32.whl", hash = "sha256:72791f9bb1ca78e3ae525d4782e85272c63faaef9940d92142aa3eb79f3407a3"}, - {file = "tokenizers-0.19.1-cp37-none-win_amd64.whl", hash = "sha256:f3bbb7a0c5fcb692950b041ae11067ac54826204318922da754f908d95619fbc"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_10_12_x86_64.whl", hash = "sha256:07f9295349bbbcedae8cefdbcfa7f686aa420be8aca5d4f7d1ae6016c128c0c5"}, - {file = "tokenizers-0.19.1-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:10a707cc6c4b6b183ec5dbfc5c34f3064e18cf62b4a938cb41699e33a99e03c1"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6309271f57b397aa0aff0cbbe632ca9d70430839ca3178bf0f06f825924eca22"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4ad23d37d68cf00d54af184586d79b84075ada495e7c5c0f601f051b162112dc"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:427c4f0f3df9109314d4f75b8d1f65d9477033e67ffaec4bca53293d3aca286d"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:e83a31c9cf181a0a3ef0abad2b5f6b43399faf5da7e696196ddd110d332519ee"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:c27b99889bd58b7e301468c0838c5ed75e60c66df0d4db80c08f43462f82e0d3"}, - {file = "tokenizers-0.19.1-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:bac0b0eb952412b0b196ca7a40e7dce4ed6f6926489313414010f2e6b9ec2adf"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:8a6298bde623725ca31c9035a04bf2ef63208d266acd2bed8c2cb7d2b7d53ce6"}, - {file = "tokenizers-0.19.1-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:08a44864e42fa6d7d76d7be4bec62c9982f6f6248b4aa42f7302aa01e0abfd26"}, - {file = "tokenizers-0.19.1-cp38-none-win32.whl", hash = "sha256:1de5bc8652252d9357a666e609cb1453d4f8e160eb1fb2830ee369dd658e8975"}, - {file = "tokenizers-0.19.1-cp38-none-win_amd64.whl", hash = "sha256:0bcce02bf1ad9882345b34d5bd25ed4949a480cf0e656bbd468f4d8986f7a3f1"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_10_12_x86_64.whl", hash = "sha256:0b9394bd204842a2a1fd37fe29935353742be4a3460b6ccbaefa93f58a8df43d"}, - {file = "tokenizers-0.19.1-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:4692ab92f91b87769d950ca14dbb61f8a9ef36a62f94bad6c82cc84a51f76f6a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6258c2ef6f06259f70a682491c78561d492e885adeaf9f64f5389f78aa49a051"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c85cf76561fbd01e0d9ea2d1cbe711a65400092bc52b5242b16cfd22e51f0c58"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:670b802d4d82bbbb832ddb0d41df7015b3e549714c0e77f9bed3e74d42400fbe"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:85aa3ab4b03d5e99fdd31660872249df5e855334b6c333e0bc13032ff4469c4a"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:cbf001afbbed111a79ca47d75941e9e5361297a87d186cbfc11ed45e30b5daba"}, - {file = "tokenizers-0.19.1-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b4c89aa46c269e4e70c4d4f9d6bc644fcc39bb409cb2a81227923404dd6f5227"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:39c1ec76ea1027438fafe16ecb0fb84795e62e9d643444c1090179e63808c69d"}, - {file = "tokenizers-0.19.1-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:c2a0d47a89b48d7daa241e004e71fb5a50533718897a4cd6235cb846d511a478"}, - {file = "tokenizers-0.19.1-cp39-none-win32.whl", hash = "sha256:61b7fe8886f2e104d4caf9218b157b106207e0f2a4905c9c7ac98890688aabeb"}, - {file = "tokenizers-0.19.1-cp39-none-win_amd64.whl", hash = "sha256:f97660f6c43efd3e0bfd3f2e3e5615bf215680bad6ee3d469df6454b8c6e8256"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_10_12_x86_64.whl", hash = "sha256:3b11853f17b54c2fe47742c56d8a33bf49ce31caf531e87ac0d7d13d327c9334"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:d26194ef6c13302f446d39972aaa36a1dda6450bc8949f5eb4c27f51191375bd"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e8d1ed93beda54bbd6131a2cb363a576eac746d5c26ba5b7556bc6f964425594"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ca407133536f19bdec44b3da117ef0d12e43f6d4b56ac4c765f37eca501c7bda"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ce05fde79d2bc2e46ac08aacbc142bead21614d937aac950be88dc79f9db9022"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:35583cd46d16f07c054efd18b5d46af4a2f070a2dd0a47914e66f3ff5efb2b1e"}, - {file = "tokenizers-0.19.1-pp310-pypy310_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:43350270bfc16b06ad3f6f07eab21f089adb835544417afda0f83256a8bf8b75"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b4399b59d1af5645bcee2072a463318114c39b8547437a7c2d6a186a1b5a0e2d"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6852c5b2a853b8b0ddc5993cd4f33bfffdca4fcc5d52f89dd4b8eada99379285"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bcd266ae85c3d39df2f7e7d0e07f6c41a55e9a3123bb11f854412952deacd828"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ecb2651956eea2aa0a2d099434134b1b68f1c31f9a5084d6d53f08ed43d45ff2"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:b279ab506ec4445166ac476fb4d3cc383accde1ea152998509a94d82547c8e2a"}, - {file = "tokenizers-0.19.1-pp37-pypy37_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:89183e55fb86e61d848ff83753f64cded119f5d6e1f553d14ffee3700d0a4a49"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_10_12_x86_64.whl", hash = "sha256:b2edbc75744235eea94d595a8b70fe279dd42f3296f76d5a86dde1d46e35f574"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:0e64bfde9a723274e9a71630c3e9494ed7b4c0f76a1faacf7fe294cd26f7ae7c"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:0b5ca92bfa717759c052e345770792d02d1f43b06f9e790ca0a1db62838816f3"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6f8a20266e695ec9d7a946a019c1d5ca4eddb6613d4f466888eee04f16eedb85"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:63c38f45d8f2a2ec0f3a20073cccb335b9f99f73b3c69483cd52ebc75369d8a1"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:dd26e3afe8a7b61422df3176e06664503d3f5973b94f45d5c45987e1cb711876"}, - {file = "tokenizers-0.19.1-pp38-pypy38_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:eddd5783a4a6309ce23432353cdb36220e25cbb779bfa9122320666508b44b88"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_10_12_x86_64.whl", hash = "sha256:56ae39d4036b753994476a1b935584071093b55c7a72e3b8288e68c313ca26e7"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:f9939ca7e58c2758c01b40324a59c034ce0cebad18e0d4563a9b1beab3018243"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c330c0eb815d212893c67a032e9dc1b38a803eccb32f3e8172c19cc69fbb439"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec11802450a2487cdf0e634b750a04cbdc1c4d066b97d94ce7dd2cb51ebb325b"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a2b718f316b596f36e1dae097a7d5b91fc5b85e90bf08b01ff139bd8953b25af"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_aarch64.whl", hash = "sha256:ed69af290c2b65169f0ba9034d1dc39a5db9459b32f1dd8b5f3f32a3fcf06eab"}, - {file = "tokenizers-0.19.1-pp39-pypy39_pp73-musllinux_1_1_x86_64.whl", hash = "sha256:f8a9c828277133af13f3859d1b6bf1c3cb6e9e1637df0e45312e6b7c2e622b1f"}, - {file = "tokenizers-0.19.1.tar.gz", hash = "sha256:ee59e6680ed0fdbe6b724cf38bd70400a0c1dd623b07ac729087270caeac88e3"}, -] - -[package.dependencies] -huggingface-hub = ">=0.16.4,<1.0" - -[package.extras] -dev = ["tokenizers[testing]"] -docs = ["setuptools-rust", "sphinx", "sphinx-rtd-theme"] -testing = ["black (==22.3)", "datasets", "numpy", "pytest", "requests", "ruff"] - -[[package]] -name = "tomli" -version = "2.0.1" -description = "A lil' TOML parser" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tomli-2.0.1-py3-none-any.whl", hash = "sha256:939de3e7a6161af0c887ef91b7d41a53e7c5a1ca976325f429cb46ea9bc30ecc"}, - {file = "tomli-2.0.1.tar.gz", hash = "sha256:de526c12914f0c550d15924c62d72abc48d6fe7364aa87328337a31007fe8a4f"}, -] - -[[package]] -name = "tqdm" -version = "4.66.2" -description = "Fast, Extensible Progress Meter" -optional = false -python-versions = ">=3.7" -files = [ - {file = "tqdm-4.66.2-py3-none-any.whl", hash = "sha256:1ee4f8a893eb9bef51c6e35730cebf234d5d0b6bd112b0271e10ed7c24a02bd9"}, - {file = "tqdm-4.66.2.tar.gz", hash = "sha256:6cd52cdf0fef0e0f543299cfc96fec90d7b8a7e88745f411ec33eb44d5ed3531"}, -] - -[package.dependencies] -colorama = {version = "*", markers = "platform_system == \"Windows\""} - -[package.extras] -dev = ["pytest (>=6)", "pytest-cov", "pytest-timeout", "pytest-xdist"] -notebook = ["ipywidgets (>=6)"] -slack = ["slack-sdk"] -telegram = ["requests"] - -[[package]] -name = "typeguard" -version = "4.2.1" -description = "Run-time type checker for Python" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typeguard-4.2.1-py3-none-any.whl", hash = "sha256:7da3bd46e61f03e0852f8d251dcbdc2a336aa495d7daff01e092b55327796eb8"}, - {file = "typeguard-4.2.1.tar.gz", hash = "sha256:c556a1b95948230510070ca53fa0341fb0964611bd05d598d87fb52115d65fee"}, -] - -[package.dependencies] -importlib-metadata = {version = ">=3.6", markers = "python_version < \"3.10\""} -typing-extensions = {version = ">=4.10.0", markers = "python_version < \"3.13\""} - -[package.extras] -doc = ["Sphinx (>=7)", "packaging", "sphinx-autodoc-typehints (>=1.2.0)"] -test = ["coverage[toml] (>=7)", "mypy (>=1.2.0)", "pytest (>=7)"] - -[[package]] -name = "types-regex" -version = "2023.12.25.20240311" -description = "Typing stubs for regex" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-regex-2023.12.25.20240311.tar.gz", hash = "sha256:ada8679a4c31688f580ce77eb3c2a451bd96710e30c5c5bb1be352a8f65f2cb3"}, - {file = "types_regex-2023.12.25.20240311-py3-none-any.whl", hash = "sha256:f435815f75ad0f15c9bdbfd04ff8c06ab553b9b4b51e218a6369e01e7520b35b"}, -] - -[[package]] -name = "types-requests" -version = "2.31.0.20240406" -description = "Typing stubs for requests" -optional = false -python-versions = ">=3.8" -files = [ - {file = "types-requests-2.31.0.20240406.tar.gz", hash = "sha256:4428df33c5503945c74b3f42e82b181e86ec7b724620419a2966e2de604ce1a1"}, - {file = "types_requests-2.31.0.20240406-py3-none-any.whl", hash = "sha256:6216cdac377c6b9a040ac1c0404f7284bd13199c0e1bb235f4324627e8898cf5"}, -] - -[package.dependencies] -urllib3 = ">=2" - -[[package]] -name = "typing-extensions" -version = "4.11.0" -description = "Backported and Experimental Type Hints for Python 3.8+" -optional = false -python-versions = ">=3.8" -files = [ - {file = "typing_extensions-4.11.0-py3-none-any.whl", hash = "sha256:c1f94d72897edaf4ce775bb7558d5b79d8126906a14ea5ed1635921406c0387a"}, - {file = "typing_extensions-4.11.0.tar.gz", hash = "sha256:83f085bd5ca59c80295fc2a82ab5dac679cbe02b9f33f7d83af68e241bea51b0"}, -] - -[[package]] -name = "urllib3" -version = "2.2.1" -description = "HTTP library with thread-safe connection pooling, file post, and more." -optional = false -python-versions = ">=3.8" -files = [ - {file = "urllib3-2.2.1-py3-none-any.whl", hash = "sha256:450b20ec296a467077128bff42b73080516e71b56ff59a60a02bef2232c4fa9d"}, - {file = "urllib3-2.2.1.tar.gz", hash = "sha256:d0570876c61ab9e520d776c38acbbb5b05a776d3f9ff98a5c8fd5162a444cf19"}, -] - -[package.extras] -brotli = ["brotli (>=1.0.9)", "brotlicffi (>=0.8.0)"] -h2 = ["h2 (>=4,<5)"] -socks = ["pysocks (>=1.5.6,!=1.5.7,<2.0)"] -zstd = ["zstandard (>=0.18.0)"] - -[[package]] -name = "uvicorn" -version = "0.29.0" -description = "The lightning-fast ASGI server." -optional = false -python-versions = ">=3.8" -files = [ - {file = "uvicorn-0.29.0-py3-none-any.whl", hash = "sha256:2c2aac7ff4f4365c206fd773a39bf4ebd1047c238f8b8268ad996829323473de"}, - {file = "uvicorn-0.29.0.tar.gz", hash = "sha256:6a69214c0b6a087462412670b3ef21224fa48cae0e452b5883e8e8bdfdd11dd0"}, -] - -[package.dependencies] -click = ">=7.0" -colorama = {version = ">=0.4", optional = true, markers = "sys_platform == \"win32\" and extra == \"standard\""} -h11 = ">=0.8" -httptools = {version = ">=0.5.0", optional = true, markers = "extra == \"standard\""} -python-dotenv = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -pyyaml = {version = ">=5.1", optional = true, markers = "extra == \"standard\""} -typing-extensions = {version = ">=4.0", markers = "python_version < \"3.11\""} -uvloop = {version = ">=0.14.0,<0.15.0 || >0.15.0,<0.15.1 || >0.15.1", optional = true, markers = "(sys_platform != \"win32\" and sys_platform != \"cygwin\") and platform_python_implementation != \"PyPy\" and extra == \"standard\""} -watchfiles = {version = ">=0.13", optional = true, markers = "extra == \"standard\""} -websockets = {version = ">=10.4", optional = true, markers = "extra == \"standard\""} - -[package.extras] -standard = ["colorama (>=0.4)", "httptools (>=0.5.0)", "python-dotenv (>=0.13)", "pyyaml (>=5.1)", "uvloop (>=0.14.0,!=0.15.0,!=0.15.1)", "watchfiles (>=0.13)", "websockets (>=10.4)"] - -[[package]] -name = "uvloop" -version = "0.19.0" -description = "Fast implementation of asyncio event loop on top of libuv" -optional = false -python-versions = ">=3.8.0" -files = [ - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:de4313d7f575474c8f5a12e163f6d89c0a878bc49219641d49e6f1444369a90e"}, - {file = "uvloop-0.19.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:5588bd21cf1fcf06bded085f37e43ce0e00424197e7c10e77afd4bbefffef428"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b1fd71c3843327f3bbc3237bedcdb6504fd50368ab3e04d0410e52ec293f5b8"}, - {file = "uvloop-0.19.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a05128d315e2912791de6088c34136bfcdd0c7cbc1cf85fd6fd1bb321b7c849"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:cd81bdc2b8219cb4b2556eea39d2e36bfa375a2dd021404f90a62e44efaaf957"}, - {file = "uvloop-0.19.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:5f17766fb6da94135526273080f3455a112f82570b2ee5daa64d682387fe0dcd"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:4ce6b0af8f2729a02a5d1575feacb2a94fc7b2e983868b009d51c9a9d2149bef"}, - {file = "uvloop-0.19.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:31e672bb38b45abc4f26e273be83b72a0d28d074d5b370fc4dcf4c4eb15417d2"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:570fc0ed613883d8d30ee40397b79207eedd2624891692471808a95069a007c1"}, - {file = "uvloop-0.19.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5138821e40b0c3e6c9478643b4660bd44372ae1e16a322b8fc07478f92684e24"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:91ab01c6cd00e39cde50173ba4ec68a1e578fee9279ba64f5221810a9e786533"}, - {file = "uvloop-0.19.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:47bf3e9312f63684efe283f7342afb414eea4d3011542155c7e625cd799c3b12"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:da8435a3bd498419ee8c13c34b89b5005130a476bda1d6ca8cfdde3de35cd650"}, - {file = "uvloop-0.19.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:02506dc23a5d90e04d4f65c7791e65cf44bd91b37f24cfc3ef6cf2aff05dc7ec"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2693049be9d36fef81741fddb3f441673ba12a34a704e7b4361efb75cf30befc"}, - {file = "uvloop-0.19.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:7010271303961c6f0fe37731004335401eb9075a12680738731e9c92ddd96ad6"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:5daa304d2161d2918fa9a17d5635099a2f78ae5b5960e742b2fcfbb7aefaa593"}, - {file = "uvloop-0.19.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:7207272c9520203fea9b93843bb775d03e1cf88a80a936ce760f60bb5add92f3"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:78ab247f0b5671cc887c31d33f9b3abfb88d2614b84e4303f1a63b46c046c8bd"}, - {file = "uvloop-0.19.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:472d61143059c84947aa8bb74eabbace30d577a03a1805b77933d6bd13ddebbd"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:45bf4c24c19fb8a50902ae37c5de50da81de4922af65baf760f7c0c42e1088be"}, - {file = "uvloop-0.19.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:271718e26b3e17906b28b67314c45d19106112067205119dddbd834c2b7ce797"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:34175c9fd2a4bc3adc1380e1261f60306344e3407c20a4d684fd5f3be010fa3d"}, - {file = "uvloop-0.19.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:e27f100e1ff17f6feeb1f33968bc185bf8ce41ca557deee9d9bbbffeb72030b7"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:13dfdf492af0aa0a0edf66807d2b465607d11c4fa48f4a1fd41cbea5b18e8e8b"}, - {file = "uvloop-0.19.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:6e3d4e85ac060e2342ff85e90d0c04157acb210b9ce508e784a944f852a40e67"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8ca4956c9ab567d87d59d49fa3704cf29e37109ad348f2d5223c9bf761a332e7"}, - {file = "uvloop-0.19.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f467a5fd23b4fc43ed86342641f3936a68ded707f4627622fa3f82a120e18256"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:492e2c32c2af3f971473bc22f086513cedfc66a130756145a931a90c3958cb17"}, - {file = "uvloop-0.19.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:2df95fca285a9f5bfe730e51945ffe2fa71ccbfdde3b0da5772b4ee4f2e770d5"}, - {file = "uvloop-0.19.0.tar.gz", hash = "sha256:0246f4fd1bf2bf702e06b0d45ee91677ee5c31242f39aab4ea6fe0c51aedd0fd"}, -] - -[package.extras] -docs = ["Sphinx (>=4.1.2,<4.2.0)", "sphinx-rtd-theme (>=0.5.2,<0.6.0)", "sphinxcontrib-asyncio (>=0.3.0,<0.4.0)"] -test = ["Cython (>=0.29.36,<0.30.0)", "aiohttp (==3.9.0b0)", "aiohttp (>=3.8.1)", "flake8 (>=5.0,<6.0)", "mypy (>=0.800)", "psutil", "pyOpenSSL (>=23.0.0,<23.1.0)", "pycodestyle (>=2.9.0,<2.10.0)"] - -[[package]] -name = "watchfiles" -version = "0.21.0" -description = "Simple, modern and high performance file watching and code reload in python." -optional = false -python-versions = ">=3.8" -files = [ - {file = "watchfiles-0.21.0-cp310-cp310-macosx_10_7_x86_64.whl", hash = "sha256:27b4035013f1ea49c6c0b42d983133b136637a527e48c132d368eb19bf1ac6aa"}, - {file = "watchfiles-0.21.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c81818595eff6e92535ff32825f31c116f867f64ff8cdf6562cd1d6b2e1e8f3e"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:6c107ea3cf2bd07199d66f156e3ea756d1b84dfd43b542b2d870b77868c98c03"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:0d9ac347653ebd95839a7c607608703b20bc07e577e870d824fa4801bc1cb124"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:5eb86c6acb498208e7663ca22dbe68ca2cf42ab5bf1c776670a50919a56e64ab"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:f564bf68404144ea6b87a78a3f910cc8de216c6b12a4cf0b27718bf4ec38d303"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:3d0f32ebfaa9c6011f8454994f86108c2eb9c79b8b7de00b36d558cadcedaa3d"}, - {file = "watchfiles-0.21.0-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:b6d45d9b699ecbac6c7bd8e0a2609767491540403610962968d258fd6405c17c"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:aff06b2cac3ef4616e26ba17a9c250c1fe9dd8a5d907d0193f84c499b1b6e6a9"}, - {file = "watchfiles-0.21.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:d9792dff410f266051025ecfaa927078b94cc7478954b06796a9756ccc7e14a9"}, - {file = "watchfiles-0.21.0-cp310-none-win32.whl", hash = "sha256:214cee7f9e09150d4fb42e24919a1e74d8c9b8a9306ed1474ecaddcd5479c293"}, - {file = "watchfiles-0.21.0-cp310-none-win_amd64.whl", hash = "sha256:1ad7247d79f9f55bb25ab1778fd47f32d70cf36053941f07de0b7c4e96b5d235"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_10_7_x86_64.whl", hash = "sha256:668c265d90de8ae914f860d3eeb164534ba2e836811f91fecc7050416ee70aa7"}, - {file = "watchfiles-0.21.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:3a23092a992e61c3a6a70f350a56db7197242f3490da9c87b500f389b2d01eef"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:e7941bbcfdded9c26b0bf720cb7e6fd803d95a55d2c14b4bd1f6a2772230c586"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:11cd0c3100e2233e9c53106265da31d574355c288e15259c0d40a4405cbae317"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:d78f30cbe8b2ce770160d3c08cff01b2ae9306fe66ce899b73f0409dc1846c1b"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:6674b00b9756b0af620aa2a3346b01f8e2a3dc729d25617e1b89cf6af4a54eb1"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:fd7ac678b92b29ba630d8c842d8ad6c555abda1b9ef044d6cc092dacbfc9719d"}, - {file = "watchfiles-0.21.0-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:9c873345680c1b87f1e09e0eaf8cf6c891b9851d8b4d3645e7efe2ec20a20cc7"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:49f56e6ecc2503e7dbe233fa328b2be1a7797d31548e7a193237dcdf1ad0eee0"}, - {file = "watchfiles-0.21.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:02d91cbac553a3ad141db016e3350b03184deaafeba09b9d6439826ee594b365"}, - {file = "watchfiles-0.21.0-cp311-none-win32.whl", hash = "sha256:ebe684d7d26239e23d102a2bad2a358dedf18e462e8808778703427d1f584400"}, - {file = "watchfiles-0.21.0-cp311-none-win_amd64.whl", hash = "sha256:4566006aa44cb0d21b8ab53baf4b9c667a0ed23efe4aaad8c227bfba0bf15cbe"}, - {file = "watchfiles-0.21.0-cp311-none-win_arm64.whl", hash = "sha256:c550a56bf209a3d987d5a975cdf2063b3389a5d16caf29db4bdddeae49f22078"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_10_7_x86_64.whl", hash = "sha256:51ddac60b96a42c15d24fbdc7a4bfcd02b5a29c047b7f8bf63d3f6f5a860949a"}, - {file = "watchfiles-0.21.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:511f0b034120cd1989932bf1e9081aa9fb00f1f949fbd2d9cab6264916ae89b1"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:cfb92d49dbb95ec7a07511bc9efb0faff8fe24ef3805662b8d6808ba8409a71a"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3f92944efc564867bbf841c823c8b71bb0be75e06b8ce45c084b46411475a915"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:642d66b75eda909fd1112d35c53816d59789a4b38c141a96d62f50a3ef9b3360"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:d23bcd6c8eaa6324fe109d8cac01b41fe9a54b8c498af9ce464c1aeeb99903d6"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:18d5b4da8cf3e41895b34e8c37d13c9ed294954907929aacd95153508d5d89d7"}, - {file = "watchfiles-0.21.0-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1b8d1eae0f65441963d805f766c7e9cd092f91e0c600c820c764a4ff71a0764c"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:1fd9a5205139f3c6bb60d11f6072e0552f0a20b712c85f43d42342d162be1235"}, - {file = "watchfiles-0.21.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:a1e3014a625bcf107fbf38eece0e47fa0190e52e45dc6eee5a8265ddc6dc5ea7"}, - {file = "watchfiles-0.21.0-cp312-none-win32.whl", hash = "sha256:9d09869f2c5a6f2d9df50ce3064b3391d3ecb6dced708ad64467b9e4f2c9bef3"}, - {file = "watchfiles-0.21.0-cp312-none-win_amd64.whl", hash = "sha256:18722b50783b5e30a18a8a5db3006bab146d2b705c92eb9a94f78c72beb94094"}, - {file = "watchfiles-0.21.0-cp312-none-win_arm64.whl", hash = "sha256:a3b9bec9579a15fb3ca2d9878deae789df72f2b0fdaf90ad49ee389cad5edab6"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_10_7_x86_64.whl", hash = "sha256:4ea10a29aa5de67de02256a28d1bf53d21322295cb00bd2d57fcd19b850ebd99"}, - {file = "watchfiles-0.21.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:40bca549fdc929b470dd1dbfcb47b3295cb46a6d2c90e50588b0a1b3bd98f429"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:9b37a7ba223b2f26122c148bb8d09a9ff312afca998c48c725ff5a0a632145f7"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:ec8c8900dc5c83650a63dd48c4d1d245343f904c4b64b48798c67a3767d7e165"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:8ad3fe0a3567c2f0f629d800409cd528cb6251da12e81a1f765e5c5345fd0137"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9d353c4cfda586db2a176ce42c88f2fc31ec25e50212650c89fdd0f560ee507b"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:83a696da8922314ff2aec02987eefb03784f473281d740bf9170181829133765"}, - {file = "watchfiles-0.21.0-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5a03651352fc20975ee2a707cd2d74a386cd303cc688f407296064ad1e6d1562"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:3ad692bc7792be8c32918c699638b660c0de078a6cbe464c46e1340dadb94c19"}, - {file = "watchfiles-0.21.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:06247538e8253975bdb328e7683f8515ff5ff041f43be6c40bff62d989b7d0b0"}, - {file = "watchfiles-0.21.0-cp38-none-win32.whl", hash = "sha256:9a0aa47f94ea9a0b39dd30850b0adf2e1cd32a8b4f9c7aa443d852aacf9ca214"}, - {file = "watchfiles-0.21.0-cp38-none-win_amd64.whl", hash = "sha256:8d5f400326840934e3507701f9f7269247f7c026d1b6cfd49477d2be0933cfca"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_10_7_x86_64.whl", hash = "sha256:7f762a1a85a12cc3484f77eee7be87b10f8c50b0b787bb02f4e357403cad0c0e"}, - {file = "watchfiles-0.21.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:6e9be3ef84e2bb9710f3f777accce25556f4a71e15d2b73223788d528fcc2052"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_12_i686.manylinux2010_i686.whl", hash = "sha256:4c48a10d17571d1275701e14a601e36959ffada3add8cdbc9e5061a6e3579a5d"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:6c889025f59884423428c261f212e04d438de865beda0b1e1babab85ef4c0f01"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_armv7l.manylinux2014_armv7l.whl", hash = "sha256:66fac0c238ab9a2e72d026b5fb91cb902c146202bbd29a9a1a44e8db7b710b6f"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b4a21f71885aa2744719459951819e7bf5a906a6448a6b2bbce8e9cc9f2c8128"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:1c9198c989f47898b2c22201756f73249de3748e0fc9de44adaf54a8b259cc0c"}, - {file = "watchfiles-0.21.0-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:d8f57c4461cd24fda22493109c45b3980863c58a25b8bec885ca8bea6b8d4b28"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:853853cbf7bf9408b404754b92512ebe3e3a83587503d766d23e6bf83d092ee6"}, - {file = "watchfiles-0.21.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:d5b1dc0e708fad9f92c296ab2f948af403bf201db8fb2eb4c8179db143732e49"}, - {file = "watchfiles-0.21.0-cp39-none-win32.whl", hash = "sha256:59137c0c6826bd56c710d1d2bda81553b5e6b7c84d5a676747d80caf0409ad94"}, - {file = "watchfiles-0.21.0-cp39-none-win_amd64.whl", hash = "sha256:6cb8fdc044909e2078c248986f2fc76f911f72b51ea4a4fbbf472e01d14faa58"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_10_7_x86_64.whl", hash = "sha256:ab03a90b305d2588e8352168e8c5a1520b721d2d367f31e9332c4235b30b8994"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-macosx_11_0_arm64.whl", hash = "sha256:927c589500f9f41e370b0125c12ac9e7d3a2fd166b89e9ee2828b3dda20bfe6f"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:1bd467213195e76f838caf2c28cd65e58302d0254e636e7c0fca81efa4a2e62c"}, - {file = "watchfiles-0.21.0-pp310-pypy310_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:02b73130687bc3f6bb79d8a170959042eb56eb3a42df3671c79b428cd73f17cc"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_10_7_x86_64.whl", hash = "sha256:08dca260e85ffae975448e344834d765983237ad6dc308231aa16e7933db763e"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-macosx_11_0_arm64.whl", hash = "sha256:3ccceb50c611c433145502735e0370877cced72a6c70fd2410238bcbc7fe51d8"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:57d430f5fb63fea141ab71ca9c064e80de3a20b427ca2febcbfcef70ff0ce895"}, - {file = "watchfiles-0.21.0-pp38-pypy38_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:0dd5fad9b9c0dd89904bbdea978ce89a2b692a7ee8a0ce19b940e538c88a809c"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_10_7_x86_64.whl", hash = "sha256:be6dd5d52b73018b21adc1c5d28ac0c68184a64769052dfeb0c5d9998e7f56a2"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-macosx_11_0_arm64.whl", hash = "sha256:b3cab0e06143768499384a8a5efb9c4dc53e19382952859e4802f294214f36ec"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8c6ed10c2497e5fedadf61e465b3ca12a19f96004c15dcffe4bd442ebadc2d85"}, - {file = "watchfiles-0.21.0-pp39-pypy39_pp73-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:43babacef21c519bc6631c5fce2a61eccdfc011b4bcb9047255e9620732c8097"}, - {file = "watchfiles-0.21.0.tar.gz", hash = "sha256:c76c635fabf542bb78524905718c39f736a98e5ab25b23ec6d4abede1a85a6a3"}, -] - -[package.dependencies] -anyio = ">=3.0.0" - -[[package]] -name = "websockets" -version = "12.0" -description = "An implementation of the WebSocket Protocol (RFC 6455 & 7692)" -optional = false -python-versions = ">=3.8" -files = [ - {file = "websockets-12.0-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:d554236b2a2006e0ce16315c16eaa0d628dab009c33b63ea03f41c6107958374"}, - {file = "websockets-12.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:2d225bb6886591b1746b17c0573e29804619c8f755b5598d875bb4235ea639be"}, - {file = "websockets-12.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:eb809e816916a3b210bed3c82fb88eaf16e8afcf9c115ebb2bacede1797d2547"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c588f6abc13f78a67044c6b1273a99e1cf31038ad51815b3b016ce699f0d75c2"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5aa9348186d79a5f232115ed3fa9020eab66d6c3437d72f9d2c8ac0c6858c558"}, - {file = "websockets-12.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6350b14a40c95ddd53e775dbdbbbc59b124a5c8ecd6fbb09c2e52029f7a9f480"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:70ec754cc2a769bcd218ed8d7209055667b30860ffecb8633a834dde27d6307c"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:6e96f5ed1b83a8ddb07909b45bd94833b0710f738115751cdaa9da1fb0cb66e8"}, - {file = "websockets-12.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:4d87be612cbef86f994178d5186add3d94e9f31cc3cb499a0482b866ec477603"}, - {file = "websockets-12.0-cp310-cp310-win32.whl", hash = "sha256:befe90632d66caaf72e8b2ed4d7f02b348913813c8b0a32fae1cc5fe3730902f"}, - {file = "websockets-12.0-cp310-cp310-win_amd64.whl", hash = "sha256:363f57ca8bc8576195d0540c648aa58ac18cf85b76ad5202b9f976918f4219cf"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:5d873c7de42dea355d73f170be0f23788cf3fa9f7bed718fd2830eefedce01b4"}, - {file = "websockets-12.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:3f61726cae9f65b872502ff3c1496abc93ffbe31b278455c418492016e2afc8f"}, - {file = "websockets-12.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:ed2fcf7a07334c77fc8a230755c2209223a7cc44fc27597729b8ef5425aa61a3"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e332c210b14b57904869ca9f9bf4ca32f5427a03eeb625da9b616c85a3a506c"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:5693ef74233122f8ebab026817b1b37fe25c411ecfca084b29bc7d6efc548f45"}, - {file = "websockets-12.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:6e9e7db18b4539a29cc5ad8c8b252738a30e2b13f033c2d6e9d0549b45841c04"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:6e2df67b8014767d0f785baa98393725739287684b9f8d8a1001eb2839031447"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:bea88d71630c5900690fcb03161ab18f8f244805c59e2e0dc4ffadae0a7ee0ca"}, - {file = "websockets-12.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:dff6cdf35e31d1315790149fee351f9e52978130cef6c87c4b6c9b3baf78bc53"}, - {file = "websockets-12.0-cp311-cp311-win32.whl", hash = "sha256:3e3aa8c468af01d70332a382350ee95f6986db479ce7af14d5e81ec52aa2b402"}, - {file = "websockets-12.0-cp311-cp311-win_amd64.whl", hash = "sha256:25eb766c8ad27da0f79420b2af4b85d29914ba0edf69f547cc4f06ca6f1d403b"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0e6e2711d5a8e6e482cacb927a49a3d432345dfe7dea8ace7b5790df5932e4df"}, - {file = "websockets-12.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:dbcf72a37f0b3316e993e13ecf32f10c0e1259c28ffd0a85cee26e8549595fbc"}, - {file = "websockets-12.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:12743ab88ab2af1d17dd4acb4645677cb7063ef4db93abffbf164218a5d54c6b"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7b645f491f3c48d3f8a00d1fce07445fab7347fec54a3e65f0725d730d5b99cb"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9893d1aa45a7f8b3bc4510f6ccf8db8c3b62120917af15e3de247f0780294b92"}, - {file = "websockets-12.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:1f38a7b376117ef7aff996e737583172bdf535932c9ca021746573bce40165ed"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:f764ba54e33daf20e167915edc443b6f88956f37fb606449b4a5b10ba42235a5"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:1e4b3f8ea6a9cfa8be8484c9221ec0257508e3a1ec43c36acdefb2a9c3b00aa2"}, - {file = "websockets-12.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:9fdf06fd06c32205a07e47328ab49c40fc1407cdec801d698a7c41167ea45113"}, - {file = "websockets-12.0-cp312-cp312-win32.whl", hash = "sha256:baa386875b70cbd81798fa9f71be689c1bf484f65fd6fb08d051a0ee4e79924d"}, - {file = "websockets-12.0-cp312-cp312-win_amd64.whl", hash = "sha256:ae0a5da8f35a5be197f328d4727dbcfafa53d1824fac3d96cdd3a642fe09394f"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:5f6ffe2c6598f7f7207eef9a1228b6f5c818f9f4d53ee920aacd35cec8110438"}, - {file = "websockets-12.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:9edf3fc590cc2ec20dc9d7a45108b5bbaf21c0d89f9fd3fd1685e223771dc0b2"}, - {file = "websockets-12.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:8572132c7be52632201a35f5e08348137f658e5ffd21f51f94572ca6c05ea81d"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:604428d1b87edbf02b233e2c207d7d528460fa978f9e391bd8aaf9c8311de137"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:1a9d160fd080c6285e202327aba140fc9a0d910b09e423afff4ae5cbbf1c7205"}, - {file = "websockets-12.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:87b4aafed34653e465eb77b7c93ef058516cb5acf3eb21e42f33928616172def"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:b2ee7288b85959797970114deae81ab41b731f19ebcd3bd499ae9ca0e3f1d2c8"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:7fa3d25e81bfe6a89718e9791128398a50dec6d57faf23770787ff441d851967"}, - {file = "websockets-12.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:a571f035a47212288e3b3519944f6bf4ac7bc7553243e41eac50dd48552b6df7"}, - {file = "websockets-12.0-cp38-cp38-win32.whl", hash = "sha256:3c6cc1360c10c17463aadd29dd3af332d4a1adaa8796f6b0e9f9df1fdb0bad62"}, - {file = "websockets-12.0-cp38-cp38-win_amd64.whl", hash = "sha256:1bf386089178ea69d720f8db6199a0504a406209a0fc23e603b27b300fdd6892"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:ab3d732ad50a4fbd04a4490ef08acd0517b6ae6b77eb967251f4c263011a990d"}, - {file = "websockets-12.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:a1d9697f3337a89691e3bd8dc56dea45a6f6d975f92e7d5f773bc715c15dde28"}, - {file = "websockets-12.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:1df2fbd2c8a98d38a66f5238484405b8d1d16f929bb7a33ed73e4801222a6f53"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:23509452b3bc38e3a057382c2e941d5ac2e01e251acce7adc74011d7d8de434c"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2e5fc14ec6ea568200ea4ef46545073da81900a2b67b3e666f04adf53ad452ec"}, - {file = "websockets-12.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:46e71dbbd12850224243f5d2aeec90f0aaa0f2dde5aeeb8fc8df21e04d99eff9"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:b81f90dcc6c85a9b7f29873beb56c94c85d6f0dac2ea8b60d995bd18bf3e2aae"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:a02413bc474feda2849c59ed2dfb2cddb4cd3d2f03a2fedec51d6e959d9b608b"}, - {file = "websockets-12.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:bbe6013f9f791944ed31ca08b077e26249309639313fff132bfbf3ba105673b9"}, - {file = "websockets-12.0-cp39-cp39-win32.whl", hash = "sha256:cbe83a6bbdf207ff0541de01e11904827540aa069293696dd528a6640bd6a5f6"}, - {file = "websockets-12.0-cp39-cp39-win_amd64.whl", hash = "sha256:fc4e7fa5414512b481a2483775a8e8be7803a35b30ca805afa4998a84f9fd9e8"}, - {file = "websockets-12.0-pp310-pypy310_pp73-macosx_10_9_x86_64.whl", hash = "sha256:248d8e2446e13c1d4326e0a6a4e9629cb13a11195051a73acf414812700badbd"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:f44069528d45a933997a6fef143030d8ca8042f0dfaad753e2906398290e2870"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:c4e37d36f0d19f0a4413d3e18c0d03d0c268ada2061868c1e6f5ab1a6d575077"}, - {file = "websockets-12.0-pp310-pypy310_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3d829f975fc2e527a3ef2f9c8f25e553eb7bc779c6665e8e1d52aa22800bb38b"}, - {file = "websockets-12.0-pp310-pypy310_pp73-win_amd64.whl", hash = "sha256:2c71bd45a777433dd9113847af751aae36e448bc6b8c361a566cb043eda6ec30"}, - {file = "websockets-12.0-pp38-pypy38_pp73-macosx_10_9_x86_64.whl", hash = "sha256:0bee75f400895aef54157b36ed6d3b308fcab62e5260703add87f44cee9c82a6"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:423fc1ed29f7512fceb727e2d2aecb952c46aa34895e9ed96071821309951123"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:27a5e9964ef509016759f2ef3f2c1e13f403725a5e6a1775555994966a66e931"}, - {file = "websockets-12.0-pp38-pypy38_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:c3181df4583c4d3994d31fb235dc681d2aaad744fbdbf94c4802485ececdecf2"}, - {file = "websockets-12.0-pp38-pypy38_pp73-win_amd64.whl", hash = "sha256:b067cb952ce8bf40115f6c19f478dc71c5e719b7fbaa511359795dfd9d1a6468"}, - {file = "websockets-12.0-pp39-pypy39_pp73-macosx_10_9_x86_64.whl", hash = "sha256:00700340c6c7ab788f176d118775202aadea7602c5cc6be6ae127761c16d6b0b"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:e469d01137942849cff40517c97a30a93ae79917752b34029f0ec72df6b46399"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ffefa1374cd508d633646d51a8e9277763a9b78ae71324183693959cf94635a7"}, - {file = "websockets-12.0-pp39-pypy39_pp73-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ba0cab91b3956dfa9f512147860783a1829a8d905ee218a9837c18f683239611"}, - {file = "websockets-12.0-pp39-pypy39_pp73-win_amd64.whl", hash = "sha256:2cb388a5bfb56df4d9a406783b7f9dbefb888c09b71629351cc6b036e9259370"}, - {file = "websockets-12.0-py3-none-any.whl", hash = "sha256:dc284bbc8d7c78a6c69e0c7325ab46ee5e40bb4d50e494d8131a07ef47500e9e"}, - {file = "websockets-12.0.tar.gz", hash = "sha256:81df9cbcbb6c260de1e007e58c011bfebe2dafc8435107b0537f393dd38c8b1b"}, -] - -[[package]] -name = "wrapt" -version = "1.16.0" -description = "Module for decorators, wrappers and monkey patching." -optional = false -python-versions = ">=3.6" -files = [ - {file = "wrapt-1.16.0-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:ffa565331890b90056c01db69c0fe634a776f8019c143a5ae265f9c6bc4bd6d4"}, - {file = "wrapt-1.16.0-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:e4fdb9275308292e880dcbeb12546df7f3e0f96c6b41197e0cf37d2826359020"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:bb2dee3874a500de01c93d5c71415fcaef1d858370d405824783e7a8ef5db440"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2a88e6010048489cda82b1326889ec075a8c856c2e6a256072b28eaee3ccf487"}, - {file = "wrapt-1.16.0-cp310-cp310-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:ac83a914ebaf589b69f7d0a1277602ff494e21f4c2f743313414378f8f50a4cf"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:73aa7d98215d39b8455f103de64391cb79dfcad601701a3aa0dddacf74911d72"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:807cc8543a477ab7422f1120a217054f958a66ef7314f76dd9e77d3f02cdccd0"}, - {file = "wrapt-1.16.0-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bf5703fdeb350e36885f2875d853ce13172ae281c56e509f4e6eca049bdfb136"}, - {file = "wrapt-1.16.0-cp310-cp310-win32.whl", hash = "sha256:f6b2d0c6703c988d334f297aa5df18c45e97b0af3679bb75059e0e0bd8b1069d"}, - {file = "wrapt-1.16.0-cp310-cp310-win_amd64.whl", hash = "sha256:decbfa2f618fa8ed81c95ee18a387ff973143c656ef800c9f24fb7e9c16054e2"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:1a5db485fe2de4403f13fafdc231b0dbae5eca4359232d2efc79025527375b09"}, - {file = "wrapt-1.16.0-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:75ea7d0ee2a15733684badb16de6794894ed9c55aa5e9903260922f0482e687d"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a452f9ca3e3267cd4d0fcf2edd0d035b1934ac2bd7e0e57ac91ad6b95c0c6389"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:43aa59eadec7890d9958748db829df269f0368521ba6dc68cc172d5d03ed8060"}, - {file = "wrapt-1.16.0-cp311-cp311-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:72554a23c78a8e7aa02abbd699d129eead8b147a23c56e08d08dfc29cfdddca1"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:d2efee35b4b0a347e0d99d28e884dfd82797852d62fcd7ebdeee26f3ceb72cf3"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:6dcfcffe73710be01d90cae08c3e548d90932d37b39ef83969ae135d36ef3956"}, - {file = "wrapt-1.16.0-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:eb6e651000a19c96f452c85132811d25e9264d836951022d6e81df2fff38337d"}, - {file = "wrapt-1.16.0-cp311-cp311-win32.whl", hash = "sha256:66027d667efe95cc4fa945af59f92c5a02c6f5bb6012bff9e60542c74c75c362"}, - {file = "wrapt-1.16.0-cp311-cp311-win_amd64.whl", hash = "sha256:aefbc4cb0a54f91af643660a0a150ce2c090d3652cf4052a5397fb2de549cd89"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:5eb404d89131ec9b4f748fa5cfb5346802e5ee8836f57d516576e61f304f3b7b"}, - {file = "wrapt-1.16.0-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:9090c9e676d5236a6948330e83cb89969f433b1943a558968f659ead07cb3b36"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:94265b00870aa407bd0cbcfd536f17ecde43b94fb8d228560a1e9d3041462d73"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:f2058f813d4f2b5e3a9eb2eb3faf8f1d99b81c3e51aeda4b168406443e8ba809"}, - {file = "wrapt-1.16.0-cp312-cp312-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:98b5e1f498a8ca1858a1cdbffb023bfd954da4e3fa2c0cb5853d40014557248b"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:14d7dc606219cdd7405133c713f2c218d4252f2a469003f8c46bb92d5d095d81"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:49aac49dc4782cb04f58986e81ea0b4768e4ff197b57324dcbd7699c5dfb40b9"}, - {file = "wrapt-1.16.0-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:418abb18146475c310d7a6dc71143d6f7adec5b004ac9ce08dc7a34e2babdc5c"}, - {file = "wrapt-1.16.0-cp312-cp312-win32.whl", hash = "sha256:685f568fa5e627e93f3b52fda002c7ed2fa1800b50ce51f6ed1d572d8ab3e7fc"}, - {file = "wrapt-1.16.0-cp312-cp312-win_amd64.whl", hash = "sha256:dcdba5c86e368442528f7060039eda390cc4091bfd1dca41e8046af7c910dda8"}, - {file = "wrapt-1.16.0-cp36-cp36m-macosx_10_9_x86_64.whl", hash = "sha256:d462f28826f4657968ae51d2181a074dfe03c200d6131690b7d65d55b0f360f8"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a33a747400b94b6d6b8a165e4480264a64a78c8a4c734b62136062e9a248dd39"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b3646eefa23daeba62643a58aac816945cadc0afaf21800a1421eeba5f6cfb9c"}, - {file = "wrapt-1.16.0-cp36-cp36m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:3ebf019be5c09d400cf7b024aa52b1f3aeebeff51550d007e92c3c1c4afc2a40"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_aarch64.whl", hash = "sha256:0d2691979e93d06a95a26257adb7bfd0c93818e89b1406f5a28f36e0d8c1e1fc"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_i686.whl", hash = "sha256:1acd723ee2a8826f3d53910255643e33673e1d11db84ce5880675954183ec47e"}, - {file = "wrapt-1.16.0-cp36-cp36m-musllinux_1_1_x86_64.whl", hash = "sha256:bc57efac2da352a51cc4658878a68d2b1b67dbe9d33c36cb826ca449d80a8465"}, - {file = "wrapt-1.16.0-cp36-cp36m-win32.whl", hash = "sha256:da4813f751142436b075ed7aa012a8778aa43a99f7b36afe9b742d3ed8bdc95e"}, - {file = "wrapt-1.16.0-cp36-cp36m-win_amd64.whl", hash = "sha256:6f6eac2360f2d543cc875a0e5efd413b6cbd483cb3ad7ebf888884a6e0d2e966"}, - {file = "wrapt-1.16.0-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:a0ea261ce52b5952bf669684a251a66df239ec6d441ccb59ec7afa882265d593"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:7bd2d7ff69a2cac767fbf7a2b206add2e9a210e57947dd7ce03e25d03d2de292"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:9159485323798c8dc530a224bd3ffcf76659319ccc7bbd52e01e73bd0241a0c5"}, - {file = "wrapt-1.16.0-cp37-cp37m-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:a86373cf37cd7764f2201b76496aba58a52e76dedfaa698ef9e9688bfd9e41cf"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:73870c364c11f03ed072dda68ff7aea6d2a3a5c3fe250d917a429c7432e15228"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:b935ae30c6e7400022b50f8d359c03ed233d45b725cfdd299462f41ee5ffba6f"}, - {file = "wrapt-1.16.0-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:db98ad84a55eb09b3c32a96c576476777e87c520a34e2519d3e59c44710c002c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win32.whl", hash = "sha256:9153ed35fc5e4fa3b2fe97bddaa7cbec0ed22412b85bcdaf54aeba92ea37428c"}, - {file = "wrapt-1.16.0-cp37-cp37m-win_amd64.whl", hash = "sha256:66dfbaa7cfa3eb707bbfcd46dab2bc6207b005cbc9caa2199bcbc81d95071a00"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:1dd50a2696ff89f57bd8847647a1c363b687d3d796dc30d4dd4a9d1689a706f0"}, - {file = "wrapt-1.16.0-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:44a2754372e32ab315734c6c73b24351d06e77ffff6ae27d2ecf14cf3d229202"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:8e9723528b9f787dc59168369e42ae1c3b0d3fadb2f1a71de14531d321ee05b0"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:dbed418ba5c3dce92619656802cc5355cb679e58d0d89b50f116e4a9d5a9603e"}, - {file = "wrapt-1.16.0-cp38-cp38-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:941988b89b4fd6b41c3f0bfb20e92bd23746579736b7343283297c4c8cbae68f"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:6a42cd0cfa8ffc1915aef79cb4284f6383d8a3e9dcca70c445dcfdd639d51267"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:1ca9b6085e4f866bd584fb135a041bfc32cab916e69f714a7d1d397f8c4891ca"}, - {file = "wrapt-1.16.0-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:d5e49454f19ef621089e204f862388d29e6e8d8b162efce05208913dde5b9ad6"}, - {file = "wrapt-1.16.0-cp38-cp38-win32.whl", hash = "sha256:c31f72b1b6624c9d863fc095da460802f43a7c6868c5dda140f51da24fd47d7b"}, - {file = "wrapt-1.16.0-cp38-cp38-win_amd64.whl", hash = "sha256:490b0ee15c1a55be9c1bd8609b8cecd60e325f0575fc98f50058eae366e01f41"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:9b201ae332c3637a42f02d1045e1d0cccfdc41f1f2f801dafbaa7e9b4797bfc2"}, - {file = "wrapt-1.16.0-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:2076fad65c6736184e77d7d4729b63a6d1ae0b70da4868adeec40989858eb3fb"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:c5cd603b575ebceca7da5a3a251e69561bec509e0b46e4993e1cac402b7247b8"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:b47cfad9e9bbbed2339081f4e346c93ecd7ab504299403320bf85f7f85c7d46c"}, - {file = "wrapt-1.16.0-cp39-cp39-manylinux_2_5_x86_64.manylinux1_x86_64.manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:f8212564d49c50eb4565e502814f694e240c55551a5f1bc841d4fcaabb0a9b8a"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:5f15814a33e42b04e3de432e573aa557f9f0f56458745c2074952f564c50e664"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:db2e408d983b0e61e238cf579c09ef7020560441906ca990fe8412153e3b291f"}, - {file = "wrapt-1.16.0-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:edfad1d29c73f9b863ebe7082ae9321374ccb10879eeabc84ba3b69f2579d537"}, - {file = "wrapt-1.16.0-cp39-cp39-win32.whl", hash = "sha256:ed867c42c268f876097248e05b6117a65bcd1e63b779e916fe2e33cd6fd0d3c3"}, - {file = "wrapt-1.16.0-cp39-cp39-win_amd64.whl", hash = "sha256:eb1b046be06b0fce7249f1d025cd359b4b80fc1c3e24ad9eca33e0dcdb2e4a35"}, - {file = "wrapt-1.16.0-py3-none-any.whl", hash = "sha256:6906c4100a8fcbf2fa735f6059214bb13b97f75b1a61777fcf6432121ef12ef1"}, - {file = "wrapt-1.16.0.tar.gz", hash = "sha256:5f370f952971e7d17c7d1ead40e49f32345a7f7a5373571ef44d800d06b1899d"}, -] - -[[package]] -name = "yarl" -version = "1.9.4" -description = "Yet another URL library" -optional = false -python-versions = ">=3.7" -files = [ - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_universal2.whl", hash = "sha256:a8c1df72eb746f4136fe9a2e72b0c9dc1da1cbd23b5372f94b5820ff8ae30e0e"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_10_9_x86_64.whl", hash = "sha256:a3a6ed1d525bfb91b3fc9b690c5a21bb52de28c018530ad85093cc488bee2dd2"}, - {file = "yarl-1.9.4-cp310-cp310-macosx_11_0_arm64.whl", hash = "sha256:c38c9ddb6103ceae4e4498f9c08fac9b590c5c71b0370f98714768e22ac6fa66"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d9e09c9d74f4566e905a0b8fa668c58109f7624db96a2171f21747abc7524234"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:b8477c1ee4bd47c57d49621a062121c3023609f7a13b8a46953eb6c9716ca392"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:d5ff2c858f5f6a42c2a8e751100f237c5e869cbde669a724f2062d4c4ef93551"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:357495293086c5b6d34ca9616a43d329317feab7917518bc97a08f9e55648455"}, - {file = "yarl-1.9.4-cp310-cp310-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:54525ae423d7b7a8ee81ba189f131054defdb122cde31ff17477951464c1691c"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_aarch64.whl", hash = "sha256:801e9264d19643548651b9db361ce3287176671fb0117f96b5ac0ee1c3530d53"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_i686.whl", hash = "sha256:e516dc8baf7b380e6c1c26792610230f37147bb754d6426462ab115a02944385"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_ppc64le.whl", hash = "sha256:7d5aaac37d19b2904bb9dfe12cdb08c8443e7ba7d2852894ad448d4b8f442863"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_s390x.whl", hash = "sha256:54beabb809ffcacbd9d28ac57b0db46e42a6e341a030293fb3185c409e626b8b"}, - {file = "yarl-1.9.4-cp310-cp310-musllinux_1_1_x86_64.whl", hash = "sha256:bac8d525a8dbc2a1507ec731d2867025d11ceadcb4dd421423a5d42c56818541"}, - {file = "yarl-1.9.4-cp310-cp310-win32.whl", hash = "sha256:7855426dfbddac81896b6e533ebefc0af2f132d4a47340cee6d22cac7190022d"}, - {file = "yarl-1.9.4-cp310-cp310-win_amd64.whl", hash = "sha256:848cd2a1df56ddbffeb375535fb62c9d1645dde33ca4d51341378b3f5954429b"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_universal2.whl", hash = "sha256:35a2b9396879ce32754bd457d31a51ff0a9d426fd9e0e3c33394bf4b9036b099"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_10_9_x86_64.whl", hash = "sha256:4c7d56b293cc071e82532f70adcbd8b61909eec973ae9d2d1f9b233f3d943f2c"}, - {file = "yarl-1.9.4-cp311-cp311-macosx_11_0_arm64.whl", hash = "sha256:d8a1c6c0be645c745a081c192e747c5de06e944a0d21245f4cf7c05e457c36e0"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:4b3c1ffe10069f655ea2d731808e76e0f452fc6c749bea04781daf18e6039525"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:549d19c84c55d11687ddbd47eeb348a89df9cb30e1993f1b128f4685cd0ebbf8"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:a7409f968456111140c1c95301cadf071bd30a81cbd7ab829169fb9e3d72eae9"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:e23a6d84d9d1738dbc6e38167776107e63307dfc8ad108e580548d1f2c587f42"}, - {file = "yarl-1.9.4-cp311-cp311-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:d8b889777de69897406c9fb0b76cdf2fd0f31267861ae7501d93003d55f54fbe"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_aarch64.whl", hash = "sha256:03caa9507d3d3c83bca08650678e25364e1843b484f19986a527630ca376ecce"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_i686.whl", hash = "sha256:4e9035df8d0880b2f1c7f5031f33f69e071dfe72ee9310cfc76f7b605958ceb9"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_ppc64le.whl", hash = "sha256:c0ec0ed476f77db9fb29bca17f0a8fcc7bc97ad4c6c1d8959c507decb22e8572"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_s390x.whl", hash = "sha256:ee04010f26d5102399bd17f8df8bc38dc7ccd7701dc77f4a68c5b8d733406958"}, - {file = "yarl-1.9.4-cp311-cp311-musllinux_1_1_x86_64.whl", hash = "sha256:49a180c2e0743d5d6e0b4d1a9e5f633c62eca3f8a86ba5dd3c471060e352ca98"}, - {file = "yarl-1.9.4-cp311-cp311-win32.whl", hash = "sha256:81eb57278deb6098a5b62e88ad8281b2ba09f2f1147c4767522353eaa6260b31"}, - {file = "yarl-1.9.4-cp311-cp311-win_amd64.whl", hash = "sha256:d1d2532b340b692880261c15aee4dc94dd22ca5d61b9db9a8a361953d36410b1"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_universal2.whl", hash = "sha256:0d2454f0aef65ea81037759be5ca9947539667eecebca092733b2eb43c965a81"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_10_9_x86_64.whl", hash = "sha256:44d8ffbb9c06e5a7f529f38f53eda23e50d1ed33c6c869e01481d3fafa6b8142"}, - {file = "yarl-1.9.4-cp312-cp312-macosx_11_0_arm64.whl", hash = "sha256:aaaea1e536f98754a6e5c56091baa1b6ce2f2700cc4a00b0d49eca8dea471074"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:3777ce5536d17989c91696db1d459574e9a9bd37660ea7ee4d3344579bb6f129"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:9fc5fc1eeb029757349ad26bbc5880557389a03fa6ada41703db5e068881e5f2"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ea65804b5dc88dacd4a40279af0cdadcfe74b3e5b4c897aa0d81cf86927fee78"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:aa102d6d280a5455ad6a0f9e6d769989638718e938a6a0a2ff3f4a7ff8c62cc4"}, - {file = "yarl-1.9.4-cp312-cp312-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:09efe4615ada057ba2d30df871d2f668af661e971dfeedf0c159927d48bbeff0"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_aarch64.whl", hash = "sha256:008d3e808d03ef28542372d01057fd09168419cdc8f848efe2804f894ae03e51"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_i686.whl", hash = "sha256:6f5cb257bc2ec58f437da2b37a8cd48f666db96d47b8a3115c29f316313654ff"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_ppc64le.whl", hash = "sha256:992f18e0ea248ee03b5a6e8b3b4738850ae7dbb172cc41c966462801cbf62cf7"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_s390x.whl", hash = "sha256:0e9d124c191d5b881060a9e5060627694c3bdd1fe24c5eecc8d5d7d0eb6faabc"}, - {file = "yarl-1.9.4-cp312-cp312-musllinux_1_1_x86_64.whl", hash = "sha256:3986b6f41ad22988e53d5778f91855dc0399b043fc8946d4f2e68af22ee9ff10"}, - {file = "yarl-1.9.4-cp312-cp312-win32.whl", hash = "sha256:4b21516d181cd77ebd06ce160ef8cc2a5e9ad35fb1c5930882baff5ac865eee7"}, - {file = "yarl-1.9.4-cp312-cp312-win_amd64.whl", hash = "sha256:a9bd00dc3bc395a662900f33f74feb3e757429e545d831eef5bb280252631984"}, - {file = "yarl-1.9.4-cp37-cp37m-macosx_10_9_x86_64.whl", hash = "sha256:63b20738b5aac74e239622d2fe30df4fca4942a86e31bf47a81a0e94c14df94f"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:d7d7f7de27b8944f1fee2c26a88b4dabc2409d2fea7a9ed3df79b67277644e17"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:c74018551e31269d56fab81a728f683667e7c28c04e807ba08f8c9e3bba32f14"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:ca06675212f94e7a610e85ca36948bb8fc023e458dd6c63ef71abfd482481aa5"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:5aef935237d60a51a62b86249839b51345f47564208c6ee615ed2a40878dccdd"}, - {file = "yarl-1.9.4-cp37-cp37m-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:2b134fd795e2322b7684155b7855cc99409d10b2e408056db2b93b51a52accc7"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_aarch64.whl", hash = "sha256:d25039a474c4c72a5ad4b52495056f843a7ff07b632c1b92ea9043a3d9950f6e"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_i686.whl", hash = "sha256:f7d6b36dd2e029b6bcb8a13cf19664c7b8e19ab3a58e0fefbb5b8461447ed5ec"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_ppc64le.whl", hash = "sha256:957b4774373cf6f709359e5c8c4a0af9f6d7875db657adb0feaf8d6cb3c3964c"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_s390x.whl", hash = "sha256:d7eeb6d22331e2fd42fce928a81c697c9ee2d51400bd1a28803965883e13cead"}, - {file = "yarl-1.9.4-cp37-cp37m-musllinux_1_1_x86_64.whl", hash = "sha256:6a962e04b8f91f8c4e5917e518d17958e3bdee71fd1d8b88cdce74dd0ebbf434"}, - {file = "yarl-1.9.4-cp37-cp37m-win32.whl", hash = "sha256:f3bc6af6e2b8f92eced34ef6a96ffb248e863af20ef4fde9448cc8c9b858b749"}, - {file = "yarl-1.9.4-cp37-cp37m-win_amd64.whl", hash = "sha256:ad4d7a90a92e528aadf4965d685c17dacff3df282db1121136c382dc0b6014d2"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_universal2.whl", hash = "sha256:ec61d826d80fc293ed46c9dd26995921e3a82146feacd952ef0757236fc137be"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_10_9_x86_64.whl", hash = "sha256:8be9e837ea9113676e5754b43b940b50cce76d9ed7d2461df1af39a8ee674d9f"}, - {file = "yarl-1.9.4-cp38-cp38-macosx_11_0_arm64.whl", hash = "sha256:bef596fdaa8f26e3d66af846bbe77057237cb6e8efff8cd7cc8dff9a62278bbf"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:2d47552b6e52c3319fede1b60b3de120fe83bde9b7bddad11a69fb0af7db32f1"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:84fc30f71689d7fc9168b92788abc977dc8cefa806909565fc2951d02f6b7d57"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:4aa9741085f635934f3a2583e16fcf62ba835719a8b2b28fb2917bb0537c1dfa"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:206a55215e6d05dbc6c98ce598a59e6fbd0c493e2de4ea6cc2f4934d5a18d130"}, - {file = "yarl-1.9.4-cp38-cp38-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:07574b007ee20e5c375a8fe4a0789fad26db905f9813be0f9fef5a68080de559"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_aarch64.whl", hash = "sha256:5a2e2433eb9344a163aced6a5f6c9222c0786e5a9e9cac2c89f0b28433f56e23"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_i686.whl", hash = "sha256:6ad6d10ed9b67a382b45f29ea028f92d25bc0bc1daf6c5b801b90b5aa70fb9ec"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_ppc64le.whl", hash = "sha256:6fe79f998a4052d79e1c30eeb7d6c1c1056ad33300f682465e1b4e9b5a188b78"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_s390x.whl", hash = "sha256:a825ec844298c791fd28ed14ed1bffc56a98d15b8c58a20e0e08c1f5f2bea1be"}, - {file = "yarl-1.9.4-cp38-cp38-musllinux_1_1_x86_64.whl", hash = "sha256:8619d6915b3b0b34420cf9b2bb6d81ef59d984cb0fde7544e9ece32b4b3043c3"}, - {file = "yarl-1.9.4-cp38-cp38-win32.whl", hash = "sha256:686a0c2f85f83463272ddffd4deb5e591c98aac1897d65e92319f729c320eece"}, - {file = "yarl-1.9.4-cp38-cp38-win_amd64.whl", hash = "sha256:a00862fb23195b6b8322f7d781b0dc1d82cb3bcac346d1e38689370cc1cc398b"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_universal2.whl", hash = "sha256:604f31d97fa493083ea21bd9b92c419012531c4e17ea6da0f65cacdcf5d0bd27"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_10_9_x86_64.whl", hash = "sha256:8a854227cf581330ffa2c4824d96e52ee621dd571078a252c25e3a3b3d94a1b1"}, - {file = "yarl-1.9.4-cp39-cp39-macosx_11_0_arm64.whl", hash = "sha256:ba6f52cbc7809cd8d74604cce9c14868306ae4aa0282016b641c661f981a6e91"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_aarch64.manylinux2014_aarch64.whl", hash = "sha256:a6327976c7c2f4ee6816eff196e25385ccc02cb81427952414a64811037bbc8b"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_ppc64le.manylinux2014_ppc64le.whl", hash = "sha256:8397a3817d7dcdd14bb266283cd1d6fc7264a48c186b986f32e86d86d35fbac5"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_s390x.manylinux2014_s390x.whl", hash = "sha256:e0381b4ce23ff92f8170080c97678040fc5b08da85e9e292292aba67fdac6c34"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_17_x86_64.manylinux2014_x86_64.whl", hash = "sha256:23d32a2594cb5d565d358a92e151315d1b2268bc10f4610d098f96b147370136"}, - {file = "yarl-1.9.4-cp39-cp39-manylinux_2_5_i686.manylinux1_i686.manylinux_2_17_i686.manylinux2014_i686.whl", hash = "sha256:ddb2a5c08a4eaaba605340fdee8fc08e406c56617566d9643ad8bf6852778fc7"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_aarch64.whl", hash = "sha256:26a1dc6285e03f3cc9e839a2da83bcbf31dcb0d004c72d0730e755b33466c30e"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_i686.whl", hash = "sha256:18580f672e44ce1238b82f7fb87d727c4a131f3a9d33a5e0e82b793362bf18b4"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_ppc64le.whl", hash = "sha256:29e0f83f37610f173eb7e7b5562dd71467993495e568e708d99e9d1944f561ec"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_s390x.whl", hash = "sha256:1f23e4fe1e8794f74b6027d7cf19dc25f8b63af1483d91d595d4a07eca1fb26c"}, - {file = "yarl-1.9.4-cp39-cp39-musllinux_1_1_x86_64.whl", hash = "sha256:db8e58b9d79200c76956cefd14d5c90af54416ff5353c5bfd7cbe58818e26ef0"}, - {file = "yarl-1.9.4-cp39-cp39-win32.whl", hash = "sha256:c7224cab95645c7ab53791022ae77a4509472613e839dab722a72abe5a684575"}, - {file = "yarl-1.9.4-cp39-cp39-win_amd64.whl", hash = "sha256:824d6c50492add5da9374875ce72db7a0733b29c2394890aef23d533106e2b15"}, - {file = "yarl-1.9.4-py3-none-any.whl", hash = "sha256:928cecb0ef9d5a7946eb6ff58417ad2fe9375762382f1bf5c55e61645f2c43ad"}, - {file = "yarl-1.9.4.tar.gz", hash = "sha256:566db86717cf8080b99b58b083b773a908ae40f06681e87e589a976faf8246bf"}, -] - -[package.dependencies] -idna = ">=2.0" -multidict = ">=4.0" - -[[package]] -name = "zipp" -version = "3.18.1" -description = "Backport of pathlib-compatible object wrapper for zip files" -optional = false -python-versions = ">=3.8" -files = [ - {file = "zipp-3.18.1-py3-none-any.whl", hash = "sha256:206f5a15f2af3dbaee80769fb7dc6f249695e940acca08dfb2a4769fe61e538b"}, - {file = "zipp-3.18.1.tar.gz", hash = "sha256:2884ed22e7d8961de1c9a05142eb69a247f120291bc0206a00a7642f09b5b715"}, -] - -[package.extras] -docs = ["furo", "jaraco.packaging (>=9.3)", "jaraco.tidelift (>=1.4)", "rst.linker (>=1.9)", "sphinx (>=3.5)", "sphinx-lint"] -testing = ["big-O", "jaraco.functools", "jaraco.itertools", "more-itertools", "pytest (>=6)", "pytest-checkdocs (>=2.4)", "pytest-cov", "pytest-enabler (>=2.2)", "pytest-ignore-flaky", "pytest-mypy", "pytest-ruff (>=0.2.1)"] - -[metadata] -lock-version = "2.0" -python-versions = "^3.9" -content-hash = "835f0c0a9a3bc2cea1347dc0f4a61c9f181b5cc934538b8849f5af2fb8266759" diff --git a/fiddle/backend/pyproject.toml b/fiddle/backend/pyproject.toml deleted file mode 100644 index 65d31c8ac..000000000 --- a/fiddle/backend/pyproject.toml +++ /dev/null @@ -1,19 +0,0 @@ -[tool.poetry] -name = "fiddle" -version = "0.1.0" -description = "" -authors = ["None"] -readme = "README.md" -packages = [{ include = "app", from = "." }] - - -[tool.poetry.dependencies] -python = "^3.9" -baml = "0.19.1" -fastapi = "^0.110.0" -uvicorn = { extras = ["standard"], version = "^0.29.0" } -python-dotenv = "^1.0.1" - -[build-system] -requires = ["poetry-core"] -build-backend = "poetry.core.masonry.api" diff --git a/fiddle/client.py b/fiddle/client.py deleted file mode 100644 index 3ef15a554..000000000 --- a/fiddle/client.py +++ /dev/null @@ -1,37 +0,0 @@ -import pprint -import requests - -payload = { - "files": [ - {"name": "baml_src/main.baml", "content": open('inputs/main.baml').read()}, - {"name": "baml_src/__tests__/ExtractVerbs/red_aardvark.json", "content": open('inputs/test_case.json').read()}, - ], -} - -prod_url = "https://prompt-fiddle.fly.dev" -local_url = "http://localhost:8000" - -try: - response = requests.post( - f'{prod_url}/fiddle', - json=payload, # Ensure 'payload' is defined before this line - stream=True, - ) - response.raise_for_status() # Raises an HTTPError if the response status code is 4XX or 5XX - - if response.encoding is None: - response.encoding = 'utf-8' - - for line in response.iter_lines(decode_unicode=True): - if line: # Filter out keep-alive new lines - print(line) - #pass - -except requests.exceptions.HTTPError as e: - print(f"HTTP Error: {e}") -except requests.exceptions.ConnectionError as e: - print(f"Error Connecting: {e}") -except requests.exceptions.Timeout as e: - print(f"Timeout Error: {e}") -except requests.exceptions.RequestException as e: - print(f"Unexpected Error: {e}") \ No newline at end of file diff --git a/fiddle/inputs/main.baml b/fiddle/inputs/main.baml deleted file mode 100644 index 2d3491c53..000000000 --- a/fiddle/inputs/main.baml +++ /dev/null @@ -1,43 +0,0 @@ -generator lang_python { - language python - // This is where your non-baml source code located - // (relative directory where pyproject.toml, package.json, etc. lives) - project_root ".." - // This command is used by "baml test" to run tests - // defined in the playground - test_command "python -m pytest -s" - // This command is used by "baml update-client" to install - // dependencies to your language environment - install_command "pip install baml@latest" - package_version_command "pip show baml" -} - -function ExtractVerbs { - input string - /// list of verbs - output string[] -} - -client GPT4 { - provider baml-openai-chat - options { - model gpt-4 - api_key env.OPENAI_API_KEY - } -} - -impl version1 { - client GPT4 - prompt #" - Extract the verbs from this INPUT: - - INPUT: - --- - {#input} - --- - {// this is a comment inside a prompt! //} - Return a {#print_type(output)}. - - Response: - "# -} diff --git a/fiddle/inputs/test_case.json b/fiddle/inputs/test_case.json deleted file mode 100644 index b56051127..000000000 --- a/fiddle/inputs/test_case.json +++ /dev/null @@ -1,3 +0,0 @@ -{ - "input": "Lou and Jim Whittaker built the Rainier climbing culture Rainier from scratch. There were no outfitters anywhere near the mountain, so they took over a building and made their own store. There was nowhere to get a beer after a summit day, so they built Whittaker’s Bunkhouse bar and hotel to serve guests with more than 30 rooms. There was nowhere to throw a party after a successful trip, so Lou bought a 12-foot-by-six-foot barrel from a company that made pickles and built a hot tub that could hold 18 naked people during big celebrations." -} \ No newline at end of file diff --git a/fiddle/latin.txt b/fiddle/latin.txt deleted file mode 100644 index bbb4a5120..000000000 --- a/fiddle/latin.txt +++ /dev/null @@ -1 +0,0 @@ -lorem ipsum dolor diff --git a/integ-tests/typescript/tests/shrek_img.png b/integ-tests/typescript/tests/shrek_img.png new file mode 100644 index 0000000000000000000000000000000000000000..7aaeadee053e55b2bb86a5b73d370f82becacb1b GIT binary patch literal 115070 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 i1h~>EoznR!=l=kQg%LnGZ30370000 { if (pathname && posthog) { let url = window.origin + pathname - if (searchParams.toString()) { + if (searchParams?.toString()) { url = url + `?${searchParams.toString()}` } posthog.capture('$pageview', { diff --git a/typescript/fiddle-frontend/app/[project_id]/_components/ProjectView.tsx b/typescript/fiddle-frontend/app/[project_id]/_components/ProjectView.tsx index 43854fe3d..5ca314d58 100644 --- a/typescript/fiddle-frontend/app/[project_id]/_components/ProjectView.tsx +++ b/typescript/fiddle-frontend/app/[project_id]/_components/ProjectView.tsx @@ -285,7 +285,7 @@ const ShareButton = ({ project, projectName }: { project: BAMLProject; projectNa onClick={async () => { setLoading(true) try { - let urlId = pathname.split('/')[1] + let urlId = pathname?.split('/')[1] if (!urlId) { urlId = await createUrl({ ...project, diff --git a/typescript/fiddle-frontend/app/[project_id]/_components/Tour.tsx b/typescript/fiddle-frontend/app/[project_id]/_components/Tour.tsx index 73ca25055..3e50316c7 100644 --- a/typescript/fiddle-frontend/app/[project_id]/_components/Tour.tsx +++ b/typescript/fiddle-frontend/app/[project_id]/_components/Tour.tsx @@ -85,7 +85,8 @@ export const InitialTour = () => { export const PostTestRunTour = () => { //const { test_results, test_result_url, test_result_exit_status } = useSelections() - const { project_id } = useParams() + const params = useParams() + const project_id = params?.project_id const steps = [ { diff --git a/typescript/fiddle-frontend/app/_components/ExampleProjectCard.tsx b/typescript/fiddle-frontend/app/_components/ExampleProjectCard.tsx index 1cdd8672c..f67c32313 100644 --- a/typescript/fiddle-frontend/app/_components/ExampleProjectCard.tsx +++ b/typescript/fiddle-frontend/app/_components/ExampleProjectCard.tsx @@ -19,7 +19,7 @@ import { unsavedChangesAtom } from '../[project_id]/_atoms/atoms' export const ExampleProjectCard = ({ project }: { project: BAMLProject }) => { // const searchParams = useSearchParams() const router = useRouter() - const selectedId = usePathname().replace('/', '') + const selectedId = usePathname()?.replace('/', '') const isSelected = selectedId === project.id || (project.id === 'extract-verbs' && selectedId === '') const unsavedChanges = useAtomValue(unsavedChangesAtom) return ( diff --git a/typescript/fiddle-frontend/next.config.mjs b/typescript/fiddle-frontend/next.config.mjs index bf309b2d0..ca6585f8b 100644 --- a/typescript/fiddle-frontend/next.config.mjs +++ b/typescript/fiddle-frontend/next.config.mjs @@ -1,12 +1,14 @@ /** @type {import('next').NextConfig} */ const nextConfig = { transpilePackages: ['jotai-devtools', '@baml/playground-common', '@gloo-ai/baml-schema-wasm-web', '@baml/common'], - rewrites: async () => [ - { - source: '/anthropic/:path*', - destination: 'https://api.anthropic.com/:path*', - }, - ], + rewrites: async () => { + return [ + { + source: '/anthropic/:path*', + destination: 'https://api.anthropic.com/:path*', + }, + ] + }, webpack(config, { isServer, dev }) { config.experiments = { ...config.experiments, diff --git a/typescript/fiddle-frontend/package.json b/typescript/fiddle-frontend/package.json index e4d7bb8f8..9496d803d 100644 --- a/typescript/fiddle-frontend/package.json +++ b/typescript/fiddle-frontend/package.json @@ -3,7 +3,7 @@ "version": "0.1.0", "private": true, "scripts": { - "dev": "NODE_ENV=development next dev", + "dev": "infisical run --env=test -- next dev", "build": "next build", "start": "next start", "lint": "next lint" @@ -37,6 +37,7 @@ "@vercel/kv": "^1.0.1", "class-variance-authority": "^0.7.0", "clsx": "^2.1.0", + "http-proxy": "^1.18.1", "jotai": "^2.8.0", "jotai-location": "^0.5.4", "json-schema-faker": "^0.5.6", @@ -62,6 +63,7 @@ }, "devDependencies": { "@githubocto/tailwind-vscode": "^1.0.5", + "@types/http-proxy": "^1.17.14", "@types/node": "^20.12.12", "@types/react": "^18", "@types/react-dom": "^18", diff --git a/typescript/fiddle-frontend/pages/api/[...path].ts b/typescript/fiddle-frontend/pages/api/[...path].ts new file mode 100644 index 000000000..931f1b795 --- /dev/null +++ b/typescript/fiddle-frontend/pages/api/[...path].ts @@ -0,0 +1,52 @@ +import httpProxy from 'http-proxy' +import { NextApiRequest, NextApiResponse } from 'next' +import url from 'url' + +const API_URL = process.env.API_URL // The actual URL of your API + +const proxy = httpProxy.createProxyServer() + +// Make sure that we don't parse JSON bodies on this route: +export const config = { + api: { + bodyParser: false, + }, +} + +export const proxyApi = (req: NextApiRequest, res: NextApiResponse): Promise => { + return new Promise((resolve, reject) => { + const siteUrl = process.env.NEXT_PUBLIC_SITE_URL + const originalUrlHeader = req.headers['baml-original-url'] as string + if (!originalUrlHeader) { + return reject(new Error('baml-original-url header is missing')) + } + // req.headers['origin'] = siteUrl + req.url = req?.url?.replace(/^\/api/, '') + console.log('originalUrlHeader', originalUrlHeader) + + proxy.on('proxyReq', function (proxyReq, req, res, options) { + if (originalUrlHeader.includes('openai.com')) { + if (process.env.OPENAI_API_KEY === undefined) { + return reject(new Error('OPENAI_API_KEY is missing')) + } + req.headers['Authorization'] = `Bearer ${process.env.OPENAI_API_KEY}` + proxyReq.setHeader('Authorization', `Bearer ${process.env.OPENAI_API_KEY}`) + } + if (originalUrlHeader.includes('anthropic')) { + if (process.env.ANTHROPIC_API_KEY === undefined) { + return reject(new Error('ANTHROPIC_API_KEY is missing')) + } + proxyReq.setHeader('x-api-key', process.env.ANTHROPIC_API_KEY) + } + }) + + proxy.web(req, res, { target: originalUrlHeader, changeOrigin: true }, (err) => { + if (err) { + return reject(err) + } + resolve() + }) + }) +} + +export default proxyApi diff --git a/typescript/fiddle-frontend/vercel-build.sh b/typescript/fiddle-frontend/vercel-build.sh index cb95f4251..fa068e6de 100644 --- a/typescript/fiddle-frontend/vercel-build.sh +++ b/typescript/fiddle-frontend/vercel-build.sh @@ -8,6 +8,7 @@ source $HOME/.cargo/env which cargo cd ../../engine/baml-schema-wasm +export OPENSSL_NO_VENDOR=1 # cargo install rustup target add wasm32-unknown-unknown cargo update -p wasm-bindgen diff --git a/typescript/fiddle-proxy/.gitignore b/typescript/fiddle-proxy/.gitignore new file mode 100644 index 000000000..b512c09d4 --- /dev/null +++ b/typescript/fiddle-proxy/.gitignore @@ -0,0 +1 @@ +node_modules \ No newline at end of file diff --git a/typescript/fiddle-proxy/Dockerfile b/typescript/fiddle-proxy/Dockerfile new file mode 100644 index 000000000..58670aee6 --- /dev/null +++ b/typescript/fiddle-proxy/Dockerfile @@ -0,0 +1,18 @@ +FROM node:18 + +# Create and change to the app directory. +WORKDIR /usr/src/app + +# RUN npm install -g pnpm + +# Copy package.json and pnpm-lock.yaml to the working directory +COPY package.json package-lock.json ./ + +# Install production dependencies. +RUN npm install --prod + +# Copy local code to the container image. +COPY . . + +# Run the web service on container startup. +CMD [ "node", "server.js" ] \ No newline at end of file diff --git a/fiddle/backend/fly.toml b/typescript/fiddle-proxy/fly.toml similarity index 63% rename from fiddle/backend/fly.toml rename to typescript/fiddle-proxy/fly.toml index 2b4b5e6a2..186c4e748 100644 --- a/fiddle/backend/fly.toml +++ b/typescript/fiddle-proxy/fly.toml @@ -1,15 +1,15 @@ -# fly.toml app configuration file generated for prompt-fiddle on 2024-04-03T17:52:23-07:00 +# fly.toml app configuration file generated for fiddle-proxy on 2024-06-11T17:44:14-07:00 # # See https://fly.io/docs/reference/configuration/ for information about how to use this file. # -app = 'prompt-fiddle' -primary_region = 'lax' +app = 'fiddle-proxy' +primary_region = 'iad' [build] [http_service] - internal_port = 8000 + internal_port = 3000 force_https = true auto_stop_machines = true auto_start_machines = true @@ -19,4 +19,4 @@ primary_region = 'lax' [[vm]] memory = '1gb' cpu_kind = 'shared' - cpus = 2 + cpus = 1 diff --git a/typescript/fiddle-proxy/package-lock.json b/typescript/fiddle-proxy/package-lock.json new file mode 100644 index 000000000..486b3e150 --- /dev/null +++ b/typescript/fiddle-proxy/package-lock.json @@ -0,0 +1,2539 @@ +{ + "name": "fiddle-proxy", + "version": "1.0.0", + "lockfileVersion": 3, + "requires": true, + "packages": { + "": { + "name": "fiddle-proxy", + "version": "1.0.0", + "license": "ISC", + "dependencies": { + "cors": "^2.8.5", + "express": "^4.19.2", + "http-proxy-middleware": "^3.0.0" + }, + "devDependencies": { + "@flydotio/node-demo": "^0.2.1" + } + }, + "node_modules/@alloc/quick-lru": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/@alloc/quick-lru/-/quick-lru-5.2.0.tgz", + "integrity": "sha512-UrcABB+4bUrFABwbluTIBErXwvbsU/V7TZWfmbgJfbkwiBuziS9gxdODUyuiecfdGQ85jglMW6juS3+z5TsKLw==", + "dev": true, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/@flydotio/node-demo": { + "version": "0.2.1", + "resolved": "https://registry.npmjs.org/@flydotio/node-demo/-/node-demo-0.2.1.tgz", + "integrity": "sha512-IwcNvOBrJSfumNA6giSUKG//g9ppz6lYsrQ4CWrqtC/krRWUbH3lBN/JXFg+1+fo4ZYnTp918gxPgtuJmxtb4g==", + "dev": true, + "dependencies": { + "chalk": "^5.2.0", + "diff": "^5.1.0", + "ejs": "^3.1.9", + "tailwindcss": "^3.3.2", + "yargs": "^17.7.1" + }, + "bin": { + "node-demo": "index.js" + }, + "engines": { + "node": ">=16.0.0" + } + }, + "node_modules/@isaacs/cliui": { + "version": "8.0.2", + "resolved": "https://registry.npmjs.org/@isaacs/cliui/-/cliui-8.0.2.tgz", + "integrity": "sha512-O8jcjabXaleOG9DQ0+ARXWZBTfnP4WNAqzuiJK7ll44AmxGKv/J2M4TPjxjY3znBCfvBXFzucm1twdyFybFqEA==", + "dev": true, + "dependencies": { + "string-width": "^5.1.2", + "string-width-cjs": "npm:string-width@^4.2.0", + "strip-ansi": "^7.0.1", + "strip-ansi-cjs": "npm:strip-ansi@^6.0.1", + "wrap-ansi": "^8.1.0", + "wrap-ansi-cjs": "npm:wrap-ansi@^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/@jridgewell/gen-mapping": { + "version": "0.3.5", + "resolved": "https://registry.npmjs.org/@jridgewell/gen-mapping/-/gen-mapping-0.3.5.tgz", + "integrity": "sha512-IzL8ZoEDIBRWEzlCcRhOaCupYyN5gdIK+Q6fbFdPDg6HqX6jpkItn7DFIpW9LQzXG6Df9sA7+OKnq0qlz/GaQg==", + "dev": true, + "dependencies": { + "@jridgewell/set-array": "^1.2.1", + "@jridgewell/sourcemap-codec": "^1.4.10", + "@jridgewell/trace-mapping": "^0.3.24" + }, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/resolve-uri": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/@jridgewell/resolve-uri/-/resolve-uri-3.1.2.tgz", + "integrity": "sha512-bRISgCIjP20/tbWSPWMEi54QVPRZExkuD9lJL+UIxUKtwVJA8wW1Trb1jMs1RFXo1CBTNZ/5hpC9QvmKWdopKw==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/set-array": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/@jridgewell/set-array/-/set-array-1.2.1.tgz", + "integrity": "sha512-R8gLRTZeyp03ymzP/6Lil/28tGeGEzhx1q2k703KGWRAI1VdvPIXdG70VJc2pAMw3NA6JKL5hhFu1sJX0Mnn/A==", + "dev": true, + "engines": { + "node": ">=6.0.0" + } + }, + "node_modules/@jridgewell/sourcemap-codec": { + "version": "1.4.15", + "resolved": "https://registry.npmjs.org/@jridgewell/sourcemap-codec/-/sourcemap-codec-1.4.15.tgz", + "integrity": "sha512-eF2rxCRulEKXHTRiDrDy6erMYWqNw4LPdQ8UQA4huuxaQsVeRPFl2oM8oDGxMFhJUWZf9McpLtJasDDZb/Bpeg==", + "dev": true + }, + "node_modules/@jridgewell/trace-mapping": { + "version": "0.3.25", + "resolved": "https://registry.npmjs.org/@jridgewell/trace-mapping/-/trace-mapping-0.3.25.tgz", + "integrity": "sha512-vNk6aEwybGtawWmy/PzwnGDOjCkLWSD2wqvjGGAgOAwCGWySYXfYoxt00IJkTF+8Lb57DwOb3Aa0o9CApepiYQ==", + "dev": true, + "dependencies": { + "@jridgewell/resolve-uri": "^3.1.0", + "@jridgewell/sourcemap-codec": "^1.4.14" + } + }, + "node_modules/@nodelib/fs.scandir": { + "version": "2.1.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.scandir/-/fs.scandir-2.1.5.tgz", + "integrity": "sha512-vq24Bq3ym5HEQm2NKCr3yXDwjc7vTsEThRDnkp2DK9p1uqLR+DHurm/NOTo0KG7HYHU7eppKZj3MyqYuMBf62g==", + "dev": true, + "dependencies": { + "@nodelib/fs.stat": "2.0.5", + "run-parallel": "^1.1.9" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.stat": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/@nodelib/fs.stat/-/fs.stat-2.0.5.tgz", + "integrity": "sha512-RkhPPp2zrqDAQA/2jNhnztcPAlv64XdhIp7a7454A5ovI7Bukxgt7MX7udwAu3zg1DcpPU0rz3VV1SeaqvY4+A==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@nodelib/fs.walk": { + "version": "1.2.8", + "resolved": "https://registry.npmjs.org/@nodelib/fs.walk/-/fs.walk-1.2.8.tgz", + "integrity": "sha512-oGB+UxlgWcgQkgwo8GcEGwemoTFt3FIO9ababBmaGwXIoBKZ+GTy0pP185beGg7Llih/NSHSV2XAs1lnznocSg==", + "dev": true, + "dependencies": { + "@nodelib/fs.scandir": "2.1.5", + "fastq": "^1.6.0" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/@pkgjs/parseargs": { + "version": "0.11.0", + "resolved": "https://registry.npmjs.org/@pkgjs/parseargs/-/parseargs-0.11.0.tgz", + "integrity": "sha512-+1VkjdD0QBLPodGrJUeqarH8VAIvQODIbwh9XpP5Syisf7YoQgsJKPNFoqqLQlu+VQ/tVSshMR6loPMn8U+dPg==", + "dev": true, + "optional": true, + "engines": { + "node": ">=14" + } + }, + "node_modules/@types/http-proxy": { + "version": "1.17.14", + "resolved": "https://registry.npmjs.org/@types/http-proxy/-/http-proxy-1.17.14.tgz", + "integrity": "sha512-SSrD0c1OQzlFX7pGu1eXxSEjemej64aaNPRhhVYUGqXh0BtldAAx37MG8btcumvpgKyZp1F5Gn3JkktdxiFv6w==", + "dependencies": { + "@types/node": "*" + } + }, + "node_modules/@types/node": { + "version": "20.14.2", + "resolved": "https://registry.npmjs.org/@types/node/-/node-20.14.2.tgz", + "integrity": "sha512-xyu6WAMVwv6AKFLB+e/7ySZVr/0zLCzOa7rSpq6jNwpqOrUbcACDWC+53d4n2QHOnDou0fbIsg8wZu/sxrnI4Q==", + "dependencies": { + "undici-types": "~5.26.4" + } + }, + "node_modules/accepts": { + "version": "1.3.8", + "resolved": "https://registry.npmjs.org/accepts/-/accepts-1.3.8.tgz", + "integrity": "sha512-PYAthTa2m2VKxuvSD3DPC/Gy+U+sOA1LAuT8mkmRuvw+NACSaeXEQ+NHcVF7rONl6qcaxV3Uuemwawk+7+SJLw==", + "dependencies": { + "mime-types": "~2.1.34", + "negotiator": "0.6.3" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/ansi-regex": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-6.0.1.tgz", + "integrity": "sha512-n5M855fKb2SsfMIiFFoVrABHJC8QtHwVx+mHWP3QcEqBHYienj5dHSgjbxtC0WEZXYt4wcD6zrQElDPhFuZgfA==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-regex?sponsor=1" + } + }, + "node_modules/ansi-styles": { + "version": "6.2.1", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-6.2.1.tgz", + "integrity": "sha512-bN798gFfQX+viw3R7yrGWRqnrN2oRkEkUjjl4JNn4E8GxxbjtG3FbrEIIY3l8/hrwUwIeCZvi4QuOTP4MErVug==", + "dev": true, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/any-promise": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/any-promise/-/any-promise-1.3.0.tgz", + "integrity": "sha512-7UvmKalWRt1wgjL1RrGxoSJW/0QZFIegpeGvZG9kjp8vrRu55XTHbwnqq2GpXm9uLbcuhxm3IqX9OB4MZR1b2A==", + "dev": true + }, + "node_modules/anymatch": { + "version": "3.1.3", + "resolved": "https://registry.npmjs.org/anymatch/-/anymatch-3.1.3.tgz", + "integrity": "sha512-KMReFUr0B4t+D+OBkjR3KYqvocp2XaSzO55UcB6mgQMd3KbcE+mWTyvVV7D/zsdEbNnV6acZUutkiHQXvTr1Rw==", + "dev": true, + "dependencies": { + "normalize-path": "^3.0.0", + "picomatch": "^2.0.4" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/arg": { + "version": "5.0.2", + "resolved": "https://registry.npmjs.org/arg/-/arg-5.0.2.tgz", + "integrity": "sha512-PYjyFOLKQ9y57JvQ6QLo8dAgNqswh8M1RMJYdQduT6xbWSgK36P/Z/v+p888pM69jMMfS8Xd8F6I1kQ/I9HUGg==", + "dev": true + }, + "node_modules/array-flatten": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/array-flatten/-/array-flatten-1.1.1.tgz", + "integrity": "sha512-PCVAQswWemu6UdxsDFFX/+gVeYqKAod3D3UVm91jHwynguOwAvYPhx8nNlM++NqRcK6CxxpUafjmhIdKiHibqg==" + }, + "node_modules/async": { + "version": "3.2.5", + "resolved": "https://registry.npmjs.org/async/-/async-3.2.5.tgz", + "integrity": "sha512-baNZyqaaLhyLVKm/DlvdW051MSgO6b8eVfIezl9E5PqWxFgzLm/wQntEW4zOytVburDEr0JlALEpdOFwvErLsg==", + "dev": true + }, + "node_modules/balanced-match": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/balanced-match/-/balanced-match-1.0.2.tgz", + "integrity": "sha512-3oSeUO0TMV67hN1AmbXsK4yaqU7tjiHlbxRDZOpH0KW9+CeX4bRAaX0Anxt0tx2MrpRpWwQaPwIlISEJhYU5Pw==", + "dev": true + }, + "node_modules/binary-extensions": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/binary-extensions/-/binary-extensions-2.3.0.tgz", + "integrity": "sha512-Ceh+7ox5qe7LJuLHoY0feh3pHuUDHAcRUeyL2VYghZwfpkNIy/+8Ocg0a3UuSoYzavmylwuLWQOf3hl0jjMMIw==", + "dev": true, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/body-parser": { + "version": "1.20.2", + "resolved": "https://registry.npmjs.org/body-parser/-/body-parser-1.20.2.tgz", + "integrity": "sha512-ml9pReCu3M61kGlqoTm2umSXTlRTuGTx0bfYj+uIUKKYycG5NtSbeetV3faSU6R7ajOPw0g/J1PvK4qNy7s5bA==", + "dependencies": { + "bytes": "3.1.2", + "content-type": "~1.0.5", + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "on-finished": "2.4.1", + "qs": "6.11.0", + "raw-body": "2.5.2", + "type-is": "~1.6.18", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/brace-expansion": { + "version": "1.1.11", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-1.1.11.tgz", + "integrity": "sha512-iCuPHDFgrHX7H2vEI/5xpz07zSHB00TpugqhmYtVmMO6518mCuRMoOYFldEBl0g187ufozdaHgWKcYFb61qGiA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0", + "concat-map": "0.0.1" + } + }, + "node_modules/braces": { + "version": "3.0.3", + "resolved": "https://registry.npmjs.org/braces/-/braces-3.0.3.tgz", + "integrity": "sha512-yQbXgO/OSZVD2IsiLlro+7Hf6Q18EJrKSEsdoMzKePKXct3gvD8oLcOQdIzGupr5Fj+EDe8gO/lxc1BzfMpxvA==", + "dependencies": { + "fill-range": "^7.1.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/bytes": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/bytes/-/bytes-3.1.2.tgz", + "integrity": "sha512-/Nf7TyzTx6S3yRJObOAV7956r8cr2+Oj8AC5dt8wSP3BQAoeX58NoHyCU8P8zGkNXStjTSi6fzO6F0pBdcYbEg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/call-bind": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/call-bind/-/call-bind-1.0.7.tgz", + "integrity": "sha512-GHTSNSYICQ7scH7sZ+M2rFopRoLh8t2bLSW6BbgrtLsahOIB5iyAVJf9GjWK3cYTDaMj4XdBpM1cA6pIS0Kv2w==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "set-function-length": "^1.2.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/camelcase-css": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/camelcase-css/-/camelcase-css-2.0.1.tgz", + "integrity": "sha512-QOSvevhslijgYwRx6Rv7zKdMF8lbRmx+uQGx2+vDc+KI/eBnsy9kit5aj23AgGu3pa4t9AgwbnXWqS+iOY+2aA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/chalk": { + "version": "5.3.0", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-5.3.0.tgz", + "integrity": "sha512-dLitG79d+GV1Nb/VYcCDFivJeK1hiukt9QjRNVOsUtTy1rR1YJsmpGGTZ3qJos+uw7WmWF4wUwBd9jxjocFC2w==", + "dev": true, + "engines": { + "node": "^12.17.0 || ^14.13 || >=16.0.0" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/chokidar": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/chokidar/-/chokidar-3.6.0.tgz", + "integrity": "sha512-7VT13fmjotKpGipCW9JEQAusEPE+Ei8nl6/g4FBAmIm0GOOLMua9NDDo/DWp0ZAxCr3cPq5ZpBqmPAQgDda2Pw==", + "dev": true, + "dependencies": { + "anymatch": "~3.1.2", + "braces": "~3.0.2", + "glob-parent": "~5.1.2", + "is-binary-path": "~2.1.0", + "is-glob": "~4.0.1", + "normalize-path": "~3.0.0", + "readdirp": "~3.6.0" + }, + "engines": { + "node": ">= 8.10.0" + }, + "funding": { + "url": "https://paulmillr.com/funding/" + }, + "optionalDependencies": { + "fsevents": "~2.3.2" + } + }, + "node_modules/chokidar/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/cliui": { + "version": "8.0.1", + "resolved": "https://registry.npmjs.org/cliui/-/cliui-8.0.1.tgz", + "integrity": "sha512-BSeNnyus75C4//NQ9gQt1/csTXyo/8Sb+afLAkzAptFuMsod9HFokGNudZpi/oQV73hnVK+sR+5PVRMd+Dr7YQ==", + "dev": true, + "dependencies": { + "string-width": "^4.2.0", + "strip-ansi": "^6.0.1", + "wrap-ansi": "^7.0.0" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/cliui/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/cliui/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/cliui/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/cliui/node_modules/wrap-ansi": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/color-convert": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/color-convert/-/color-convert-2.0.1.tgz", + "integrity": "sha512-RRECPsj7iu/xb5oKYcsFHSppFNnsj/52OVTRKb4zP5onXwVF3zVmmToNcOfGC+CRDpfK/U584fMg38ZHCaElKQ==", + "dev": true, + "dependencies": { + "color-name": "~1.1.4" + }, + "engines": { + "node": ">=7.0.0" + } + }, + "node_modules/color-name": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/color-name/-/color-name-1.1.4.tgz", + "integrity": "sha512-dOy+3AuW3a2wNbZHIuMZpTcgjGuLU/uBL/ubcZF9OXbDo8ff4O8yVp5Bf0efS8uEoYo5q4Fx7dY9OgQGXgAsQA==", + "dev": true + }, + "node_modules/commander": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/commander/-/commander-4.1.1.tgz", + "integrity": "sha512-NOKm8xhkzAjzFx8B2v5OAHT+u5pRQc2UCa2Vq9jYL/31o2wi9mxBA7LIFs3sV5VSC49z6pEhfbMULvShKj26WA==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/concat-map": { + "version": "0.0.1", + "resolved": "https://registry.npmjs.org/concat-map/-/concat-map-0.0.1.tgz", + "integrity": "sha512-/Srv4dswyQNBfohGpz9o6Yb3Gz3SrUDqBH5rTuhGR7ahtlbYKnVxw2bCFMRljaA7EXHaXZ8wsHdodFvbkhKmqg==", + "dev": true + }, + "node_modules/content-disposition": { + "version": "0.5.4", + "resolved": "https://registry.npmjs.org/content-disposition/-/content-disposition-0.5.4.tgz", + "integrity": "sha512-FveZTNuGw04cxlAiWbzi6zTAL/lhehaWbTtgluJh4/E95DqMwTmha3KZN1aAWA8cFIhHzMZUvLevkw5Rqk+tSQ==", + "dependencies": { + "safe-buffer": "5.2.1" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/content-type": { + "version": "1.0.5", + "resolved": "https://registry.npmjs.org/content-type/-/content-type-1.0.5.tgz", + "integrity": "sha512-nTjqfcBFEipKdXCv4YDQWCfmcLZKm81ldF0pAopTvyrFGVbcR6P/VAAd5G7N+0tTr8QqiU0tFadD6FK4NtJwOA==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie": { + "version": "0.6.0", + "resolved": "https://registry.npmjs.org/cookie/-/cookie-0.6.0.tgz", + "integrity": "sha512-U71cyTamuh1CRNCfpGY6to28lxvNwPG4Guz/EVjgf3Jmzv0vlDp1atT9eS5dDjMYHucpHbWns6Lwf3BKz6svdw==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/cookie-signature": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/cookie-signature/-/cookie-signature-1.0.6.tgz", + "integrity": "sha512-QADzlaHc8icV8I7vbaJXJwod9HWYp8uCqf1xa4OfNu1T7JVxQIrUgOWtHdNDtPiywmFbiS12VjotIXLrKM3orQ==" + }, + "node_modules/cors": { + "version": "2.8.5", + "resolved": "https://registry.npmjs.org/cors/-/cors-2.8.5.tgz", + "integrity": "sha512-KIHbLJqu73RGr/hnbrO9uBeixNGuvSQjul/jdFvS/KFSIH1hWVd1ng7zOHx+YrEfInLG7q4n6GHQ9cDtxv/P6g==", + "dependencies": { + "object-assign": "^4", + "vary": "^1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/cross-spawn": { + "version": "7.0.3", + "resolved": "https://registry.npmjs.org/cross-spawn/-/cross-spawn-7.0.3.tgz", + "integrity": "sha512-iRDPJKUPVEND7dHPO8rkbOnPpyDygcDFtWjpeWNCgy8WP2rXcxXL8TskReQl6OrB2G7+UJrags1q15Fudc7G6w==", + "dev": true, + "dependencies": { + "path-key": "^3.1.0", + "shebang-command": "^2.0.0", + "which": "^2.0.1" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/cssesc": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/cssesc/-/cssesc-3.0.0.tgz", + "integrity": "sha512-/Tb/JcjK111nNScGob5MNtsntNM1aCNUDipB/TkwZFhyDrrE47SOx/18wF2bbjgc3ZzCSKW1T5nt5EbFoAz/Vg==", + "dev": true, + "bin": { + "cssesc": "bin/cssesc" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/debug": { + "version": "2.6.9", + "resolved": "https://registry.npmjs.org/debug/-/debug-2.6.9.tgz", + "integrity": "sha512-bC7ElrdJaJnPbAP+1EotYvqZsb3ecl5wi6Bfi6BJTUcNowp6cvspg0jXznRTKDjm/E7AdgFBVeAPVMNcKGsHMA==", + "dependencies": { + "ms": "2.0.0" + } + }, + "node_modules/define-data-property": { + "version": "1.1.4", + "resolved": "https://registry.npmjs.org/define-data-property/-/define-data-property-1.1.4.tgz", + "integrity": "sha512-rBMvIzlpA8v6E+SJZoo++HAYqsLrkg7MSfIinMPFhmkorw7X+dOXVJQs+QT69zGkzMyfDnIMN2Wid1+NbL3T+A==", + "dependencies": { + "es-define-property": "^1.0.0", + "es-errors": "^1.3.0", + "gopd": "^1.0.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/depd": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/depd/-/depd-2.0.0.tgz", + "integrity": "sha512-g7nH6P6dyDioJogAAGprGpCtVImJhpPk/roCzdb3fIh61/s/nPsfR6onyMwkCAR/OlC3yBC0lESvUoQEAssIrw==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/destroy": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/destroy/-/destroy-1.2.0.tgz", + "integrity": "sha512-2sJGJTaXIIaR1w4iJSNoN0hnMY7Gpc/n8D4qSCJw8QqFWXf7cuAgnEHxBpweaVcPevC2l3KpjYCx3NypQQgaJg==", + "engines": { + "node": ">= 0.8", + "npm": "1.2.8000 || >= 1.4.16" + } + }, + "node_modules/didyoumean": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/didyoumean/-/didyoumean-1.2.2.tgz", + "integrity": "sha512-gxtyfqMg7GKyhQmb056K7M3xszy/myH8w+B4RT+QXBQsvAOdc3XymqDDPHx1BgPgsdAA5SIifona89YtRATDzw==", + "dev": true + }, + "node_modules/diff": { + "version": "5.2.0", + "resolved": "https://registry.npmjs.org/diff/-/diff-5.2.0.tgz", + "integrity": "sha512-uIFDxqpRZGZ6ThOk84hEfqWoHx2devRFvpTZcTHur85vImfaxUbTW9Ryh4CpCuDnToOP1CEtXKIgytHBPVff5A==", + "dev": true, + "engines": { + "node": ">=0.3.1" + } + }, + "node_modules/dlv": { + "version": "1.1.3", + "resolved": "https://registry.npmjs.org/dlv/-/dlv-1.1.3.tgz", + "integrity": "sha512-+HlytyjlPKnIG8XuRG8WvmBP8xs8P71y+SKKS6ZXWoEgLuePxtDoUEiH7WkdePWrQ5JBpE6aoVqfZfJUQkjXwA==", + "dev": true + }, + "node_modules/eastasianwidth": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/eastasianwidth/-/eastasianwidth-0.2.0.tgz", + "integrity": "sha512-I88TYZWc9XiYHRQ4/3c5rjjfgkjhLyW2luGIheGERbNQ6OY7yTybanSpDXZa8y7VUP9YmDcYa+eyq4ca7iLqWA==", + "dev": true + }, + "node_modules/ee-first": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/ee-first/-/ee-first-1.1.1.tgz", + "integrity": "sha512-WMwm9LhRUo+WUaRN+vRuETqG89IgZphVSNkdFgeb6sS/E4OrDIN7t48CAewSHXc6C8lefD8KKfr5vY61brQlow==" + }, + "node_modules/ejs": { + "version": "3.1.10", + "resolved": "https://registry.npmjs.org/ejs/-/ejs-3.1.10.tgz", + "integrity": "sha512-UeJmFfOrAQS8OJWPZ4qtgHyWExa088/MtK5UEyoJGFH67cDEXkZSviOiKRCZ4Xij0zxI3JECgYs3oKx+AizQBA==", + "dev": true, + "dependencies": { + "jake": "^10.8.5" + }, + "bin": { + "ejs": "bin/cli.js" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/emoji-regex": { + "version": "9.2.2", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-9.2.2.tgz", + "integrity": "sha512-L18DaJsXSUk2+42pv8mLs5jJT2hqFkFE4j21wOmgbUqsZ2hL72NsUU785g9RXgo3s0ZNgVl42TiHp3ZtOv/Vyg==", + "dev": true + }, + "node_modules/encodeurl": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/encodeurl/-/encodeurl-1.0.2.tgz", + "integrity": "sha512-TPJXq8JqFaVYm2CWmPvnP2Iyo4ZSM7/QKcSmuMLDObfpH5fi7RUGmd/rTDf+rut/saiDiQEeVTNgAmJEdAOx0w==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/es-define-property": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/es-define-property/-/es-define-property-1.0.0.tgz", + "integrity": "sha512-jxayLKShrEqqzJ0eumQbVhTYQM27CfT1T35+gCgDFoL82JLsXqTJ76zv6A0YLOgEnLUMvLzsDsGIrl8NFpT2gQ==", + "dependencies": { + "get-intrinsic": "^1.2.4" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/es-errors": { + "version": "1.3.0", + "resolved": "https://registry.npmjs.org/es-errors/-/es-errors-1.3.0.tgz", + "integrity": "sha512-Zf5H2Kxt2xjTvbJvP2ZWLEICxA6j+hAmMzIlypy4xcBg1vKVnx89Wy0GbS+kf5cwCVFFzdCFh2XSCFNULS6csw==", + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/escalade": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/escalade/-/escalade-3.1.2.tgz", + "integrity": "sha512-ErCHMCae19vR8vQGe50xIsVomy19rg6gFu3+r3jkEO46suLMWBksvVyoGgQV+jOfl84ZSOSlmv6Gxa89PmTGmA==", + "dev": true, + "engines": { + "node": ">=6" + } + }, + "node_modules/escape-html": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/escape-html/-/escape-html-1.0.3.tgz", + "integrity": "sha512-NiSupZ4OeuGwr68lGIeym/ksIZMJodUGOSCZ/FSnTxcrekbvqrgdUxlJOMpijaKZVjAJrWrGs/6Jy8OMuyj9ow==" + }, + "node_modules/etag": { + "version": "1.8.1", + "resolved": "https://registry.npmjs.org/etag/-/etag-1.8.1.tgz", + "integrity": "sha512-aIL5Fx7mawVa300al2BnEE4iNvo1qETxLrPI/o05L7z6go7fCw1J6EQmbK4FmJ2AS7kgVF/KEZWufBfdClMcPg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/eventemitter3": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/eventemitter3/-/eventemitter3-4.0.7.tgz", + "integrity": "sha512-8guHBZCwKnFhYdHr2ysuRWErTwhoN2X8XELRlrRwpmfeY2jjuUN4taQMsULKUVo1K4DvZl+0pgfyoysHxvmvEw==" + }, + "node_modules/express": { + "version": "4.19.2", + "resolved": "https://registry.npmjs.org/express/-/express-4.19.2.tgz", + "integrity": "sha512-5T6nhjsT+EOMzuck8JjBHARTHfMht0POzlA60WV2pMD3gyXw2LZnZ+ueGdNxG+0calOJcWKbpFcuzLZ91YWq9Q==", + "dependencies": { + "accepts": "~1.3.8", + "array-flatten": "1.1.1", + "body-parser": "1.20.2", + "content-disposition": "0.5.4", + "content-type": "~1.0.4", + "cookie": "0.6.0", + "cookie-signature": "1.0.6", + "debug": "2.6.9", + "depd": "2.0.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "finalhandler": "1.2.0", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "merge-descriptors": "1.0.1", + "methods": "~1.1.2", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "path-to-regexp": "0.1.7", + "proxy-addr": "~2.0.7", + "qs": "6.11.0", + "range-parser": "~1.2.1", + "safe-buffer": "5.2.1", + "send": "0.18.0", + "serve-static": "1.15.0", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "type-is": "~1.6.18", + "utils-merge": "1.0.1", + "vary": "~1.1.2" + }, + "engines": { + "node": ">= 0.10.0" + } + }, + "node_modules/fast-glob": { + "version": "3.3.2", + "resolved": "https://registry.npmjs.org/fast-glob/-/fast-glob-3.3.2.tgz", + "integrity": "sha512-oX2ruAFQwf/Orj8m737Y5adxDQO0LAB7/S5MnxCdTNDd4p6BsyIVsv9JQsATbTSq8KHRpLwIHbVlUNatxd+1Ow==", + "dev": true, + "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" + }, + "engines": { + "node": ">=8.6.0" + } + }, + "node_modules/fast-glob/node_modules/glob-parent": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-5.1.2.tgz", + "integrity": "sha512-AOIgSQCepiJYwP3ARnGx+5VnTu2HBYdzbGP45eLw1vr3zB3vZLeyed1sC9hnbcOc9/SrMyM5RPQrkGz4aS9Zow==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.1" + }, + "engines": { + "node": ">= 6" + } + }, + "node_modules/fastq": { + "version": "1.17.1", + "resolved": "https://registry.npmjs.org/fastq/-/fastq-1.17.1.tgz", + "integrity": "sha512-sRVD3lWVIXWg6By68ZN7vho9a1pQcN/WBFaAAsDDFzlJjvoGx0P8z7V1t72grFJfJhu3YPZBuu25f7Kaw2jN1w==", + "dev": true, + "dependencies": { + "reusify": "^1.0.4" + } + }, + "node_modules/filelist": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/filelist/-/filelist-1.0.4.tgz", + "integrity": "sha512-w1cEuf3S+DrLCQL7ET6kz+gmlJdbq9J7yXCSjK/OZCPA+qEN1WyF4ZAf0YYJa4/shHJra2t/d/r8SV4Ji+x+8Q==", + "dev": true, + "dependencies": { + "minimatch": "^5.0.1" + } + }, + "node_modules/filelist/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/filelist/node_modules/minimatch": { + "version": "5.1.6", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-5.1.6.tgz", + "integrity": "sha512-lKwV/1brpG6mBUFHtb7NUmtABCb2WZZmm2wNiOA5hAb8VdCS4B3dtMWyvcoViccwAW/COERjXLt0zP1zXUN26g==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/fill-range": { + "version": "7.1.1", + "resolved": "https://registry.npmjs.org/fill-range/-/fill-range-7.1.1.tgz", + "integrity": "sha512-YsGpe3WHLK8ZYi4tWDg2Jy3ebRz2rXowDxnld4bkQB00cc/1Zw9AWnC0i9ztDJitivtQvaI9KaLyKrc+hBW0yg==", + "dependencies": { + "to-regex-range": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/finalhandler": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/finalhandler/-/finalhandler-1.2.0.tgz", + "integrity": "sha512-5uXcUVftlQMFnWC9qu/svkWv3GTd2PfUhK/3PLkYNAe7FbqJMt3515HaxE6eRL74GdsriiwujiawdaB1BpEISg==", + "dependencies": { + "debug": "2.6.9", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "on-finished": "2.4.1", + "parseurl": "~1.3.3", + "statuses": "2.0.1", + "unpipe": "~1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/follow-redirects": { + "version": "1.15.6", + "resolved": "https://registry.npmjs.org/follow-redirects/-/follow-redirects-1.15.6.tgz", + "integrity": "sha512-wWN62YITEaOpSK584EZXJafH1AGpO8RVgElfkuXbTOrPX4fIfOyEpW/CsiNd8JdYrAoOvafRTOEnvsO++qCqFA==", + "funding": [ + { + "type": "individual", + "url": "https://github.com/sponsors/RubenVerborgh" + } + ], + "engines": { + "node": ">=4.0" + }, + "peerDependenciesMeta": { + "debug": { + "optional": true + } + } + }, + "node_modules/foreground-child": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/foreground-child/-/foreground-child-3.1.1.tgz", + "integrity": "sha512-TMKDUnIte6bfb5nWv7V/caI169OHgvwjb7V4WkeUvbQQdjr5rWKqHFiKWb/fcOwB+CzBT+qbWjvj+DVwRskpIg==", + "dev": true, + "dependencies": { + "cross-spawn": "^7.0.0", + "signal-exit": "^4.0.1" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/forwarded": { + "version": "0.2.0", + "resolved": "https://registry.npmjs.org/forwarded/-/forwarded-0.2.0.tgz", + "integrity": "sha512-buRG0fpBtRHSTCOASe6hD258tEubFoRLb4ZNA6NxMVHNw2gOcwHo9wyablzMzOA5z9xA9L1KNjk/Nt6MT9aYow==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fresh": { + "version": "0.5.2", + "resolved": "https://registry.npmjs.org/fresh/-/fresh-0.5.2.tgz", + "integrity": "sha512-zJ2mQYM18rEFOudeV4GShTGIQ7RbzA7ozbU9I/XBpm7kqgMywgmylMwXHxZJmkVoYkna9d2pVXVXPdYTP9ej8Q==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/fsevents": { + "version": "2.3.3", + "resolved": "https://registry.npmjs.org/fsevents/-/fsevents-2.3.3.tgz", + "integrity": "sha512-5xoDfX+fL7faATnagmWPpbFtwh/R77WmMMqqHGS65C3vvB0YHrgF+B1YmZ3441tMj5n63k0212XNoJwzlhffQw==", + "dev": true, + "hasInstallScript": true, + "optional": true, + "os": [ + "darwin" + ], + "engines": { + "node": "^8.16.0 || ^10.6.0 || >=11.0.0" + } + }, + "node_modules/function-bind": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/function-bind/-/function-bind-1.1.2.tgz", + "integrity": "sha512-7XHNxH7qX9xG5mIwxkhumTox/MIRNcOgDrxWsMt2pAr23WHp6MrRlN7FBSFpCpr+oVO0F744iUgR82nJMfG2SA==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/get-caller-file": { + "version": "2.0.5", + "resolved": "https://registry.npmjs.org/get-caller-file/-/get-caller-file-2.0.5.tgz", + "integrity": "sha512-DyFP3BM/3YHTQOCUL/w0OZHR0lpKeGrxotcHWcqNEdnltqFwXVfhEBQ94eIo34AfQpo0rGki4cyIiftY06h2Fg==", + "dev": true, + "engines": { + "node": "6.* || 8.* || >= 10.*" + } + }, + "node_modules/get-intrinsic": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/get-intrinsic/-/get-intrinsic-1.2.4.tgz", + "integrity": "sha512-5uYhsJH8VJBTv7oslg4BznJYhDoRI6waYCxMmCdnTrcCrHA/fCFKoTFz2JKKE0HdDFUF7/oQuhzumXJK7paBRQ==", + "dependencies": { + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "has-proto": "^1.0.1", + "has-symbols": "^1.0.3", + "hasown": "^2.0.0" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/glob": { + "version": "10.4.1", + "resolved": "https://registry.npmjs.org/glob/-/glob-10.4.1.tgz", + "integrity": "sha512-2jelhlq3E4ho74ZyVLN03oKdAZVUa6UDZzFLVH1H7dnoax+y9qyaq8zBkfDIggjniU19z0wU18y16jMB2eyVIw==", + "dev": true, + "dependencies": { + "foreground-child": "^3.1.0", + "jackspeak": "^3.1.2", + "minimatch": "^9.0.4", + "minipass": "^7.1.2", + "path-scurry": "^1.11.1" + }, + "bin": { + "glob": "dist/esm/bin.mjs" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/glob-parent": { + "version": "6.0.2", + "resolved": "https://registry.npmjs.org/glob-parent/-/glob-parent-6.0.2.tgz", + "integrity": "sha512-XxwI8EOhVQgWp6iDL+3b0r86f4d6AX6zSU55HfB4ydCEuXLXc5FcYeOu+nnGftS4TEju/11rt4KJPTMgbfmv4A==", + "dev": true, + "dependencies": { + "is-glob": "^4.0.3" + }, + "engines": { + "node": ">=10.13.0" + } + }, + "node_modules/glob/node_modules/brace-expansion": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/brace-expansion/-/brace-expansion-2.0.1.tgz", + "integrity": "sha512-XnAIvQ8eM+kC6aULx6wuQiwVsnzsi9d3WxzV3FpWTGA19F621kwdbsAcFKXgKUHZWsy+mY6iL1sHTxWEFCytDA==", + "dev": true, + "dependencies": { + "balanced-match": "^1.0.0" + } + }, + "node_modules/glob/node_modules/minimatch": { + "version": "9.0.4", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-9.0.4.tgz", + "integrity": "sha512-KqWh+VchfxcMNRAJjj2tnsSJdNbHsVgnkBhTNrW7AjVo6OvLtxw8zfT9oLw1JSohlFzJ8jCoTgaoXvJ+kHt6fw==", + "dev": true, + "dependencies": { + "brace-expansion": "^2.0.1" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/gopd": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/gopd/-/gopd-1.0.1.tgz", + "integrity": "sha512-d65bNlIadxvpb/A2abVdlqKqV563juRnZ1Wtk6s1sIR8uNsXR70xqIzVqxVf1eTqDunwT2MkczEeaezCKTZhwA==", + "dependencies": { + "get-intrinsic": "^1.1.3" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-flag": { + "version": "4.0.0", + "resolved": "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz", + "integrity": "sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/has-property-descriptors": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/has-property-descriptors/-/has-property-descriptors-1.0.2.tgz", + "integrity": "sha512-55JNKuIW+vq4Ke1BjOTjM2YctQIvCT7GFzHwmfZPGo5wnrgkid0YQtnAleFSqumZm4az3n2BS+erby5ipJdgrg==", + "dependencies": { + "es-define-property": "^1.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-proto": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-proto/-/has-proto-1.0.3.tgz", + "integrity": "sha512-SJ1amZAJUiZS+PhsVLf5tGydlaVB8EdFpaSO4gmiUKUOxk8qzn5AIy4ZeJUmh22znIdk/uMAUT2pl3FxzVUH+Q==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/has-symbols": { + "version": "1.0.3", + "resolved": "https://registry.npmjs.org/has-symbols/-/has-symbols-1.0.3.tgz", + "integrity": "sha512-l3LCuF6MgDNwTDKkdYGEihYjt5pRPbEg46rtlmnSPlUbgmB8LOIrKJbYYFBSbnPaJexMKtiPO8hmeRjRz2Td+A==", + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/hasown": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/hasown/-/hasown-2.0.2.tgz", + "integrity": "sha512-0hJU9SCPvmMzIBdZFqNPXWa6dqh7WdH0cII9y+CyS8rG3nL48Bclra9HmKhVVUHyPWNH5Y7xDwAB7bfgSjkUMQ==", + "dependencies": { + "function-bind": "^1.1.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/http-errors": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/http-errors/-/http-errors-2.0.0.tgz", + "integrity": "sha512-FtwrG/euBzaEjYeRqOgly7G0qviiXoJWnvEH2Z1plBdXgbyjv34pHTSb9zoeHMyDy33+DWy5Wt9Wo+TURtOYSQ==", + "dependencies": { + "depd": "2.0.0", + "inherits": "2.0.4", + "setprototypeof": "1.2.0", + "statuses": "2.0.1", + "toidentifier": "1.0.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/http-proxy": { + "version": "1.18.1", + "resolved": "https://registry.npmjs.org/http-proxy/-/http-proxy-1.18.1.tgz", + "integrity": "sha512-7mz/721AbnJwIVbnaSv1Cz3Am0ZLT/UBwkC92VlxhXv/k/BBQfM2fXElQNC27BVGr0uwUpplYPQM9LnaBMR5NQ==", + "dependencies": { + "eventemitter3": "^4.0.0", + "follow-redirects": "^1.0.0", + "requires-port": "^1.0.0" + }, + "engines": { + "node": ">=8.0.0" + } + }, + "node_modules/http-proxy-middleware": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/http-proxy-middleware/-/http-proxy-middleware-3.0.0.tgz", + "integrity": "sha512-36AV1fIaI2cWRzHo+rbcxhe3M3jUDCNzc4D5zRl57sEWRAxdXYtw7FSQKYY6PDKssiAKjLYypbssHk+xs/kMXw==", + "dependencies": { + "@types/http-proxy": "^1.17.10", + "debug": "^4.3.4", + "http-proxy": "^1.18.1", + "is-glob": "^4.0.1", + "is-plain-obj": "^3.0.0", + "micromatch": "^4.0.5" + }, + "engines": { + "node": "^14.15.0 || ^16.10.0 || >=18.0.0" + } + }, + "node_modules/http-proxy-middleware/node_modules/debug": { + "version": "4.3.5", + "resolved": "https://registry.npmjs.org/debug/-/debug-4.3.5.tgz", + "integrity": "sha512-pt0bNEmneDIvdL1Xsd9oDQ/wrQRkXDT4AUWlNZNPKvW5x/jyO9VFXkJUP07vQ2upmw5PlaITaPKc31jK13V+jg==", + "dependencies": { + "ms": "2.1.2" + }, + "engines": { + "node": ">=6.0" + }, + "peerDependenciesMeta": { + "supports-color": { + "optional": true + } + } + }, + "node_modules/http-proxy-middleware/node_modules/ms": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.2.tgz", + "integrity": "sha512-sGkPx+VjMtmA6MX27oA4FBFELFCZZ4S4XqeGOXCv68tT+jb3vk/RyaKWP0PTKyWtmLSM0b+adUTEvbs1PEaH2w==" + }, + "node_modules/iconv-lite": { + "version": "0.4.24", + "resolved": "https://registry.npmjs.org/iconv-lite/-/iconv-lite-0.4.24.tgz", + "integrity": "sha512-v3MXnZAcvnywkTUEZomIActle7RXXeedOR31wwl7VlyoXO4Qi9arvSenNQWne1TcRwhCL1HwLI21bEqdpj8/rA==", + "dependencies": { + "safer-buffer": ">= 2.1.2 < 3" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/inherits": { + "version": "2.0.4", + "resolved": "https://registry.npmjs.org/inherits/-/inherits-2.0.4.tgz", + "integrity": "sha512-k/vGaX4/Yla3WzyMCvTQOXYeIHvqOKtnqBduzTHpzpQZzAskKMhZ2K+EnBiSM9zGSoIFeMpXKxa4dYeZIQqewQ==" + }, + "node_modules/ipaddr.js": { + "version": "1.9.1", + "resolved": "https://registry.npmjs.org/ipaddr.js/-/ipaddr.js-1.9.1.tgz", + "integrity": "sha512-0KI/607xoxSToH7GjN1FfSbLoU0+btTicjsQSWQlh/hZykN8KpmMf7uYwPW3R+akZ6R/w18ZlXSHBYXiYUPO3g==", + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/is-binary-path": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/is-binary-path/-/is-binary-path-2.1.0.tgz", + "integrity": "sha512-ZMERYes6pDydyuGidse7OsHxtbI7WVeUEozgR/g7rd0xUimYNlvZRE/K2MgZTjWy725IfelLeVcEM97mmtRGXw==", + "dev": true, + "dependencies": { + "binary-extensions": "^2.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-core-module": { + "version": "2.13.1", + "resolved": "https://registry.npmjs.org/is-core-module/-/is-core-module-2.13.1.tgz", + "integrity": "sha512-hHrIjvZsftOsvKSn2TRYl63zvxsgE0K+0mYMoH6gD4omR5IWB2KynivBQczo3+wF1cCkjzvptnI9Q0sPU66ilw==", + "dev": true, + "dependencies": { + "hasown": "^2.0.0" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/is-extglob": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/is-extglob/-/is-extglob-2.1.1.tgz", + "integrity": "sha512-SbKbANkN603Vi4jEZv49LeVJMn4yGwsbzZworEoyEiutsN3nJYdbO36zfhGJ6QEDpOZIFkDtnq5JRxmvl3jsoQ==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-fullwidth-code-point": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-fullwidth-code-point/-/is-fullwidth-code-point-3.0.0.tgz", + "integrity": "sha512-zymm5+u+sCsSWyD9qNaejV3DFvhCKclKdizYaJUuHA83RLjb7nSuGnddCHGv0hk+KY7BMAlsWeK4Ueg6EV6XQg==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/is-glob": { + "version": "4.0.3", + "resolved": "https://registry.npmjs.org/is-glob/-/is-glob-4.0.3.tgz", + "integrity": "sha512-xelSayHH36ZgE7ZWhli7pW34hNbNl8Ojv5KVmkJD4hBdD3th8Tfk9vYasLM+mXWOZhFkgZfxhLSnrwRr4elSSg==", + "dependencies": { + "is-extglob": "^2.1.1" + }, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/is-number": { + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/is-number/-/is-number-7.0.0.tgz", + "integrity": "sha512-41Cifkg6e8TylSpdtTpeLVMqvSBEVzTttHvERD741+pnZ8ANv0004MRL43QKPDlK9cGvNp6NZWZUBlbGXYxxng==", + "engines": { + "node": ">=0.12.0" + } + }, + "node_modules/is-plain-obj": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/is-plain-obj/-/is-plain-obj-3.0.0.tgz", + "integrity": "sha512-gwsOE28k+23GP1B6vFl1oVh/WOzmawBrKwo5Ev6wMKzPkaXaCDIQKzLnvsA42DRlbVTWorkgTKIviAKCWkfUwA==", + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/isexe": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/isexe/-/isexe-2.0.0.tgz", + "integrity": "sha512-RHxMLp9lnKHGHRng9QFhRCMbYAcVpn69smSGcq3f36xjgVVWThj4qqLbTLlq7Ssj8B+fIQ1EuCEGI2lKsyQeIw==", + "dev": true + }, + "node_modules/jackspeak": { + "version": "3.4.0", + "resolved": "https://registry.npmjs.org/jackspeak/-/jackspeak-3.4.0.tgz", + "integrity": "sha512-JVYhQnN59LVPFCEcVa2C3CrEKYacvjRfqIQl+h8oi91aLYQVWRYbxjPcv1bUiUy/kLmQaANrYfNMCO3kuEDHfw==", + "dev": true, + "dependencies": { + "@isaacs/cliui": "^8.0.2" + }, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + }, + "optionalDependencies": { + "@pkgjs/parseargs": "^0.11.0" + } + }, + "node_modules/jake": { + "version": "10.9.1", + "resolved": "https://registry.npmjs.org/jake/-/jake-10.9.1.tgz", + "integrity": "sha512-61btcOHNnLnsOdtLgA5efqQWjnSi/vow5HbI7HMdKKWqvrKR1bLK3BPlJn9gcSaP2ewuamUSMB5XEy76KUIS2w==", + "dev": true, + "dependencies": { + "async": "^3.2.3", + "chalk": "^4.0.2", + "filelist": "^1.0.4", + "minimatch": "^3.1.2" + }, + "bin": { + "jake": "bin/cli.js" + }, + "engines": { + "node": ">=10" + } + }, + "node_modules/jake/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/jake/node_modules/chalk": { + "version": "4.1.2", + "resolved": "https://registry.npmjs.org/chalk/-/chalk-4.1.2.tgz", + "integrity": "sha512-oKnbhFyRIXpUuez8iBMmyEa4nbj4IOQyuhc/wy9kY7/WVPcwIO9VA668Pu8RkO7+0G76SLROeyw9CpQ061i4mA==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.1.0", + "supports-color": "^7.1.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/chalk?sponsor=1" + } + }, + "node_modules/jiti": { + "version": "1.21.6", + "resolved": "https://registry.npmjs.org/jiti/-/jiti-1.21.6.tgz", + "integrity": "sha512-2yTgeWTWzMWkHu6Jp9NKgePDaYHbntiwvYuuJLbbN9vl7DC9DvXKOB2BC3ZZ92D3cvV/aflH0osDfwpHepQ53w==", + "dev": true, + "bin": { + "jiti": "bin/jiti.js" + } + }, + "node_modules/lilconfig": { + "version": "2.1.0", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-2.1.0.tgz", + "integrity": "sha512-utWOt/GHzuUxnLKxB6dk81RoOeoNeHgbrXiuGk4yyF5qlRz+iIVWu56E2fqGHFrXz0QNUhLB/8nKqvRH66JKGQ==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/lines-and-columns": { + "version": "1.2.4", + "resolved": "https://registry.npmjs.org/lines-and-columns/-/lines-and-columns-1.2.4.tgz", + "integrity": "sha512-7ylylesZQ/PV29jhEDl3Ufjo6ZX7gCqJr5F7PKrqc93v7fzSymt1BpwEU8nAUXs8qzzvqhbjhK5QZg6Mt/HkBg==", + "dev": true + }, + "node_modules/lru-cache": { + "version": "10.2.2", + "resolved": "https://registry.npmjs.org/lru-cache/-/lru-cache-10.2.2.tgz", + "integrity": "sha512-9hp3Vp2/hFQUiIwKo8XCeFVnrg8Pk3TYNPIR7tJADKi5YfcF7vEaK7avFHTlSy3kOKYaJQaalfEo6YuXdceBOQ==", + "dev": true, + "engines": { + "node": "14 || >=16.14" + } + }, + "node_modules/media-typer": { + "version": "0.3.0", + "resolved": "https://registry.npmjs.org/media-typer/-/media-typer-0.3.0.tgz", + "integrity": "sha512-dq+qelQ9akHpcOl/gUVRTxVIOkAJ1wR3QAvb4RsVjS8oVoFjDGTc679wJYmUmknUF5HwMLOgb5O+a3KxfWapPQ==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/merge-descriptors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/merge-descriptors/-/merge-descriptors-1.0.1.tgz", + "integrity": "sha512-cCi6g3/Zr1iqQi6ySbseM1Xvooa98N0w31jzUYrXPX2xqObmFGHJ0tQ5u74H3mVh7wLouTseZyYIq39g8cNp1w==" + }, + "node_modules/merge2": { + "version": "1.4.1", + "resolved": "https://registry.npmjs.org/merge2/-/merge2-1.4.1.tgz", + "integrity": "sha512-8q7VEgMJW4J8tcfVPy8g09NcQwZdbwFEqhe/WZkoIzjn/3TGDwtOCYtXGxA3O8tPzpczCCDgv+P2P5y00ZJOOg==", + "dev": true, + "engines": { + "node": ">= 8" + } + }, + "node_modules/methods": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/methods/-/methods-1.1.2.tgz", + "integrity": "sha512-iclAHeNqNm68zFtnZ0e+1L2yUIdvzNoauKU4WBA3VvH/vPFieF7qfRlwUZU+DA9P9bPXIS90ulxoUoCH23sV2w==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/micromatch": { + "version": "4.0.7", + "resolved": "https://registry.npmjs.org/micromatch/-/micromatch-4.0.7.tgz", + "integrity": "sha512-LPP/3KorzCwBxfeUuZmaR6bG2kdeHSbe0P2tY3FLRU4vYrjYz5hI4QZwV0njUx3jeuKe67YukQ1LSPZBKDqO/Q==", + "dependencies": { + "braces": "^3.0.3", + "picomatch": "^2.3.1" + }, + "engines": { + "node": ">=8.6" + } + }, + "node_modules/mime": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/mime/-/mime-1.6.0.tgz", + "integrity": "sha512-x0Vn8spI+wuJ1O6S7gnbaQg8Pxh4NNHb7KSINmEWKiPE4RKOplvijn+NkmYmmRgP68mc70j2EbeTFRsrswaQeg==", + "bin": { + "mime": "cli.js" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/mime-db": { + "version": "1.52.0", + "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.52.0.tgz", + "integrity": "sha512-sPU4uV7dYlvtWJxwwxHD0PuihVNiE7TyAbQ5SWxDCB9mUYvOgroQOwYQQOKPJ8CIbE+1ETVlOoK1UC2nU3gYvg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/mime-types": { + "version": "2.1.35", + "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.35.tgz", + "integrity": "sha512-ZDY+bPm5zTTF+YpCrAU9nK0UgICYPT0QtT1NZWFv4s++TNkcgVaT0g6+4R2uI4MjQjzysHB1zxuWL50hzaeXiw==", + "dependencies": { + "mime-db": "1.52.0" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/minimatch": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/minimatch/-/minimatch-3.1.2.tgz", + "integrity": "sha512-J7p63hRiAjw1NDEww1W7i37+ByIrOWO5XQQAzZ3VOcL0PNybwpfmV/N05zFAzwQ9USyEcX6t3UO+K5aqBQOIHw==", + "dev": true, + "dependencies": { + "brace-expansion": "^1.1.7" + }, + "engines": { + "node": "*" + } + }, + "node_modules/minipass": { + "version": "7.1.2", + "resolved": "https://registry.npmjs.org/minipass/-/minipass-7.1.2.tgz", + "integrity": "sha512-qOOzS1cBTWYF4BH8fVePDBOO9iptMnGUEZwNc/cMWnTV2nVLZ7VoNWEPHkYczZA0pdoA7dl6e7FL659nX9S2aw==", + "dev": true, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/ms": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.0.0.tgz", + "integrity": "sha512-Tpp60P6IUJDTuOq/5Z8cdskzJujfwqfOTkrwIwj7IRISpnkJnT6SyJ4PCPnGMoFjC9ddhal5KVIYtAt97ix05A==" + }, + "node_modules/mz": { + "version": "2.7.0", + "resolved": "https://registry.npmjs.org/mz/-/mz-2.7.0.tgz", + "integrity": "sha512-z81GNO7nnYMEhrGh9LeymoE4+Yr0Wn5McHIZMK5cfQCl+NDX08sCZgUc9/6MHni9IWuFLm1Z3HTCXu2z9fN62Q==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0", + "object-assign": "^4.0.1", + "thenify-all": "^1.0.0" + } + }, + "node_modules/nanoid": { + "version": "3.3.7", + "resolved": "https://registry.npmjs.org/nanoid/-/nanoid-3.3.7.tgz", + "integrity": "sha512-eSRppjcPIatRIMC1U6UngP8XFcz8MQWGQdt1MTBQ7NaAmvXDfvNxbvWV3x2y6CdEUciCSsDHDQZbhYaB8QEo2g==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "bin": { + "nanoid": "bin/nanoid.cjs" + }, + "engines": { + "node": "^10 || ^12 || ^13.7 || ^14 || >=15.0.1" + } + }, + "node_modules/negotiator": { + "version": "0.6.3", + "resolved": "https://registry.npmjs.org/negotiator/-/negotiator-0.6.3.tgz", + "integrity": "sha512-+EUsqGPLsM+j/zdChZjsnX51g4XrHFOIXwfnCVPGlQk/k5giakcKsuxCObBRu6DSm9opw/O6slWbJdghQM4bBg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/normalize-path": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/normalize-path/-/normalize-path-3.0.0.tgz", + "integrity": "sha512-6eZs5Ls3WtCisHWp9S2GUy8dqkpGi4BVSz3GaqiE6ezub0512ESztXUwUB6C6IKbQkY2Pnb/mD4WYojCRwcwLA==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-assign": { + "version": "4.1.1", + "resolved": "https://registry.npmjs.org/object-assign/-/object-assign-4.1.1.tgz", + "integrity": "sha512-rJgTQnkUnH1sFw8yT6VSU3zD3sWmu6sZhIseY8VX+GRu3P6F7Fu+JNDoXfklElbLJSnc3FUQHVe4cU5hj+BcUg==", + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/object-hash": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/object-hash/-/object-hash-3.0.0.tgz", + "integrity": "sha512-RSn9F68PjH9HqtltsSnqYC1XXoWe9Bju5+213R98cNGttag9q9yAOTzdbsqvIa7aNm5WffBZFpWYr2aWrklWAw==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/object-inspect": { + "version": "1.13.1", + "resolved": "https://registry.npmjs.org/object-inspect/-/object-inspect-1.13.1.tgz", + "integrity": "sha512-5qoj1RUiKOMsCCNLV1CBiPYE10sziTsnmNxkAI/rZhiD63CF7IqdFGC/XzjWjpSgLf0LxXX3bDFIh0E18f6UhQ==", + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/on-finished": { + "version": "2.4.1", + "resolved": "https://registry.npmjs.org/on-finished/-/on-finished-2.4.1.tgz", + "integrity": "sha512-oVlzkg3ENAhCk2zdv7IJwd/QUD4z2RxRwpkcGY8psCVcCYZNq4wYnVWALHM+brtuJjePWiYF/ClmuDr8Ch5+kg==", + "dependencies": { + "ee-first": "1.1.1" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/parseurl": { + "version": "1.3.3", + "resolved": "https://registry.npmjs.org/parseurl/-/parseurl-1.3.3.tgz", + "integrity": "sha512-CiyeOxFT/JZyN5m0z9PfXw4SCBJ6Sygz1Dpl0wqjlhDEGGBP1GnsUVEL0p63hoG1fcj3fHynXi9NYO4nWOL+qQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/path-key": { + "version": "3.1.1", + "resolved": "https://registry.npmjs.org/path-key/-/path-key-3.1.1.tgz", + "integrity": "sha512-ojmeN0qd+y0jszEtoY48r0Peq5dwMEkIlCOu6Q5f41lfkswXuKtYrhgoTpLnyIcHm24Uhqx+5Tqm2InSwLhE6Q==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/path-parse": { + "version": "1.0.7", + "resolved": "https://registry.npmjs.org/path-parse/-/path-parse-1.0.7.tgz", + "integrity": "sha512-LDJzPVEEEPR+y48z93A0Ed0yXb8pAByGWo/k5YYdYgpY2/2EsOsksJrq7lOHxryrVOn1ejG6oAp8ahvOIQD8sw==", + "dev": true + }, + "node_modules/path-scurry": { + "version": "1.11.1", + "resolved": "https://registry.npmjs.org/path-scurry/-/path-scurry-1.11.1.tgz", + "integrity": "sha512-Xa4Nw17FS9ApQFJ9umLiJS4orGjm7ZzwUrwamcGQuHSzDyth9boKDaycYdDcZDuqYATXw4HFXgaqWTctW/v1HA==", + "dev": true, + "dependencies": { + "lru-cache": "^10.2.0", + "minipass": "^5.0.0 || ^6.0.2 || ^7.0.0" + }, + "engines": { + "node": ">=16 || 14 >=14.18" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/path-to-regexp": { + "version": "0.1.7", + "resolved": "https://registry.npmjs.org/path-to-regexp/-/path-to-regexp-0.1.7.tgz", + "integrity": "sha512-5DFkuoqlv1uYQKxy8omFBeJPQcdoE07Kv2sferDCrAq1ohOU+MSDswDIbnx3YAM60qIOnYa53wBhXW0EbMonrQ==" + }, + "node_modules/picocolors": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/picocolors/-/picocolors-1.0.1.tgz", + "integrity": "sha512-anP1Z8qwhkbmu7MFP5iTt+wQKXgwzf7zTyGlcdzabySa9vd0Xt392U0rVmz9poOaBj0uHJKyyo9/upk0HrEQew==", + "dev": true + }, + "node_modules/picomatch": { + "version": "2.3.1", + "resolved": "https://registry.npmjs.org/picomatch/-/picomatch-2.3.1.tgz", + "integrity": "sha512-JU3teHTNjmE2VCGFzuY8EXzCDVwEqB2a8fsIvwaStHhAWJEeVd1o1QD80CU6+ZdEXXSLbSsuLwJjkCBWqRQUVA==", + "engines": { + "node": ">=8.6" + }, + "funding": { + "url": "https://github.com/sponsors/jonschlinkert" + } + }, + "node_modules/pify": { + "version": "2.3.0", + "resolved": "https://registry.npmjs.org/pify/-/pify-2.3.0.tgz", + "integrity": "sha512-udgsAY+fTnvv7kI7aaxbqwWNb0AHiB0qBO89PZKPkoTmGOgdbrHDKD+0B2X4uTfJ/FT1R09r9gTsjUjNJotuog==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/pirates": { + "version": "4.0.6", + "resolved": "https://registry.npmjs.org/pirates/-/pirates-4.0.6.tgz", + "integrity": "sha512-saLsH7WeYYPiD25LDuLRRY/i+6HaPYr6G1OUlN39otzkSTxKnubR9RTxS3/Kk50s1g2JTgFwWQDQyplC5/SHZg==", + "dev": true, + "engines": { + "node": ">= 6" + } + }, + "node_modules/postcss": { + "version": "8.4.38", + "resolved": "https://registry.npmjs.org/postcss/-/postcss-8.4.38.tgz", + "integrity": "sha512-Wglpdk03BSfXkHoQa3b/oulrotAkwrlLDRSOb9D0bN86FdRyE9lppSp33aHNPgBa0JKCoB+drFLZkQoRRYae5A==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "tidelift", + "url": "https://tidelift.com/funding/github/npm/postcss" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "nanoid": "^3.3.7", + "picocolors": "^1.0.0", + "source-map-js": "^1.2.0" + }, + "engines": { + "node": "^10 || ^12 || >=14" + } + }, + "node_modules/postcss-import": { + "version": "15.1.0", + "resolved": "https://registry.npmjs.org/postcss-import/-/postcss-import-15.1.0.tgz", + "integrity": "sha512-hpr+J05B2FVYUAXHeK1YyI267J/dDDhMU6B6civm8hSY1jYJnBXxzKDKDswzJmtLHryrjhnDjqqp/49t8FALew==", + "dev": true, + "dependencies": { + "postcss-value-parser": "^4.0.0", + "read-cache": "^1.0.0", + "resolve": "^1.1.7" + }, + "engines": { + "node": ">=14.0.0" + }, + "peerDependencies": { + "postcss": "^8.0.0" + } + }, + "node_modules/postcss-js": { + "version": "4.0.1", + "resolved": "https://registry.npmjs.org/postcss-js/-/postcss-js-4.0.1.tgz", + "integrity": "sha512-dDLF8pEO191hJMtlHFPRa8xsizHaM82MLfNkUHdUtVEV3tgTp5oj+8qbEqYM57SLfc74KSbw//4SeJma2LRVIw==", + "dev": true, + "dependencies": { + "camelcase-css": "^2.0.1" + }, + "engines": { + "node": "^12 || ^14 || >= 16" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.4.21" + } + }, + "node_modules/postcss-load-config": { + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/postcss-load-config/-/postcss-load-config-4.0.2.tgz", + "integrity": "sha512-bSVhyJGL00wMVoPUzAVAnbEoWyqRxkjv64tUl427SKnPrENtq6hJwUojroMz2VB+Q1edmi4IfrAPpami5VVgMQ==", + "dev": true, + "funding": [ + { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + { + "type": "github", + "url": "https://github.com/sponsors/ai" + } + ], + "dependencies": { + "lilconfig": "^3.0.0", + "yaml": "^2.3.4" + }, + "engines": { + "node": ">= 14" + }, + "peerDependencies": { + "postcss": ">=8.0.9", + "ts-node": ">=9.0.0" + }, + "peerDependenciesMeta": { + "postcss": { + "optional": true + }, + "ts-node": { + "optional": true + } + } + }, + "node_modules/postcss-load-config/node_modules/lilconfig": { + "version": "3.1.2", + "resolved": "https://registry.npmjs.org/lilconfig/-/lilconfig-3.1.2.tgz", + "integrity": "sha512-eop+wDAvpItUys0FWkHIKeC9ybYrTGbU41U5K7+bttZZeohvnY7M9dZ5kB21GNWiFT2q1OoPTvncPCgSOVO5ow==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/antonk52" + } + }, + "node_modules/postcss-nested": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/postcss-nested/-/postcss-nested-6.0.1.tgz", + "integrity": "sha512-mEp4xPMi5bSWiMbsgoPfcP74lsWLHkQbZc3sY+jWYd65CUwXrUaTp0fmNpa01ZcETKlIgUdFN/MpS2xZtqL9dQ==", + "dev": true, + "dependencies": { + "postcss-selector-parser": "^6.0.11" + }, + "engines": { + "node": ">=12.0" + }, + "funding": { + "type": "opencollective", + "url": "https://opencollective.com/postcss/" + }, + "peerDependencies": { + "postcss": "^8.2.14" + } + }, + "node_modules/postcss-selector-parser": { + "version": "6.1.0", + "resolved": "https://registry.npmjs.org/postcss-selector-parser/-/postcss-selector-parser-6.1.0.tgz", + "integrity": "sha512-UMz42UD0UY0EApS0ZL9o1XnLhSTtvvvLe5Dc2H2O56fvRZi+KulDyf5ctDhhtYJBGKStV2FL1fy6253cmLgqVQ==", + "dev": true, + "dependencies": { + "cssesc": "^3.0.0", + "util-deprecate": "^1.0.2" + }, + "engines": { + "node": ">=4" + } + }, + "node_modules/postcss-value-parser": { + "version": "4.2.0", + "resolved": "https://registry.npmjs.org/postcss-value-parser/-/postcss-value-parser-4.2.0.tgz", + "integrity": "sha512-1NNCs6uurfkVbeXG4S8JFT9t19m45ICnif8zWLd5oPSZ50QnwMfK+H3jv408d4jw/7Bttv5axS5IiHoLaVNHeQ==", + "dev": true + }, + "node_modules/proxy-addr": { + "version": "2.0.7", + "resolved": "https://registry.npmjs.org/proxy-addr/-/proxy-addr-2.0.7.tgz", + "integrity": "sha512-llQsMLSUDUPT44jdrU/O37qlnifitDP+ZwrmmZcoSKyLKvtZxpyV0n2/bD/N4tBAAZ/gJEdZU7KMraoK1+XYAg==", + "dependencies": { + "forwarded": "0.2.0", + "ipaddr.js": "1.9.1" + }, + "engines": { + "node": ">= 0.10" + } + }, + "node_modules/qs": { + "version": "6.11.0", + "resolved": "https://registry.npmjs.org/qs/-/qs-6.11.0.tgz", + "integrity": "sha512-MvjoMCJwEarSbUYk5O+nmoSzSutSsTwF85zcHPQ9OrlFoZOYIjaqBAJIqIXjptyD5vThxGq52Xu/MaJzRkIk4Q==", + "dependencies": { + "side-channel": "^1.0.4" + }, + "engines": { + "node": ">=0.6" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/queue-microtask": { + "version": "1.2.3", + "resolved": "https://registry.npmjs.org/queue-microtask/-/queue-microtask-1.2.3.tgz", + "integrity": "sha512-NuaNSa6flKT5JaSYQzJok04JzTL1CA6aGhv5rfLW3PgqA+M2ChpZQnAC8h8i4ZFkBS8X5RqkDBHA7r4hej3K9A==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/range-parser": { + "version": "1.2.1", + "resolved": "https://registry.npmjs.org/range-parser/-/range-parser-1.2.1.tgz", + "integrity": "sha512-Hrgsx+orqoygnmhFbKaHE6c296J+HTAQXoxEF6gNupROmmGJRoyzfG3ccAveqCBrwr/2yxQ5BVd/GTl5agOwSg==", + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/raw-body": { + "version": "2.5.2", + "resolved": "https://registry.npmjs.org/raw-body/-/raw-body-2.5.2.tgz", + "integrity": "sha512-8zGqypfENjCIqGhgXToC8aB2r7YrBX+AQAfIPs/Mlk+BtPTztOvTS01NRW/3Eh60J+a48lt8qsCzirQ6loCVfA==", + "dependencies": { + "bytes": "3.1.2", + "http-errors": "2.0.0", + "iconv-lite": "0.4.24", + "unpipe": "1.0.0" + }, + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/read-cache": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/read-cache/-/read-cache-1.0.0.tgz", + "integrity": "sha512-Owdv/Ft7IjOgm/i0xvNDZ1LrRANRfew4b2prF3OWMQLxLfu3bS8FVhCsrSCMK4lR56Y9ya+AThoTpDCTxCmpRA==", + "dev": true, + "dependencies": { + "pify": "^2.3.0" + } + }, + "node_modules/readdirp": { + "version": "3.6.0", + "resolved": "https://registry.npmjs.org/readdirp/-/readdirp-3.6.0.tgz", + "integrity": "sha512-hOS089on8RduqdbhvQ5Z37A0ESjsqz6qnRcffsMU3495FuTdqSm+7bhJ29JvIOsBDEEnan5DPu9t3To9VRlMzA==", + "dev": true, + "dependencies": { + "picomatch": "^2.2.1" + }, + "engines": { + "node": ">=8.10.0" + } + }, + "node_modules/require-directory": { + "version": "2.1.1", + "resolved": "https://registry.npmjs.org/require-directory/-/require-directory-2.1.1.tgz", + "integrity": "sha512-fGxEI7+wsG9xrvdjsrlmL22OMTTiHRwAMroiEeMgq8gzoLC/PQr7RsRDSTLUg/bZAZtF+TVIkHc6/4RIKrui+Q==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/requires-port": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/requires-port/-/requires-port-1.0.0.tgz", + "integrity": "sha512-KigOCHcocU3XODJxsu8i/j8T9tzT4adHiecwORRQ0ZZFcp7ahwXuRU1m+yuO90C5ZUyGeGfocHDI14M3L3yDAQ==" + }, + "node_modules/resolve": { + "version": "1.22.8", + "resolved": "https://registry.npmjs.org/resolve/-/resolve-1.22.8.tgz", + "integrity": "sha512-oKWePCxqpd6FlLvGV1VU0x7bkPmmCNolxzjMf4NczoDnQcIWrAF+cPtZn5i6n+RfD2d9i0tzpKnG6Yk168yIyw==", + "dev": true, + "dependencies": { + "is-core-module": "^2.13.0", + "path-parse": "^1.0.7", + "supports-preserve-symlinks-flag": "^1.0.0" + }, + "bin": { + "resolve": "bin/resolve" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/reusify": { + "version": "1.0.4", + "resolved": "https://registry.npmjs.org/reusify/-/reusify-1.0.4.tgz", + "integrity": "sha512-U9nH88a3fc/ekCF1l0/UP1IosiuIjyTh7hBvXVMHYgVcfGvt897Xguj2UOLDeI5BG2m7/uwyaLVT6fbtCwTyzw==", + "dev": true, + "engines": { + "iojs": ">=1.0.0", + "node": ">=0.10.0" + } + }, + "node_modules/run-parallel": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/run-parallel/-/run-parallel-1.2.0.tgz", + "integrity": "sha512-5l4VyZR86LZ/lDxZTR6jqL8AFE2S0IFLMP26AbjsLVADxHdhB/c0GUsH+y39UfCi3dzz8OlQuPmnaJOMoDHQBA==", + "dev": true, + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ], + "dependencies": { + "queue-microtask": "^1.2.2" + } + }, + "node_modules/safe-buffer": { + "version": "5.2.1", + "resolved": "https://registry.npmjs.org/safe-buffer/-/safe-buffer-5.2.1.tgz", + "integrity": "sha512-rp3So07KcdmmKbGvgaNxQSJr7bGVSVk5S9Eq1F+ppbRo70+YeaDxkw5Dd8NPN+GD6bjnYm2VuPuCXmpuYvmCXQ==", + "funding": [ + { + "type": "github", + "url": "https://github.com/sponsors/feross" + }, + { + "type": "patreon", + "url": "https://www.patreon.com/feross" + }, + { + "type": "consulting", + "url": "https://feross.org/support" + } + ] + }, + "node_modules/safer-buffer": { + "version": "2.1.2", + "resolved": "https://registry.npmjs.org/safer-buffer/-/safer-buffer-2.1.2.tgz", + "integrity": "sha512-YZo3K82SD7Riyi0E1EQPojLz7kpepnSQI9IyPbHHg1XXXevb5dJI7tpyN2ADxGcQbHG7vcyRHk0cbwqcQriUtg==" + }, + "node_modules/send": { + "version": "0.18.0", + "resolved": "https://registry.npmjs.org/send/-/send-0.18.0.tgz", + "integrity": "sha512-qqWzuOjSFOuqPjFe4NOsMLafToQQwBSOEpS+FwEt3A2V3vKubTquT3vmLTQpFgMXp8AlFWFuP1qKaJZOtPpVXg==", + "dependencies": { + "debug": "2.6.9", + "depd": "2.0.0", + "destroy": "1.2.0", + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "etag": "~1.8.1", + "fresh": "0.5.2", + "http-errors": "2.0.0", + "mime": "1.6.0", + "ms": "2.1.3", + "on-finished": "2.4.1", + "range-parser": "~1.2.1", + "statuses": "2.0.1" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/send/node_modules/ms": { + "version": "2.1.3", + "resolved": "https://registry.npmjs.org/ms/-/ms-2.1.3.tgz", + "integrity": "sha512-6FlzubTLZG3J2a/NVCAleEhjzq5oxgHyaCU9yYXvcLsvoVaHJq/s5xXI6/XXP6tz7R9xAOtHnSO/tXtF3WRTlA==" + }, + "node_modules/serve-static": { + "version": "1.15.0", + "resolved": "https://registry.npmjs.org/serve-static/-/serve-static-1.15.0.tgz", + "integrity": "sha512-XGuRDNjXUijsUL0vl6nSD7cwURuzEgglbOaFuZM9g3kwDXOWVTck0jLzjPzGD+TazWbboZYu52/9/XPdUgne9g==", + "dependencies": { + "encodeurl": "~1.0.2", + "escape-html": "~1.0.3", + "parseurl": "~1.3.3", + "send": "0.18.0" + }, + "engines": { + "node": ">= 0.8.0" + } + }, + "node_modules/set-function-length": { + "version": "1.2.2", + "resolved": "https://registry.npmjs.org/set-function-length/-/set-function-length-1.2.2.tgz", + "integrity": "sha512-pgRc4hJ4/sNjWCSS9AmnS40x3bNMDTknHgL5UaMBTMyJnU90EgWh1Rz+MC9eFu4BuN/UwZjKQuY/1v3rM7HMfg==", + "dependencies": { + "define-data-property": "^1.1.4", + "es-errors": "^1.3.0", + "function-bind": "^1.1.2", + "get-intrinsic": "^1.2.4", + "gopd": "^1.0.1", + "has-property-descriptors": "^1.0.2" + }, + "engines": { + "node": ">= 0.4" + } + }, + "node_modules/setprototypeof": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/setprototypeof/-/setprototypeof-1.2.0.tgz", + "integrity": "sha512-E5LDX7Wrp85Kil5bhZv46j8jOeboKq5JMmYM3gVGdGH8xFpPWXUMsNrlODCrkoxMEeNi/XZIwuRvY4XNwYMJpw==" + }, + "node_modules/shebang-command": { + "version": "2.0.0", + "resolved": "https://registry.npmjs.org/shebang-command/-/shebang-command-2.0.0.tgz", + "integrity": "sha512-kHxr2zZpYtdmrN1qDjrrX/Z1rR1kG8Dx+gkpK1G4eXmvXswmcE1hTWBWYUzlraYw1/yZp6YuDY77YtvbN0dmDA==", + "dev": true, + "dependencies": { + "shebang-regex": "^3.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/shebang-regex": { + "version": "3.0.0", + "resolved": "https://registry.npmjs.org/shebang-regex/-/shebang-regex-3.0.0.tgz", + "integrity": "sha512-7++dFhtcx3353uBaq8DDR4NuxBetBzC7ZQOhmTQInHEd6bSrXdiEyzCvG07Z44UYdLShWUyXt5M/yhz8ekcb1A==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/side-channel": { + "version": "1.0.6", + "resolved": "https://registry.npmjs.org/side-channel/-/side-channel-1.0.6.tgz", + "integrity": "sha512-fDW/EZ6Q9RiO8eFG8Hj+7u/oW+XrPTIChwCOM2+th2A6OblDtYYIpve9m+KvI9Z4C9qSEXlaGR6bTEYHReuglA==", + "dependencies": { + "call-bind": "^1.0.7", + "es-errors": "^1.3.0", + "get-intrinsic": "^1.2.4", + "object-inspect": "^1.13.1" + }, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/signal-exit": { + "version": "4.1.0", + "resolved": "https://registry.npmjs.org/signal-exit/-/signal-exit-4.1.0.tgz", + "integrity": "sha512-bzyZ1e88w9O1iNJbKnOlvYTrWPDl46O1bG0D3XInv+9tkPrxrN8jUUTiFlDkkmKWgn1M6CfIA13SuGqOa9Korw==", + "dev": true, + "engines": { + "node": ">=14" + }, + "funding": { + "url": "https://github.com/sponsors/isaacs" + } + }, + "node_modules/source-map-js": { + "version": "1.2.0", + "resolved": "https://registry.npmjs.org/source-map-js/-/source-map-js-1.2.0.tgz", + "integrity": "sha512-itJW8lvSA0TXEphiRoawsCksnlf8SyvmFzIhltqAHluXd88pkCd+cXJVHTDwdCr0IzwptSm035IHQktUu1QUMg==", + "dev": true, + "engines": { + "node": ">=0.10.0" + } + }, + "node_modules/statuses": { + "version": "2.0.1", + "resolved": "https://registry.npmjs.org/statuses/-/statuses-2.0.1.tgz", + "integrity": "sha512-RwNA9Z/7PrK06rYLIzFMlaF+l73iwpzsqRIFgbMLbTcLD6cOao82TaWefPXQvB2fOC4AjuYSEndS7N/mTCbkdQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/string-width": { + "version": "5.1.2", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-5.1.2.tgz", + "integrity": "sha512-HnLOCR3vjcY8beoNLtcjZ5/nxn2afmME6lhrDrebokqMap+XbeW8n9TXpPDOqdGK5qcI3oT0GKTW6wC7EMiVqA==", + "dev": true, + "dependencies": { + "eastasianwidth": "^0.2.0", + "emoji-regex": "^9.2.2", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/sponsors/sindresorhus" + } + }, + "node_modules/string-width-cjs": { + "name": "string-width", + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/string-width-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/string-width-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi": { + "version": "7.1.0", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-7.1.0.tgz", + "integrity": "sha512-iq6eVVI64nQQTRYq2KtEg2d2uU7LElhTJwsH4YzIHZshxlgZms/wIc4VoDQTlG/IvVIrBKG06CrZnp0qv7hkcQ==", + "dev": true, + "dependencies": { + "ansi-regex": "^6.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/strip-ansi?sponsor=1" + } + }, + "node_modules/strip-ansi-cjs": { + "name": "strip-ansi", + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/strip-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/sucrase": { + "version": "3.35.0", + "resolved": "https://registry.npmjs.org/sucrase/-/sucrase-3.35.0.tgz", + "integrity": "sha512-8EbVDiu9iN/nESwxeSxDKe0dunta1GOlHufmSSXxMD2z2/tMZpDMpvXQGsc+ajGo8y2uYUmixaSRUc/QPoQ0GA==", + "dev": true, + "dependencies": { + "@jridgewell/gen-mapping": "^0.3.2", + "commander": "^4.0.0", + "glob": "^10.3.10", + "lines-and-columns": "^1.1.6", + "mz": "^2.7.0", + "pirates": "^4.0.1", + "ts-interface-checker": "^0.1.9" + }, + "bin": { + "sucrase": "bin/sucrase", + "sucrase-node": "bin/sucrase-node" + }, + "engines": { + "node": ">=16 || 14 >=14.17" + } + }, + "node_modules/supports-color": { + "version": "7.2.0", + "resolved": "https://registry.npmjs.org/supports-color/-/supports-color-7.2.0.tgz", + "integrity": "sha512-qpCAvRl9stuOHveKsn7HncJRvv501qIacKzQlO/+Lwxc9+0q2wLyv4Dfvt80/DPn2pqOBsJdDiogXGR9+OvwRw==", + "dev": true, + "dependencies": { + "has-flag": "^4.0.0" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/supports-preserve-symlinks-flag": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/supports-preserve-symlinks-flag/-/supports-preserve-symlinks-flag-1.0.0.tgz", + "integrity": "sha512-ot0WnXS9fgdkgIcePe6RHNk1WA8+muPa6cSjeR3V8K27q9BB1rTE3R1p7Hv0z1ZyAc8s6Vvv8DIyWf681MAt0w==", + "dev": true, + "engines": { + "node": ">= 0.4" + }, + "funding": { + "url": "https://github.com/sponsors/ljharb" + } + }, + "node_modules/tailwindcss": { + "version": "3.4.4", + "resolved": "https://registry.npmjs.org/tailwindcss/-/tailwindcss-3.4.4.tgz", + "integrity": "sha512-ZoyXOdJjISB7/BcLTR6SEsLgKtDStYyYZVLsUtWChO4Ps20CBad7lfJKVDiejocV4ME1hLmyY0WJE3hSDcmQ2A==", + "dev": true, + "dependencies": { + "@alloc/quick-lru": "^5.2.0", + "arg": "^5.0.2", + "chokidar": "^3.5.3", + "didyoumean": "^1.2.2", + "dlv": "^1.1.3", + "fast-glob": "^3.3.0", + "glob-parent": "^6.0.2", + "is-glob": "^4.0.3", + "jiti": "^1.21.0", + "lilconfig": "^2.1.0", + "micromatch": "^4.0.5", + "normalize-path": "^3.0.0", + "object-hash": "^3.0.0", + "picocolors": "^1.0.0", + "postcss": "^8.4.23", + "postcss-import": "^15.1.0", + "postcss-js": "^4.0.1", + "postcss-load-config": "^4.0.1", + "postcss-nested": "^6.0.1", + "postcss-selector-parser": "^6.0.11", + "resolve": "^1.22.2", + "sucrase": "^3.32.0" + }, + "bin": { + "tailwind": "lib/cli.js", + "tailwindcss": "lib/cli.js" + }, + "engines": { + "node": ">=14.0.0" + } + }, + "node_modules/thenify": { + "version": "3.3.1", + "resolved": "https://registry.npmjs.org/thenify/-/thenify-3.3.1.tgz", + "integrity": "sha512-RVZSIV5IG10Hk3enotrhvz0T9em6cyHBLkH/YAZuKqd8hRkKhSfCGIcP2KUY0EPxndzANBmNllzWPwak+bheSw==", + "dev": true, + "dependencies": { + "any-promise": "^1.0.0" + } + }, + "node_modules/thenify-all": { + "version": "1.6.0", + "resolved": "https://registry.npmjs.org/thenify-all/-/thenify-all-1.6.0.tgz", + "integrity": "sha512-RNxQH/qI8/t3thXJDwcstUO4zeqo64+Uy/+sNVRBx4Xn2OX+OZ9oP+iJnNFqplFra2ZUVeKCSa2oVWi3T4uVmA==", + "dev": true, + "dependencies": { + "thenify": ">= 3.1.0 < 4" + }, + "engines": { + "node": ">=0.8" + } + }, + "node_modules/to-regex-range": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/to-regex-range/-/to-regex-range-5.0.1.tgz", + "integrity": "sha512-65P7iz6X5yEr1cwcgvQxbbIw7Uk3gOy5dIdtZ4rDveLqhrdJP+Li/Hx6tyK0NEb+2GCyneCMJiGqrADCSNk8sQ==", + "dependencies": { + "is-number": "^7.0.0" + }, + "engines": { + "node": ">=8.0" + } + }, + "node_modules/toidentifier": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/toidentifier/-/toidentifier-1.0.1.tgz", + "integrity": "sha512-o5sSPKEkg/DIQNmH43V0/uerLrpzVedkUh8tGNvaeXpfpuwjKenlSox/2O/BTlZUtEe+JG7s5YhEz608PlAHRA==", + "engines": { + "node": ">=0.6" + } + }, + "node_modules/ts-interface-checker": { + "version": "0.1.13", + "resolved": "https://registry.npmjs.org/ts-interface-checker/-/ts-interface-checker-0.1.13.tgz", + "integrity": "sha512-Y/arvbn+rrz3JCKl9C4kVNfTfSm2/mEp5FSz5EsZSANGPSlQrpRI5M4PKF+mJnE52jOO90PnPSc3Ur3bTQw0gA==", + "dev": true + }, + "node_modules/type-is": { + "version": "1.6.18", + "resolved": "https://registry.npmjs.org/type-is/-/type-is-1.6.18.tgz", + "integrity": "sha512-TkRKr9sUTxEH8MdfuCSP7VizJyzRNMjj2J2do2Jr3Kym598JVdEksuzPQCnlFPW4ky9Q+iA+ma9BGm06XQBy8g==", + "dependencies": { + "media-typer": "0.3.0", + "mime-types": "~2.1.24" + }, + "engines": { + "node": ">= 0.6" + } + }, + "node_modules/undici-types": { + "version": "5.26.5", + "resolved": "https://registry.npmjs.org/undici-types/-/undici-types-5.26.5.tgz", + "integrity": "sha512-JlCMO+ehdEIKqlFxk6IfVoAUVmgz7cU7zD/h9XZ0qzeosSHmUJVOzSQvvYSYWXkFXC+IfLKSIffhv0sVZup6pA==" + }, + "node_modules/unpipe": { + "version": "1.0.0", + "resolved": "https://registry.npmjs.org/unpipe/-/unpipe-1.0.0.tgz", + "integrity": "sha512-pjy2bYhSsufwWlKwPc+l3cN7+wuJlK6uz0YdJEOlQDbl6jo/YlPi4mb8agUkVC8BF7V8NuzeyPNqRksA3hztKQ==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/util-deprecate": { + "version": "1.0.2", + "resolved": "https://registry.npmjs.org/util-deprecate/-/util-deprecate-1.0.2.tgz", + "integrity": "sha512-EPD5q1uXyFxJpCrLnCc1nHnq3gOa6DZBocAIiI2TaSCA7VCJ1UJDMagCzIkXNsUYfD1daK//LTEQ8xiIbrHtcw==", + "dev": true + }, + "node_modules/utils-merge": { + "version": "1.0.1", + "resolved": "https://registry.npmjs.org/utils-merge/-/utils-merge-1.0.1.tgz", + "integrity": "sha512-pMZTvIkT1d+TFGvDOqodOclx0QWkkgi6Tdoa8gC8ffGAAqz9pzPTZWAybbsHHoED/ztMtkv/VoYTYyShUn81hA==", + "engines": { + "node": ">= 0.4.0" + } + }, + "node_modules/vary": { + "version": "1.1.2", + "resolved": "https://registry.npmjs.org/vary/-/vary-1.1.2.tgz", + "integrity": "sha512-BNGbWLfd0eUPabhkXUVm0j8uuvREyTh5ovRa/dyow/BqAbZJyC+5fU+IzQOzmAKzYqYRAISoRhdQr3eIZ/PXqg==", + "engines": { + "node": ">= 0.8" + } + }, + "node_modules/which": { + "version": "2.0.2", + "resolved": "https://registry.npmjs.org/which/-/which-2.0.2.tgz", + "integrity": "sha512-BLI3Tl1TW3Pvl70l3yq3Y64i+awpwXqsGBYWkkqMtnbXgrMD+yj7rhW0kuEDxzJaYXGjEW5ogapKNMEKNMjibA==", + "dev": true, + "dependencies": { + "isexe": "^2.0.0" + }, + "bin": { + "node-which": "bin/node-which" + }, + "engines": { + "node": ">= 8" + } + }, + "node_modules/wrap-ansi": { + "version": "8.1.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-8.1.0.tgz", + "integrity": "sha512-si7QWI6zUMq56bESFvagtmzMdGOtoxfR+Sez11Mobfc7tm+VkUckk9bW2UeffTGVUbOksxmSw0AA2gs8g71NCQ==", + "dev": true, + "dependencies": { + "ansi-styles": "^6.1.0", + "string-width": "^5.0.1", + "strip-ansi": "^7.0.1" + }, + "engines": { + "node": ">=12" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs": { + "name": "wrap-ansi", + "version": "7.0.0", + "resolved": "https://registry.npmjs.org/wrap-ansi/-/wrap-ansi-7.0.0.tgz", + "integrity": "sha512-YVGIj2kamLSTxw6NsZjoBxfSwsn0ycdesmc4p+Q21c5zPuZ1pl+NfxVdxPtdHvmNVOQ6XSYG4AUtyt/Fi7D16Q==", + "dev": true, + "dependencies": { + "ansi-styles": "^4.0.0", + "string-width": "^4.1.0", + "strip-ansi": "^6.0.0" + }, + "engines": { + "node": ">=10" + }, + "funding": { + "url": "https://github.com/chalk/wrap-ansi?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/ansi-styles": { + "version": "4.3.0", + "resolved": "https://registry.npmjs.org/ansi-styles/-/ansi-styles-4.3.0.tgz", + "integrity": "sha512-zbB9rCJAT1rbjiVDb2hqKFHNYLxgtk8NURxZ3IZwD3F6NtxbXZQCnnSi1Lkx+IDohdPlFp222wVALIheZJQSEg==", + "dev": true, + "dependencies": { + "color-convert": "^2.0.1" + }, + "engines": { + "node": ">=8" + }, + "funding": { + "url": "https://github.com/chalk/ansi-styles?sponsor=1" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/wrap-ansi-cjs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/wrap-ansi-cjs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/y18n": { + "version": "5.0.8", + "resolved": "https://registry.npmjs.org/y18n/-/y18n-5.0.8.tgz", + "integrity": "sha512-0pfFzegeDWJHJIAmTLRP2DwHjdF5s7jo9tuztdQxAhINCdvS+3nGINqPd00AphqJR/0LhANUS6/+7SCb98YOfA==", + "dev": true, + "engines": { + "node": ">=10" + } + }, + "node_modules/yaml": { + "version": "2.4.5", + "resolved": "https://registry.npmjs.org/yaml/-/yaml-2.4.5.tgz", + "integrity": "sha512-aBx2bnqDzVOyNKfsysjA2ms5ZlnjSAW2eG3/L5G/CSujfjLJTJsEw1bGw8kCf04KodQWk1pxlGnZ56CRxiawmg==", + "dev": true, + "bin": { + "yaml": "bin.mjs" + }, + "engines": { + "node": ">= 14" + } + }, + "node_modules/yargs": { + "version": "17.7.2", + "resolved": "https://registry.npmjs.org/yargs/-/yargs-17.7.2.tgz", + "integrity": "sha512-7dSzzRQ++CKnNI/krKnYRV7JKKPUXMEh61soaHKg9mrWEhzFWhFnxPxGl+69cD1Ou63C13NUPCnmIcrvqCuM6w==", + "dev": true, + "dependencies": { + "cliui": "^8.0.1", + "escalade": "^3.1.1", + "get-caller-file": "^2.0.5", + "require-directory": "^2.1.1", + "string-width": "^4.2.3", + "y18n": "^5.0.5", + "yargs-parser": "^21.1.1" + }, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs-parser": { + "version": "21.1.1", + "resolved": "https://registry.npmjs.org/yargs-parser/-/yargs-parser-21.1.1.tgz", + "integrity": "sha512-tVpsJW7DdjecAiFpbIB1e3qxIQsE6NoPc5/eTdrbbIC4h0LVsWhnoa3g+m2HclBIujHzsxZ4VJVA+GUuc2/LBw==", + "dev": true, + "engines": { + "node": ">=12" + } + }, + "node_modules/yargs/node_modules/ansi-regex": { + "version": "5.0.1", + "resolved": "https://registry.npmjs.org/ansi-regex/-/ansi-regex-5.0.1.tgz", + "integrity": "sha512-quJQXlTSUGL2LH9SUXo8VwsY4soanhgo6LNSm84E1LBcE8s3O0wpdiRzyR9z/ZZJMlMWv37qOOb9pdJlMUEKFQ==", + "dev": true, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/emoji-regex": { + "version": "8.0.0", + "resolved": "https://registry.npmjs.org/emoji-regex/-/emoji-regex-8.0.0.tgz", + "integrity": "sha512-MSjYzcWNOA0ewAHpz0MxpYFvwg6yjy1NG3xteoqz644VCo/RPgnr1/GGt+ic3iJTzQ8Eu3TdM14SawnVUmGE6A==", + "dev": true + }, + "node_modules/yargs/node_modules/string-width": { + "version": "4.2.3", + "resolved": "https://registry.npmjs.org/string-width/-/string-width-4.2.3.tgz", + "integrity": "sha512-wKyQRQpjJ0sIp62ErSZdGsjMJWsap5oRNihHhu6G7JVO/9jIB6UyevL+tXuOqrng8j/cxKTWyWUwvSTriiZz/g==", + "dev": true, + "dependencies": { + "emoji-regex": "^8.0.0", + "is-fullwidth-code-point": "^3.0.0", + "strip-ansi": "^6.0.1" + }, + "engines": { + "node": ">=8" + } + }, + "node_modules/yargs/node_modules/strip-ansi": { + "version": "6.0.1", + "resolved": "https://registry.npmjs.org/strip-ansi/-/strip-ansi-6.0.1.tgz", + "integrity": "sha512-Y38VPSHcqkFrCpFnQ9vuSXmquuv5oXOKpGeT6aGrr3o3Gc9AlVa6JBfUSOCnbxGGZF+/0ooI7KrPuUSztUdU5A==", + "dev": true, + "dependencies": { + "ansi-regex": "^5.0.1" + }, + "engines": { + "node": ">=8" + } + } + } +} diff --git a/typescript/fiddle-proxy/package.json b/typescript/fiddle-proxy/package.json new file mode 100644 index 000000000..798dd511b --- /dev/null +++ b/typescript/fiddle-proxy/package.json @@ -0,0 +1,21 @@ +{ + "name": "fiddle-proxy", + "version": "1.0.0", + "description": "", + "main": "index.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1", + "start": "node server.js" + }, + "keywords": [], + "author": "", + "license": "ISC", + "devDependencies": { + "@flydotio/node-demo": "^0.2.1" + }, + "dependencies": { + "cors": "^2.8.5", + "express": "^4.19.2", + "http-proxy-middleware": "^3.0.0" + } +} \ No newline at end of file diff --git a/typescript/fiddle-proxy/server.js b/typescript/fiddle-proxy/server.js new file mode 100644 index 000000000..5b72e893d --- /dev/null +++ b/typescript/fiddle-proxy/server.js @@ -0,0 +1,49 @@ +const cors = require('cors') +const { createProxyMiddleware } = require('http-proxy-middleware') +const app = require('express')() + +app.use(cors()) + +app.use( + createProxyMiddleware({ + changeOrigin: true, + router: (req) => { + // Extract the original target URL from the custom header + const originalUrl = req.headers['baml-original-url'] + + if (typeof originalUrl === 'string') { + return originalUrl + } else { + throw new Error('baml-original-url header is missing or invalid') + } + }, + logger: console, + on: { + proxyReq: (proxyReq, req, res) => { + if (req.headers['baml-original-url'].includes('openai.com')) { + if (process.env.OPENAI_API_KEY === undefined) { + throw new Error('OPENAI_API_KEY is missing') + } + proxyReq.setHeader('Authorization', `Bearer ${process.env.OPENAI_API_KEY}`) + } + if (req.headers['baml-original-url'].includes('anthropic')) { + if (process.env.ANTHROPIC_API_KEY === undefined) { + throw new Error('ANTHROPIC_API_KEY is missing') + } + proxyReq.setHeader('x-api-key', process.env.ANTHROPIC_API_KEY) + } + }, + proxyRes: (proxyRes, req, res) => { + proxyRes.headers['Access-Control-Allow-Origin'] = '*' + }, + error: (error) => { + console.error('proxy error:', error) + }, + }, + }), +) + +// Start web server on port 3000 +app.listen(3000, () => { + console.log('Server is listening on port 3000') +}) diff --git a/typescript/playground-common/src/baml_wasm_web/EventListener.tsx b/typescript/playground-common/src/baml_wasm_web/EventListener.tsx index bbb27276f..4220af8f8 100644 --- a/typescript/playground-common/src/baml_wasm_web/EventListener.tsx +++ b/typescript/playground-common/src/baml_wasm_web/EventListener.tsx @@ -17,8 +17,11 @@ const defaultEnvKeyValues: [string, string][] = (() => { if ((window as any).next?.version) { console.log('Running in nextjs') const domain = window?.location?.origin || '' - // Running in a Next.js environment, proxy to nextjs rewrite - return [] + if (domain.includes('localhost')) { + // we can do somehting fancier here later if we want to test locally. + return [['BOUNDARY_PROXY_URL', 'https://fiddle-proxy.fly.dev']] + } + return [['BOUNDARY_PROXY_URL', 'https://fiddle-proxy.fly.dev']] } else { console.log('Not running in a Next.js environment, set default value') // Not running in a Next.js environment, set default value diff --git a/typescript/pnpm-lock.yaml b/typescript/pnpm-lock.yaml index e69e6fd15..55ab793fe 100644 --- a/typescript/pnpm-lock.yaml +++ b/typescript/pnpm-lock.yaml @@ -229,6 +229,9 @@ importers: clsx: specifier: ^2.1.0 version: 2.1.1 + http-proxy: + specifier: ^1.18.1 + version: 1.18.1(debug@4.3.4) jotai: specifier: ^2.8.0 version: 2.8.0(@types/react@18.3.2)(react@18.3.1) @@ -299,6 +302,9 @@ importers: '@githubocto/tailwind-vscode': specifier: ^1.0.5 version: 1.0.5(tailwindcss@3.4.3) + '@types/http-proxy': + specifier: ^1.17.14 + version: 1.17.14 '@types/node': specifier: ^20.12.12 version: 20.12.12